如何在 application.properties 文件中指定 GCP 凭据位置(用于在 GCP 中使用 Pub/Sub)?
How to specify the GCP Credential Location in application.properties file (for using the Pub/Sub in GCP)?
通过在 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/Service 帐户密钥),但现在卡住了在 GCP 上部署到 运行 后出现上述问题。
您是否尝试过关注此 quickstart?请仔细阅读并解释您在完成快速入门时遇到的任何错误。
无论如何,在 运行 您的 Java 脚本之前,请在控制台上尝试 运行 以下内容(请使用您存储密钥的确切路径进行修改):
export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/mp6key.json"
您如何在 Java 脚本中验证您的凭据?
我的回答很简单:如果您 运行 在 GCP 上编写代码,则不必使用服务帐户密钥文件。问题消除,问题解决!
更严重的是,看看服务身份。我不知道你现在的服务是什么(Compute?Function?Cloud 运行?)。无论如何,您可以在 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>
如果您的文件在资源文件夹中,请尝试
file://mp6key.json
使用 file://
而不是 file:/
至少对我有用
如官方documentation所述,可以从文件系统、类路径、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>
我的线路是这样的:
spring.cloud.gcp.credentials.location=file:src/main/resources/[my_json_file]
这有效。
如果我将它放在项目目录的根目录下,以下内容也有效:
spring.cloud.gcp.credentials.location=file:./[my_json_file]
通过在 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/Service 帐户密钥),但现在卡住了在 GCP 上部署到 运行 后出现上述问题。
您是否尝试过关注此 quickstart?请仔细阅读并解释您在完成快速入门时遇到的任何错误。
无论如何,在 运行 您的 Java 脚本之前,请在控制台上尝试 运行 以下内容(请使用您存储密钥的确切路径进行修改):
export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/mp6key.json"
您如何在 Java 脚本中验证您的凭据?
我的回答很简单:如果您 运行 在 GCP 上编写代码,则不必使用服务帐户密钥文件。问题消除,问题解决!
更严重的是,看看服务身份。我不知道你现在的服务是什么(Compute?Function?Cloud 运行?)。无论如何,您可以在 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>
如果您的文件在资源文件夹中,请尝试
file://mp6key.json
使用 file://
而不是 file:/
至少对我有用
如官方documentation所述,可以从文件系统、类路径、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>
我的线路是这样的:
spring.cloud.gcp.credentials.location=file:src/main/resources/[my_json_file]
这有效。
如果我将它放在项目目录的根目录下,以下内容也有效:
spring.cloud.gcp.credentials.location=file:./[my_json_file]