本地使用GCP服务账号执行gcloud命令的认证问题咨询
本地CMD中gcloud服务账号认证问题解答
一、三条命令的具体区别
命令1:gcloud auth application-default login
- 和
gcloud auth login的差异:gcloud auth login是给gcloud命令行工具本身绑定你的个人Google账号,之后gcloud默认用这个账号执行操作;gcloud auth application-default login是生成应用默认凭据(ADC),专门给Python、Java这类Google Cloud SDK/客户端代码用的,和gcloud命令本身没关系。
- 适用场景:你本地写的代码需要用个人Google账号访问GCP资源时,才用这个命令。
- ADC(Application Default Credential)是什么:Google Cloud提供的一套自动凭据发现机制,SDK/代码会按优先级自动查找可用凭据,不用在代码里硬写密钥,简化开发流程。
- 可覆盖此配置的方式:设置
GOOGLE_APPLICATION_CREDENTIALS环境变量(即命令2)、代码中直接指定服务账号密钥文件、在GCE/GKE这类GCP云服务中使用内置元数据服务器(本地环境无效)。
命令2:set GOOGLE_APPLICATION_CREDENTIALS=${PATH}/${SERVICE-ACCOUNT-KEY-FILE-NAME}.json
- 作用:告诉依赖ADC的SDK/代码,直接用指定路径的服务账号密钥文件访问GCP资源,和gcloud命令本身无关。
- 和命令3的区别:命令2管的是第三方SDK/代码的身份,命令3管的是gcloud命令行工具的身份,作用对象完全不同。
- 仅执行命令3的话,不需要用命令2,因为命令3是给gcloud工具配置身份,和ADC机制不相关。
命令3:gcloud auth activate-service-account "${SERVICE-ACCOUNT-EMAIL}" --key-file=${PATH}/${SERVICE-ACCOUNT-KEY-FILE-NAME}.json --project=${PROJECT_ID} + gcloud config set account ${SERVICE-ACCOUNT-EMAIL}
- 作用:把指定的服务账号设为gcloud命令行工具的默认身份,之后你在CMD里运行的所有gcloud命令,都会用这个服务账号执行;后面的
gcloud config set account是明确将该服务账号设为当前配置的默认账号,确保生效。 - 这是专门给gcloud工具配置服务账号身份的命令,和SDK的ADC机制无直接关联。
二、命令优先级
分两种场景说明:
- 针对依赖ADC的SDK/代码:
优先级从高到低:命令2(GOOGLE_APPLICATION_CREDENTIALS环境变量)> 命令1生成的ADC文件
环境变量会直接覆盖ADC文件的配置,SDK优先使用环境变量指定的密钥。 - 针对gcloud命令行工具:
命令3配置的账号是最高优先级,gcloud工具只会使用自己配置的账号,不会读取ADC文件或环境变量的设置,和前两者完全独立,不存在互相覆盖。
三、针对你的需求的选择
你需要在本地CMD中执行gcloud命令并以服务账号身份认证,直接选择命令3即可:
- 命令1是给代码用的,和gcloud命令无关;
- 命令2也是给代码用的,不影响gcloud工具的身份;
- 命令3专门用于给gcloud工具绑定服务账号,执行后所有gcloud命令都会用该服务账号运行,完全匹配你的需求。
内容的提问来源于stack exchange,提问作者Zi Sang
相关产品推荐
相关产品推荐

