服务帐号

本页介绍服务帐号、服务帐号类型以及适用于服务帐号的 IAM 角色。

准备工作

什么是服务帐号?

服务帐号是属于您的应用或虚拟机 (VM)(而非单个最终用户)的特殊 Google 帐号。您的应用使用服务帐号调用服务的 Google API,这样用户就不必直接参与其中。

例如,Compute Engine 虚拟机可以作为服务帐号运行,该帐号可被授予访问其所需资源的权限。这样,服务帐号就是相应服务的标识,服务帐号的权限用于控制可以访问该服务的资源。

服务帐号由其电子邮件地址(对该帐号是唯一的)标识。

服务帐号密钥

每个服务帐号都与一个由 Google Cloud Platform (GCP) 管理的密钥对相关联。它用于在 GCP 中进行服务至服务的身份验证。这些密钥由 Google 自动轮替,用于签名,每个最多使用两周时间。

您可以视需要创建一个或多个外部密钥对以供在 GCP 外部使用(例如,与应用默认凭据一起使用)。创建新的密钥对时,您要下载私钥(这并非由 Google 保留)。使用外部密钥时,您要负责私钥和其他管理操作(如密钥轮换)的安全性。您可以通过 IAM API、gcloud 命令行工具或 Google Cloud Platform Console 中的“服务帐号”页面管理外部密钥。您可以为每个服务帐号创建最多 10 个服务帐号密钥,以方便密钥轮换。

服务帐号的类型

用户管理的服务帐号

当您使用 GCP Console 创建新的 Cloud 项目时,如果为您的项目启用了 Compute Engine API,系统默认会为您创建一个 Compute Engine 服务帐号。它可以使用电子邮件进行标识:

PROJECT_NUMBER-compute@developer.gserviceaccount.com

如果您的项目包含 App Engine 应用,则在默认情况下,系统会在您的项目中创建默认 App Engine 服务帐号。它可以使用电子邮件进行标识:

PROJECT_ID@appspot.gserviceaccount.com

如果您在项目中创建服务帐号,则需要为该服务帐号命名,并为其分配具有以下格式的电子邮件:

SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

您可以使用 IAM API、GCP Console 或 gcloud 命令行工具为每个项目创建最多 100 个服务帐号(包括默认的 Compute Engine 服务帐号和 App Engine 服务帐号)。这些默认服务帐号和您明确创建的服务帐号是用户管理的服务帐号。

Google 管理的服务帐号

除了用户管理的服务帐号之外,您可能会在项目的 IAM 政策或 GCP Console 中看到一些其他服务帐号。这些服务帐号由 Google 创建并拥有。这些帐号代表不同的 Google 服务,并且每个帐号都会自动授予 IAM 角色以访问您的 GCP 项目。

Google API 服务帐号

使用以下电子邮件标识的 Google API 服务帐号就是一种 Google 管理的服务帐号:

PROJECT_NUMBER@cloudservices.gserviceaccount.com

此服务帐号专门用于代表您运行内部 Google 流程,并且未列在 GCP Console 的服务帐号部分中。默认情况下,此帐号会被自动授予项目的项目编辑者角色,并列在 GCP Console 的 IAM 部分中。只有在删除该项目后,才会删除此服务帐号。Google 服务依赖于有权访问您的项目的帐号,因此您不应移除或更改服务帐号对项目具有的角色。

服务帐号权限

除了作为身份之外,服务帐号也可作为附加了 IAM 政策的资源。这些政策决定了谁可以使用服务帐号。

例如,Alice 可能在服务帐号中具有编辑者角色,而 Bob 可能在服务帐号中具有查看者角色。这就像为任何其他 GCP 资源授予角色一样。

创建默认的 Compute Engine 和 App Engine 服务帐号后,系统会为其授予项目的编辑者角色,以便在应用或虚拟机实例中执行的代码具有必要的权限。在这种情况下,服务帐号是被授予了资源(项目)的编辑者角色的身份。

