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 当我使用服务帐户进行身份验证时,为什么需要单独设置GOOGLE_APPLICATION_CREDENTIALS环境变量?_Google Cloud Platform_Gcloud_Service Accounts - Fatal编程技术网

Google cloud platform 当我使用服务帐户进行身份验证时,为什么需要单独设置GOOGLE_APPLICATION_CREDENTIALS环境变量?

Google cloud platform 当我使用服务帐户进行身份验证时,为什么需要单独设置GOOGLE_APPLICATION_CREDENTIALS环境变量?,google-cloud-platform,gcloud,service-accounts,Google Cloud Platform,Gcloud,Service Accounts,我对这种身份验证方法感到很困惑。 我有一个服务帐户,该帐户具有与GCP服务交互所需的所有角色和权限。我已使用“gcloud auth activate service account”命令激活了服务帐户,并使用“gcloud init”选择了正确的项目和服务帐户。但是,我仍然无法与GCP服务交互。我必须使用正确的json密钥文件设置环境变量“GOOGLE_APPLICATION_CREDENTIALS”,然后只有我才能与GCP服务交互 我的问题是,如果我的服务帐户拥有所有权限,并且我当前的活动服

我对这种身份验证方法感到很困惑。 我有一个服务帐户,该帐户具有与GCP服务交互所需的所有角色和权限。我已使用“gcloud auth activate service account”命令激活了服务帐户,并使用“gcloud init”选择了正确的项目和服务帐户。但是,我仍然无法与GCP服务交互。我必须使用正确的json密钥文件设置环境变量“GOOGLE_APPLICATION_CREDENTIALS”,然后只有我才能与GCP服务交互


我的问题是,如果我的服务帐户拥有所有权限,并且我当前的活动服务帐户也是相同的,那么为什么我需要设置GOOGLE_应用程序_凭据。gcloud身份验证在内部如何工作?

谷歌云SDK CLI
gcloud
有自己的身份验证结构(文件和数据库)。此结构不可用于在同一系统上运行的应用程序

对于开发人员来说,使用环境变量
GOOGLE\u APPLICATION\u CREDENTIALS
是SDK客户端函数的一部分,用于定位凭据。这称为ADC(应用程序默认凭据)。SDK客户端将搜索凭据

如果您有兴趣了解SDK存储凭据的秘密:


谷歌的SDK允许通过应用程序默认凭据(ADC)处理身份验证。除了简化您的代码外,ADC还提供了一些可移植性,因为代码在本地和Google计算服务上运行不变。这是因为ADC会在
GOOGLE\u APPLICATION\u credentials
或元数据中自动搜索凭据

使用
gcloud auth application default
设置服务帐户时。您正在为
gcloud
命令设置服务帐户,但为在同一客户端上运行的代码设置服务帐户。此代码不检查
gcloud
配置中的凭据。它查找缺少本地元数据服务的
GOOGLE\u应用程序\u凭据

请参阅:。过去有一份更好的文件来描述这一点


@john hanley击败了我。

您还可以指定您尝试运行的gcloud命令以及收到的错误消息吗?请指定您尝试使用的命令,或者如果您在使用客户端库时遇到这种情况,您使用的是哪一个?我使用的是python脚本,它的pythonapi主要用于与PubSub和bigquery交互。