使用服务账号模拟

如果您使用的主账号没有完成任务所需的权限,或者您想在开发环境中使用服务账号,则可以使用服务账号模拟

使用服务账号模拟时,您可以从经过身份验证的主账号(您的用户账号或服务账号)开始,并为具有您的使用场景所需的授权的服务账号请求短期有效凭据。经过身份验证的主账号必须具有必要的权限才能模拟服务账号。

服务账号模拟比使用服务账号密钥更安全,因为服务账号模拟需要预先进行身份验证,并且使用模拟创建的凭据不会保留。相比之下,使用服务账号密钥进行身份验证不需要预先进行身份验证,并且永久性密钥若泄露,则是风险较高的凭据。

如需详细了解服务账号模拟,请参阅服务账号模拟

须知事项

在使用服务账号模拟之前,您需要启用所需的 API 并确保您具有所需的角色。

启用 API

如需模拟服务账号,您需要在项目中启用 Service Account Credentials API。

Enable the API

所需的角色

为了确保主账号具有模拟服务账号的必要权限,请让您的管理员为主账号授予服务账号的 Service Account Token Creator (roles/iam.serviceAccountTokenCreator) IAM 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

此预定义角色包含 iam.serviceAccounts.getAccessToken 权限,模拟服务账号需要此权限。

您的管理员也可以使用自定义角色或其他预定义角色为主账号授予此权限。

即使您使用的是自己创建的项目,也必须向主账号授予这些角色。

如需详细了解模拟所需的角色,请参阅服务账号身份验证角色

您可以通过以下方法使用服务账号模拟:

使用 gcloud CLI

gcloud CLI 提供了一种直接使用服务账号模拟的方法。如果您需要使用服务账号通过 gcloud CLI 访问 Google Cloud 资源或服务,则此方法非常适用。

您可以为特定 gcloud CLI 命令模拟服务账号,或设置 gcloud CLI 以自动对每个命令使用模拟。

对特定 gcloud CLI 命令使用模拟

如需对特定 gcloud CLI 命令使用模拟,请使用 --impersonate-service-account 标志。例如,以下命令使用指定服务账号提供的身份和访问权限列出存储桶:

gcloud storage buckets list --impersonate-service-account=SERVICE_ACCT_EMAIL

使用此标志时,gcloud CLI 会请求指定服务账号的短期有效凭据,并使用这些凭据向 API 进行身份验证并授予访问权限。登录 gcloud CLI 的主账号(通常是您的用户账号)必须具有相应服务账号所需的权限。

默认情况下,对 gcloud CLI 使用模拟

如需设置 gcloud CLI 以默认使用服务账号提供的身份和访问权限,请使用 gcloud CLI 配置命令

gcloud config set auth/impersonate_service_account SERVICE_ACCT_EMAIL

设置此配置属性后,gcloud CLI 会请求指定服务账号的短期有效凭据,并使用这些凭据向 API 进行身份验证并授权每个命令访问该资源。登录 gcloud CLI 的主账号必须具有相应服务账号所需的权限。

设置使用客户端库所需的应用默认凭据

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

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

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

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

现在,您可以像使用用户凭据设置本地 ADC 文件后一样,通过受支持的语言使用客户端库。身份验证库会自动查找凭据。如需了解详情,请参阅使用客户端库时进行身份验证

生成和管理短期有效的凭据

如果以上两种方法都不能解决您的使用场景,您需要生成和管理短期有效的令牌。例如,如果您需要不同类型的短期有效的凭据(访问令牌以外的内容),或者需要在生产环境中使用模拟,请使用此方法。

如需了解如何生成短期令牌,请参阅为服务账号创建短期有效的凭据

后续步骤