How to specify the GCP Credential Location in application.properties file (for using the Pub/Sub in GCP)?

问题描述 投票:0回答:6

通过在 application.properties 文件中指定文件位置来传递服务帐户密钥文件(从 GCP 控制台生成)似乎很简单。但是,我尝试了以下所有选项:

1. spring.cloud.gcp.credentials.location=file:/home/my_user_id/mp6key.json
2. spring.cloud.gcp.credentials.location=file:src/main/resources/mp6key.json
3. spring.cloud.gcp.credentials.location=file:./main/resources/mp6key.json
4. spring.cloud.gcp.credentials.location=file:/src/main/resources/mp6key.json

这一切都以同样的错误结束:

java.io.FileNotFoundException: /home/my_user_id/mp6key.json (No such file or directory)

谁能建议我应该把密钥文件放在哪里,然后我应该如何正确指定文件的路径?

相同的程序在 Ecplise 中成功运行,使用来自 GCP 的 Pub/Sub 处理发布和订阅消息(使用 GCP 中生成的项目 ID/服务帐户密钥),但现在在部署到 GCP 上运行后仍然存在上述问题。

google-cloud-platform publish-subscribe credentials
6个回答
4
投票

如官方文档中所述,凭证文件可以从许多不同的位置获取,例如文件系统、类路径、URL 等

例如,如果服务帐户密钥文件作为

src/main/resources/key.json
存储在类路径中,则传递以下属性

spring.cloud.gcp.credentials.location=classpath:key.json

如果密钥文件存储在本地文件系统的其他地方,请在属性值中使用

file
前缀

spring.cloud.gcp.credentials.location=file:<path to key file>

2
投票

我的台词是这样的:

spring.cloud.gcp.credentials.location=file:src/main/resources/[my_json_file]

这行得通。

如果我将它放在项目目录的根目录下,以下内容也有效:

spring.cloud.gcp.credentials.location=file:./[my_json_file]

1
投票

您是否尝试过遵循此quickstart?请尝试认真地遵循它,如果您在完成快速入门时遇到任何错误,请解释一下。

无论如何,在运行 Java 脚本之前,请尝试在控制台上运行以下命令(请修改为您存储密钥的确切路径):

export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/mp6key.json"

您如何在 Java 脚本中验证您的凭据?


1
投票

我的回答很简单:如果你在 GCP 上运行你的代码,你不必使用服务帐户密钥文件。问题消除,问题解决!

更严重的是,看看服务身份。我不知道你现在的服务是什么(Compute?Function?Cloud Run?)。无论如何,您可以在 GCP 组件上附加任何服务帐户。然后,当您编写代码时,只需使用默认凭证即可。自动加载组件标识。 无需管理钥匙,无需安全存储钥匙,无需轮换钥匙!

如果您提供有关目标平台的更多详细信息,我可以为您提供一些指导来实现这一目标。

请记住,服务帐户密钥文件旨在 由 GCP 外部托管的自动应用程序(不涉及用户帐户)使用(本地、其他云提供商、CI/CD、Apigee 等)

更新

您在使用个人账户时,也可以使用默认凭证。

  • 在您的计算机上安装
    gcloud SDK
  • 使用命令
    gcloud auth application-default login
  • 遵照指示
  • 享受!

如果不行,获取登录命令后显示的

<path>
,在名为
GOOGLE_APPLICATION_CREDENTIALS
的环境变量中设置这个值。

如果您明确想要使用服务帐户密钥文件(由于之前的原因这是一个安全问题,但是......),您可以在本地使用它

  • 要么将json密钥文件路径设置到
    GOOGLE_APPLICATION_CREDENTIALS
    环境变量
  • 或者运行这个命令
    gcloud auth activate-service-account --key-file=<path to your json key file>

0
投票

前提是你的文件在resources文件夹下try

file://mp6key.json

使用

file://
而不是
file:/
至少对我有用


0
投票

对于使用 Spring Cloud 的 Pub/Sub 凭证,请使用此属性。

spring.cloud.gcp.pubsub.credentials.location=file:/someLocation/keyFileName.json

© www.soinside.com 2019 - 2024. All rights reserved.