设置应用默认凭据

本页面介绍了如何设置应用默认凭据 (ADC),以供 Cloud 客户端库、Google API 客户端库以及 REST 和远程过程调用 (RPC) API 在各种环境中使用。您可以通过在代码运行的环境中向 ADC 提供凭据来设置 ADC。

Application Default Credentials (ADC) 是 Google 身份验证库使用的一种策略,可根据应用环境自动查找凭据。身份验证库会将这些凭据提供给 Cloud 客户端库和 Google API 客户端库。使用 ADC 时,您的代码可以在开发或生产环境中运行,而无需更改应用向 Google Cloud 服务和 API 进行身份验证的方式。

如需了解 ADC 查找凭据的位置和顺序,请参阅应用默认凭据的工作原理

如果您使用的是 API 密钥,就无需设置 ADC。如需了解详情,请参阅使用 API 密钥

如何向 ADC 提供凭据

选择运行代码的环境:

本地开发环境

您可以在本地开发环境中向 ADC 提供用户凭据或服务账号凭据。

用户凭据

当您的代码在本地开发环境(例如开发工作站)中运行时,最好的方法是使用与您的用户账号关联的凭据。

如果您提供用户凭据来创建本地 ADC 文件,请注意以下事项:

  • 如果没有额外的参数或配置,用户凭据可能不适用于某些方法和 API(例如 Cloud Translation API 或 Cloud Vision API)。如果您看到错误消息,说明 API 未在项目中启用或者没有可用的配额项目,请参阅排查 ADC 设置问题

  • 本地 ADC 包含访问令牌和刷新令牌。有权访问文件系统的任何用户都可以使用这些凭据。如果您不再需要这些本地凭据,可以使用 gcloud auth application-default revoke 命令将其撤消。

  • 如果您的用户账号在项目中没有所需的 Identity and Access Management (IAM) 角色,则您的代码可能无法访问某些资源。如果发生这种情况,必须有人为您授予所需的角色。

  • 您的本地 ADC 文件与您的用户账号而非 gcloud CLI 配置相关联。改用其他 gcloud CLI 配置不会影响您的本地 ADC 文件或提供给 ADC 的凭据。

如何向 ADC 提供用户凭据取决于您的用户账号是由 Google 管理(换句话说,您的用户账号是 Google 账号),还是由其他身份提供方 (IdP) 管理,以及是否使用员工身份联合进行联合。

为您的 Google 账号提供用户凭据

如需将用户凭据提供给 Google 账号的 ADC,您可以使用 Google Cloud CLI:

  1. 安装并初始化 gcloud CLI

    初始化 gcloud CLI 时,请务必指定您在其中有权访问应用所需的资源的 Google Cloud 项目。

  2. 创建凭据文件:

    gcloud auth application-default login

    登录屏幕随即出现。在您登录后,您的凭据会存储在 ADC 使用的本地凭据文件中。

为由外部 IdP 管理的账号提供用户凭据

如需为由外部 IdP 管理并使用员工身份联合进行联合的用户账号提供用户凭据,您需要员工池提供方名称。您的管理员应该能够向您提供此信息。员工池提供方名称采用以下格式:

locations/global/workforcePools/POOL_ID/provider/PROVIDER_ID

将您的用户凭据提供给联合用户账号的 ADC:

  1. 使用 iam workforce-pools create-login-config 命令创建登录配置文件并将 gcloud CLI auth/login_config_file 属性设置为指向其位置:

    gcloud iam workforce-pools create-login-config PROVIDER_ID \
    --output-file=LOGIN_CONFIG_FILE --activate
    

    替换以下内容:

    • PROVIDER_ID:提供方 ID
    • LOGIN_CONFIG_FILE:您指定的配置文件的路径,例如 login.json

    创建的文件类似于以下示例:

    {
    "type": "external_account_authorized_user_login_config",
    "audience": "//iam.googleapis.com/PROVIDER_ID",
    "auth_url": "https://auth.cloud.google/authorize",
    "token_url": "https://sts.googleapis.com/v1/oauthtoken",
    "token_info_url": "https://sts.googleapis.com/v1/introspect",
    }
    

  2. 使用登录文件登录 gcloud CLI:

    gcloud auth login
    
  3. 初始化 gcloud CLI:

    gcloud init
    
  4. 创建本地 ADC 文件:

    gcloud auth application-default login
    

如需了解详情,请参阅员工身份联合

服务账号凭据

您可以使用服务账号模拟或服务账号密钥和服务账号的凭据来设置 ADC。

服务账号模拟

您可以使用服务账号模拟来设置本地应用默认凭据 (ADC) 文件。支持模拟的客户端库可以自动使用这些凭据。使用模拟创建的本地 ADC 文件支持以下语言:

  • C#
  • Go
  • Java
  • Node.js
  • Python

