认证:gcloud、ADC 与 impersonation

验证:未记录
适用版本
未记录
验证范围
尚未登记验证记录。

CLI 使用 gcloud credentials;SDK / Terraform 通常使用 ADC,分别管理。

推荐做法#

  • 人用个人或公司身份;以 SA 测试时显式 impersonate,避免分发长期 key。
  • ADC 优先级:GOOGLE_APPLICATION_CREDENTIALS → 本地 ADC 文件 → 平台 metadata。
  • 认证只决定身份;资源访问仍需 IAM,目标 Project 由命令/应用配置决定。

常用操作#

gcloud auth list --filter=status:ACTIVE
gcloud config get-value auth/impersonate_service_account
# 按使用方执行所需登录;两者不会互相替代。
# CLI:gcloud auth login
# SDK / Terraform:gcloud auth application-default login

容易踩的坑#

gcloud CLI 与 ADC 是两套凭据选择。 切换 configuration 不切换 ADC;GOOGLE_APPLICATION_CREDENTIALS 还可能使应用读取另一份文件。

  • access token 用于 Google API;Cloud Run 调用通常要求匹配 audience 的 ID token。

多账号隔离 · JSON 与 key 吊销

配置说明与完整示例(按需展开)

本篇回答“命令和应用用谁的凭据”。授权模型见 IAM,多账号切换见 配置隔离。

用户、 Service Account 与 federated identity 如何认证#

Principal 由请求使用的凭据和 impersonation 配置决定;在终端敲命令的人不一定是 API 看到的身份。认证证明身份,授权决定它能做什么。

方式 如何证明身份 是否需要浏览器登录 Google 用户
Google 用户 用户完成登录授权,gcloud 用用户凭据获取短期 access token 通常需要
impersonate SA 原始身份先认证,GCP 检查 impersonation 权限后签发目标 SA 的短期凭据 取决于原始身份;本篇用已登录用户
SA 密钥 工具使用 JSON 中的私钥签署请求,取得 SA 凭据 不需要
运行环境绑定的 SA VM、Cloud Run 等平台通过元数据服务提供绑定 SA 的短期凭据 不需要
federated identity 外部平台或企业身份系统提供身份证明,GCP 验证后交换短期凭据 工作负载通常不需要;员工可能登录企业身份系统

这些是不同场景的选项,下面命令不要连续执行。用户登录:

gcloud auth login

使用已有 SA 密钥让 gcloud CLI 认证并切换到该 SA(与仅给应用设置 GOOGLE_APPLICATION_CREDENTIALS 不同):

gcloud auth activate-service-account "$READER" --key-file=./sa-key.json

此命令使用私钥认证,无须用户登录或 Token Creator;创建 key 则需 iam.serviceAccountKeys.create 且 Organization Policy 允许。操作见 密钥管理、CLI 认证。

GitHub federated identity 流程是 OIDC token → GCP 验证签名与信任条件 → STS 交换凭据 → 直接访问或 impersonate SA。配置 JSON 只指定外部凭据来源和 Provider,不授予权限。实验见 无密钥发布。

已有 Workload federated identity 配置且外部凭据来源可用时,可以让 CLI 使用它:

gcloud auth login --cred-file=./workload-credentials.json

Workforce 用户登录企业 IdP(如 Entra ID、Okta)。CLI 可用 gcloud auth login --login-config=./workforce-login.json;这是按已有 Provider 生成的浏览器登录配置,区别于 create-cred-config 的外部凭据文件。Workforce 登录

impersonate SA 的 CLI 命令及授权步骤见 Bucket 授权与撤权实验。以下再区分 CLI 登录与应用使用的 ADC:

凭据 消费者 常见误区
gcloud auth login gcloud CLI 不等于本地 SDK 已配置 ADC
gcloud auth application-default login 本地 SDK / Terraform 等 ADC 消费者 不自动切换 gcloud 账号
运行环境绑定的 SA Cloud Run、VM 等的 SDK SDK 从环境获取短期凭据,无需 JSON key
OAuth access token Google API 不用它代替 Cloud Run 调用的 ID token
OIDC ID token 验证调用者身份的服务 audience 应匹配目标服务要求

