Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform 如何在application.properties文件中指定GCP凭据位置(用于在GCP中使用发布/订阅)?_Google Cloud Platform_Publish Subscribe_Credentials - Fatal编程技术网

Google cloud platform 如何在application.properties文件中指定GCP凭据位置(用于在GCP中使用发布/订阅)?

Google cloud platform 如何在application.properties文件中指定GCP凭据位置(用于在GCP中使用发布/订阅)?,google-cloud-platform,publish-subscribe,credentials,Google Cloud Platform,Publish Subscribe,Credentials,通过在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.c

通过在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中的发布/订阅处理(使用GCP中生成的项目Id/服务帐户密钥)发布和订阅消息,但在部署到GCP上运行后,现在遇到了上述问题。

您尝试过这样做吗?请尝试仔细地遵循它,并解释完成快速启动时是否出现任何错误

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


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

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

更严重的是,请查看服务标识。我不知道你目前的服务是什么(计算?功能?云运行?)。无论如何,您可以在GCP组件上附加任何服务帐户。然后,当您编码时,只需使用默认凭证。自动加载组件标识无需管理的钥匙,无需安全存储的钥匙,无需旋转的钥匙

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

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

更新

使用个人帐户时,也可以使用默认凭据

  • 在您的计算机上安装
    gcloud SDK
  • 使用命令
    gcloud auth application default login
  • 按照说明去做
  • 享受吧
如果不起作用,请在login命令后显示
,并在名为
GOOGLE\u APPLICATION\u CREDENTIALS
的环境变量中设置此值

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

  • 将json密钥文件路径设置到
    GOOGLE\u APPLICATION\u CREDENTIALS
    环境变量中
  • 或者运行此命令
    gcloud auth activate service account--key file=

如果您的文件位于资源文件夹中,请重试

file://mp6key.json


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

使用服务帐户密钥文件的应用程序是否将在GCP上运行?可以肯定的是,你的最后一句话似乎对这个问题说是的。同一个应用程序在Eclipse中成功运行,然后部署到GCP上运行,但由于上述问题而失败。您解决了这个问题吗?我也面临同样的问题。它可以使用环境变量,但不能使用我的应用程序属性。我尝试了GOOGLE\u application\u凭据,但现在失败了,错误为:PermissionDeniedException:io.grpc.StatusRuntimeException:PERMISSION\u DENIED:请求的身份验证作用域不足。原因:io.grpc.StatusRuntimeException:权限被拒绝:请求的身份验证作用域不足。它不是JS,而是一个JavaSpring服务程序,它使用@MessagingGateway发送消息。我想我将不得不迁移逻辑,以完全遵循与quickstart相同的方式。@RoyHu您必须将Secret Manager权限添加到默认的应用程序引擎服务帐户。我之所以使用服务帐户/密钥,是因为我试图部署在Eclipse中运行良好的同一程序(当GCP用完时,因此需要帐户来访问GCP发布/订阅)。在迁移逻辑后,我将尝试不使用帐户/密钥,使其与快速启动完全相同。什么是“Eclipse”对于您?IDE?在您的本地环境中?是的Eclipse IDE,在我的laptopOk的localhost中测试了该程序。我用粗体更新了我的建议,并添加了如何使用您的用户帐户在您的本地环境中执行。感谢您的更新。我的情况是该程序在我的本地环境中运行良好。问题是同一个程序,而不是由于身份验证范围不足,在GCP上使用Google Kubetetes引擎。
export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/mp6key.json"