您必须具有要模拟的服务账号的 Service Account Token Creator (roles/iam.serviceAccountTokenCreator) IAM 角色。如需了解详情,请参阅必需的角色

使用服务账号模拟创建本地 ADC 文件:

gcloud auth application-default login --impersonate-service-account SERVICE_ACCT_EMAIL

服务账号密钥

如果您无法使用用户凭据或服务账号模拟进行本地开发,可以使用服务账号密钥。

如需创建服务账号密钥并将其提供给 ADC,请执行以下操作:

  1. 按照创建服务账号密钥中的说明,创建一个具有您的应用所需的角色的服务账号,并为该服务账号创建密钥。

  2. 将环境变量 GOOGLE_APPLICATION_CREDENTIALS 设置为包含凭据的 JSON 文件的路径。 此变量仅适用于当前的 shell 会话,因此,如果您打开新的会话,请重新设置该变量。

Google Cloud 云端开发环境

当您使用 Cloud Shell 或 Cloud Code 等 Google Cloud 云端开发环境时,该工具会使用您登录时提供的凭据,并管理所有必要的授权。在这些环境中,您无法使用 gcloud CLI 向 ADC 提供凭据。如果您需要向 ADC 提供不同的用户账号,或者使用服务账号提供凭据,请使用本地开发环境或 Google Cloud 计算资源作为开发环境。

支持进行服务账号关联的 Google Cloud 服务

某些 Google Cloud 服务(例如 Compute Engine、App Engine 和 Cloud Functions)支持将用户管理的服务账号关联到某些类型的资源。通常,当服务的资源可以运行或包含应用代码时支持关联服务账号。将服务账号关联到资源后,该资源上运行的代码可以使用该服务账号作为其身份。

关联用户管理的服务账号是针对 Google Cloud 上运行的生产代码向 ADC 提供凭据的首选方式。

如需有关确定需要向服务账号提供的角色的帮助,请参阅选择预定义角色

如需了解可以将服务账号关联到的资源,以及有关将服务账号关联到资源的帮助,请参阅有关关联服务账号的 IAM 文档

设置身份验证:

  1. 创建服务帐号:

    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

    SERVICE_ACCOUNT_NAME 替换为服务帐号的名称。

  2. 如需提供对项目和资源的访问权限,请向服务帐号授予角色:

    gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE

    请替换以下内容:

    • SERVICE_ACCOUNT_NAME:服务帐号的名称
    • PROJECT_ID:您在其中创建服务帐号的项目的 ID
    • ROLE:要授予的角色
  3. 要向服务帐号授予其他角色,请按照上一步中的说明运行命令。
  4. 为您的 Google 帐号授予一个可让您使用服务帐号的角色并将服务帐号关联到其他资源的角色:

    gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com --member="user:USER_EMAIL" --role=roles/iam.serviceAccountUser

    替换以下内容:

    • SERVICE_ACCOUNT_NAME:服务帐号的名称
    • PROJECT_ID:您在其中创建服务帐号的项目的 ID
    • USER_EMAIL:您的 Google 帐号的电子邮件地址

GKE 或 GKE Enterprise

对 GKE 或 GKE Enterprise 上运行的容器化应用进行身份验证时,本地测试环境与 Google Cloud 环境的处理方式不同。

在本地测试容器化应用

如需在本地工作站上测试容器化应用,您可以将容器配置为使用本地凭据文件进行身份验证。如需测试容器,请使用本地 Kubernetes 实现,例如 minikubegcp-auth 插件

在 Google Cloud 上运行容器化应用

根据具体情况,为 Google Cloud 容器化环境设置身份验证:

本地或其他云服务提供商

如果您在 Google Cloud 之外运行应用,则需要提供 Google Cloud 可识别的凭据才能使用 Google Cloud 服务。

工作负载身份联合

使用不同 IdP 的凭据进行 Google Cloud 身份验证的首选方法是使用工作负载身份联合创建凭据配置文件;您创建一个凭据配置文件并将 GOOGLE_APPLICATION_CREDENTIALS 环境变量设为指向它。此方法比创建服务账号密钥更安全。

如需有关为 ADC 设置工作负载身份联合的帮助,请参阅配置工作负载身份联合使用身份联合获取短期有效的凭据

服务账号密钥

如果您无法配置工作负载身份联合,则必须创建一个服务账号,为其授予您的应用所需的 IAM 角色,并为该服务账号创建密钥。

如需创建服务账号密钥并将其提供给 ADC,请执行以下操作:

  1. 按照创建服务账号密钥中的说明,创建一个具有您的应用所需的角色的服务账号,并为该服务账号创建密钥。

    将环境变量 GOOGLE_APPLICATION_CREDENTIALS 设置为包含凭据的 JSON 文件的路径。 此变量仅适用于当前的 shell 会话,因此,如果您打开新的会话,请重新设置该变量。

后续步骤