服务账号可分为以下几类:
- 用户管理的服务账号,由您自行创建和管理
- 服务代理,由 Google Cloud 创建和管理
本页面介绍了如何创建和使用每种类型的服务账号。
用户管理的服务账号
用户管理的服务账号是指您在项目中创建的服务账号。您可以自行更新、停用、启用和删除这些服务账号。您还可以管理其他主账号对这些服务账号的访问权限。
您可以使用 IAM API、Google Cloud 控制台或 Google Cloud CLI 在项目中创建用户管理的服务账号。
默认情况下,您可以在一个项目中最多创建 100 个用户管理的服务账号。如果此配额不能满足您的需求,您可以使用 Google Cloud 控制台申请增加配额。只有用户创建的服务账号才会计入此配额 -默认服务账号和服务代理不会计入此配额。
在项目中创建用户管理的服务账号时,请选择服务账号的名称。此名称显示在用于标识服务账号的电子邮件地址中,该地址采用以下格式:
service-account-name@project-id.iam.gserviceaccount.com
如需了解如何创建服务账号,请参阅创建服务账号。
默认服务账号
默认服务账号是指在您启用或使用某些 Google Cloud 服务时自动创建的用户管理的服务账号。借助这些服务账号,服务可以部署访问其他 Google Cloud 资源的作业。您负责在创建默认服务账号后对其进行管理。
如果您的应用在具有默认服务账号的 Google Cloud 环境中运行,您的应用可以使用默认服务账号的凭据来调用 Google Cloud API。或者,您可以创建自己的用户管理的服务账号,并使用该账号进行身份验证。如需了解详情,请参阅设置应用默认凭据。
根据您的组织政策配置,默认服务账号可能会自动获得项目的 Editor 角色。我们强烈建议您通过强制执行 iam.automaticIamGrantsForDefaultServiceAccounts
组织政策限制条件来停用自动角色授予功能。如果您的组织是在 2024 年 5 月 3 日之后创建的,则默认情况下会强制执行此限制条件。
如果您停用自动角色授予功能,则必须决定向默认服务账号授予哪些角色,然后自行授予这些角色。
如果默认服务账号已具有 Editor 角色,我们建议您将 Editor 角色替换为权限较少的角色。如需安全地修改服务账号的角色,请使用 Policy Simulator 查看更改的影响,然后授予和撤消相应的角色。
下表列出了可创建默认服务账号的服务:
服务 | 服务账号名称 | 电子邮件地址 |
---|---|---|
App Engine 以及任何使用 App Engine 的 Google Cloud 服务 | App Engine 默认服务账号 | project-id@appspot.gserviceaccount.com |
Compute Engine 以及任何使用 Compute Engine 的 Google Cloud 服务 | Compute Engine 默认服务账号 |
project-number-compute@developer.gserviceaccount.com
|
服务代理
某些 Google Cloud 服务需要访问您的资源才能代表您执行操作。例如,当您使用 Cloud Run 运行容器时,服务需要访问所有可触发容器的 Pub/Sub 主题。
为了满足这一需求,Google Cloud 会为许多 Google Cloud 服务创建和管理服务账号。这些服务账号称为“服务代理”。您可以在项目的允许政策、审核日志中或 Google Cloud 控制台的 IAM 页面上看到服务代理。
服务代理不是在项目中创建的,因此您在查看项目的服务账号时不会看到它们。您无法直接访问这些数据。
默认情况下,即使服务代理已获得项目的角色,也不会在 Google Cloud 控制台的 IAM 页面中列出。如需查看服务代理的角色授予,请选中包括 Google 提供的角色授予复选框。
Google Cloud 有以下类型的服务代理:
特定于服务的服务代理
大多数服务代理都是特定于服务的,它们代表各个服务执行操作。在许多情况下,服务需要这些服务代理才能正常运行。例如,服务代理允许 Cloud Logging 接收器将日志写入 Cloud Storage 存储桶。
每个服务代理都与一个资源相关联。此资源通常是项目、文件夹或组织,但也可以是特定于服务的资源,例如 Cloud SQL 实例。此资源定义了服务代理操作的范围。例如,如果服务代理与项目关联,它将代表服务对项目及其后代资源执行操作。
您可以通过查看服务代理的电子邮件地址来确定它所关联的资源类型:
- 如果服务代理与项目、文件夹或组织相关联,则其电子邮件地址包含该项目、文件夹或组织的数字 ID。
- 如果服务代理与特定于服务的资源相关联,则其电子邮件地址将包含数字项目 ID 和唯一标识符。数字项目 ID 指示哪个项目拥有与服务代理关联的资源。唯一标识符将服务代理与同一项目中的其他类似服务代理区分开来。
Google API 服务代理
项目的允许政策可能引用了名为 Google API 服务代理的服务账号,其电子邮件地址采用以下格式:project-number@cloudservices.gserviceaccount.com
。
该服务账号代表您运行内部 Google Cloud 流程。它会自动获得项目的 Editor 角色 (roles/editor
)。
服务代理的角色管理员
您的 IAM 审核日志可能引用了服务账号 service-agent-manager@system.gserviceaccount.com
。
此服务账号管理已授予其他服务代理的角色。它仅在审核日志中可见。
例如,如果您使用新的 API,Google Cloud 可能会自动创建一个新的服务代理,并向其授予您的项目的角色。如果授予这些角色,则系统会生成一个审核日志条目,其中显示 service-agent-manager@system.gserviceaccount.com
为项目设置了允许政策。
服务代理创建
服务代理创建的确切时间取决于与它关联的资源类型。
当您创建特定于服务的资源时,系统会创建与该资源关联的服务代理。如需详细了解如何识别和配置这些服务代理,请参阅关联资源的文档。
与项目、文件夹和组织关联的服务代理会根据需要创建,通常是您首次使用服务时。如有必要,您还可以要求 Google Cloud 在您使用服务之前为服务创建服务代理。如需了解详情,请参阅创建服务代理并授予角色。
服务代理角色
Google Cloud 中的某些操作需要服务代理代表您创建和访问资源。例如,当您创建 Dataproc 集群时,Dataproc 服务代理需要具备在您的项目中创建 Compute Engine 实例的权限才能创建集群。
为了获得此访问权限,服务代理需要特定的 IAM 角色。许多项目级服务代理会自动获得所需的角色。这些自动授予的角色的名称通常以 serviceAgent
或 ServiceAgent
结尾。对于其他服务代理,您需要向其授予角色,以使服务正确运行。如需了解哪些服务代理会自动获得角色,请参阅服务代理参考文档。
如果要求 Google Cloud 在您使用服务之前创建服务代理,您必须向服务代理授予系统通常会自动授予它们的角色。这是因为根据用户请求创建的服务代理不会被自动授予角色。如果您不为服务代理授予这些角色,某些服务可能无法正常运行。如需了解如何向服务代理授予这些角色,请参阅创建服务代理并授予角色。
主要服务代理
在服务代理参考文档中,某些服务代理标识为主要服务代理。当您为服务触发服务代理创建时,系统会返回主要服务代理的电子邮件地址。
审核日志记录
有时,当主账号发起操作时,服务代理会代表主账号执行操作。不过,在查看服务代理的审核日志时,您可能很难判断服务代理代表谁执行了操作,以及原因。
为了帮助您了解服务代理操作的上下文,某些服务代理会在其审核日志中添加其他详细信息,例如操作所关联的作业以及创建作业的主账号。以下服务代理在其审核日志中包含这些额外详细信息:
这些其他详细信息位于审核日志的 serviceDelegationHistory
字段中,该字段嵌套在 authenticationInfo
字段中。此字段包含以下信息:
- 创建作业的原始主账号
- 执行操作的服务代理
- 服务代理所属的服务
- 作业 ID
例如,假设 example-user@example.com
使用 BigQuery Connection API 创建作业。此作业需要 BigQuery Connection API 的某个服务代理来执行操作。在这种情况下,服务代理操作的审核日志将包含类似于以下内容的 serviceDelegationHistory
字段:
{ "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "authenticationInfo": { "principalEmail": "bqcx-442188550395-jujw@gcp-sa-bigquery-condel.iam.gserviceaccount.com", "serviceDelegationHistory": { "originalPrincipal": "user:my-user@example.com", "serviceMetadata": [ { "principalSubject": "serviceAccount:bqcx-442188550395-jujw@gcp-sa-bigquery-condel.iam.gserviceaccount.com", "serviceDomain": "bigquery.googleapis.com", } ] } } } }
后续步骤
- 了解如何创建和管理服务账号。
- 了解如何创建和管理服务账号密钥。
- 获取使用服务账号的最佳实践。
- 查看管理服务账号密钥的最佳实践。