如果您希望允许自动访问 Cloud Storage 存储分区,则可以授予(自动化使用的)服务帐号读取 Cloud Storage 存储分区的权限。在这种情况下,服务帐号是您要授予其他资源(Cloud Storage 存储分区)的相关权限的身份。

服务帐号用户角色

您可以在项目级层为项目中的所有服务帐号授予 iam.serviceAccountUser 角色,也可以在服务帐号层级授予该角色。

  • iam.serviceAccountUser 角色授予某个项目的用户,可让该用户有权访问这个项目中的所有服务帐号(包括将来可能创建的服务帐号)。

  • iam.serviceAccountUser 角色授予特定服务帐号的用户,可让该用户有权访问这个服务帐号。

如果您向用户授予 compute.instanceAdmin 角色和 iam.serviceAccountUser 角色,它们便可以创建和管理使用服务帐号的 Compute Engine 实例。

将 IAM 角色授予服务帐号后,您可以将该服务帐号分配给一个或多个新的虚拟机实例。有关如何执行此操作的说明,请参阅设置新实例以作为服务帐号运行

具有 serviceAccountUsers 的用户可以使用服务帐号间接访问服务帐号有权访问的所有资源。例如,具有 serviceAccountUser 的用户可以使用服务帐号启动实例。然后,他们可以使用该实例访问服务帐号身份有权访问的任何内容。但是,serviceAccountUser 角色不允许用户直接使用服务帐号的角色。因此,在向用户授予 iam.serviceAccountUser 角色时要谨慎。

服务帐号代表您的服务级安全性。服务的安全性取决于具有 IAM 角色来管理和使用服务帐号的人员,以及为这些服务帐号保留专用外部密钥的人员。确保安全性的最佳做法包括:

  • 使用 IAM API 审核服务帐号、密钥和这些服务帐号的政策。
  • 如果您的服务帐号不需要外部密钥,请删除它们。
  • 如果用户不需要管理或使用服务帐号的权限,请将其从 IAM 政策中移除。

要详细了解最佳做法,请参阅了解服务帐号

服务帐号令牌创建者角色

此角色可以模拟服务帐号以创建 OAuth2 访问令牌、签署 Blob 或 JWT。

服务帐号操作者角色

此角色已弃用。如果您需要以服务帐号身份运行操作,请使用服务帐号用户角色。要有效地提供与服务帐号操作者相同的权限,您还应该授予服务帐号令牌创建者

访问权限范围

访问权限范围是为虚拟机指定权限的传统方法。在 IAM 角色出现之前,访问权限范围是向服务帐号授予权限的唯一机制。尽管它们现在不是授予权限的主要方式,但在配置实例作为服务帐号运行时,您仍必须设置访问权限范围。要了解访问权限范围,请参阅 Google Compute Engine 文档

短期服务帐号凭据

您可以创建短期凭据,以获得 GCP 服务帐号的身份。这些凭据可用于对 Google Cloud Platform API 或其他非 Google API 调用进行身份验证。

这些凭据的最常见用例是临时委派对跨不同项目、组织或帐号的 GCP 资源的访问权限。例如,向外部调用者授予临时紧急访问权限,而不是提供高权限服务帐号的永久性凭据。或者,外部调用者采用具有受限权限的指定服务帐号,而无需更高权限的服务帐号的凭据。

如需了解详情,请参阅创建短期服务帐号凭据

应用默认凭据

应用默认凭据是一种机制,可让您在 GCP 内部和外部以及跨多个 GCP 项目进行操作时轻松使用服务帐号。最常见的使用情形是在本地机器上测试代码,再转移到 GCP 中的开发项目,然后再转到 GCP 中的正式版项目。使用应用默认凭据可确保服务帐号无缝工作,它在本地机器上测试时使用本地存储的服务帐号密钥,但在 Compute Engine 上运行时使用项目的默认 Compute Engine 服务帐号。如需了解详情,请参阅应用默认凭据

后续步骤

要了解有关使用服务帐号的最佳做法,请参阅了解服务帐号

请阅读以下指南,了解如何:

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Cloud IAM 文档