Terraform:AWS 与 GCP 的凭据来源差异#

本地 Google Provider 默认使用 ADC,普通 gcloud auth login 不生成它。AWS Provider 则可与 AWS CLI 共用配置和凭据文件:

对比 Terraform AWS Provider Terraform Google Provider
常见本地凭据来源 与 AWS CLI 共用的配置、凭据文件等 ADC,与普通 gcloud CLI 登录凭据分开
多账号选择示例 AWS_PROFILE=work GOOGLE_APPLICATION_CREDENTIALS=/绝对路径/work.json
仅完成 CLI 登录是否足够 取决于所选认证方式及其共享凭据是否可用 普通 gcloud auth login 不会生成 ADC

以下是本地使用用户身份的两项独立登录,按消费者需要执行:

# 供 gcloud CLI 使用;Terraform 不要求先完成这项登录
gcloud auth login
# 供 Terraform Google Provider、SDK 等 ADC 消费者使用
gcloud auth application-default login

有效 ADC 可直接供 Google Provider 使用,无需在代码中填凭据或每次 plan/apply 前登录。云上/CI 可用绑定 SA 或 federation;目标 Project 仍由 Provider 配置指定。多账号见 配置隔离。Terraform GCP 认证

application-default 与凭据查找顺序#

Application Default Credentials(ADC) 是应用查找凭据的机制,与 CLI 配置分开;application-default 不是 profile 名。

使用 ADC 且未显式指定凭据的应用,按以下顺序查找:

  1. 环境变量 GOOGLE_APPLICATION_CREDENTIALS 指向的 JSON 文件。
  2. gcloud auth application-default login 生成的本地 ADC 文件。
  3. 在 GCP 运行环境中,通过元数据服务取得绑定的 SA 凭据。

本地 ADC 默认路径:macOS/Linux 为 ~/.config/gcloud/application_default_credentials.json,Windows 为 %APPDATA%\gcloud\application_default_credentials.json。官方查找顺序

本地认证不要求创建或指定 Service Account。 gcloud auth login 本身会保存供 CLI 使用的用户凭据;若本地 SDK / Terraform 等应用要直接使用用户身份,再执行:

gcloud auth application-default login

完成浏览器登录后,gcloud 将该 Google 用户的 ADC 写入上述默认路径。应用使用的是此次 ADC 登录用户的资源权限,不涉及 SA 或 Token Creator 授权。CLI 登录与 ADC 登录分别保存,所选用户可以不同;这条命令不会给用户新增资源权限。用户 ADC 配置

只有希望应用改用 SA 身份时,才选择 impersonation (客户端库需支持这种 impersonation):

gcloud auth application-default login --impersonate-service-account="$READER"

该方式保存用户凭据与 SA impersonation 配置,不含 SA 私钥,也不切换 CLI 身份。两种 ADC 登录二选一,均覆盖默认 ADC;已有 GOOGLE_APPLICATION_CREDENTIALS 时优先使用它指向的文件。

GOOGLE_APPLICATION_CREDENTIALS 指定什么#

GOOGLE_APPLICATION_CREDENTIALS 指向本地凭据 JSON 路径,例如 SA key 或 federation 配置,不是邮箱、Project ID 或 token。

# 可选:已准备好相应凭据文件时,让当前终端启动的 ADC 应用优先使用它。
export GOOGLE_APPLICATION_CREDENTIALS="/absolute/path/to/credentials.json"

若之前设置过该变量,现在要恢复使用默认位置的本地 ADC,在当前终端取消它:

unset GOOGLE_APPLICATION_CREDENTIALS

实验结束后,再撤销本地 ADC:

# 本地实验结束,删除此 ADC;后续需要时重新登录
gcloud auth application-default revoke

生产优先使用绑定身份或 Identity Federation。不要下载 SA key 放进 GitHub Secret 来替代 federated identity;长寿命 key 难以审计和轮换。ADC

搜索文档

输入关键词,搜索所有文档。

↑ ↓ 选择 · Enter 打开 · Esc 关闭