限制服务帐号的使用

Resource Manager 提供了多种可在组织政策中使用的限制,用以约束 Identity and Access Management 服务帐号的使用。

在您设置此类限制条件后,它们将被应用于今后服务帐号的创建和修改。这些限制条件不具有回溯性,不会影响之前创建和配置的服务帐号。

准备工作

您必须具有修改组织政策的权限才能设置限制条件。例如,orgpolicy.policyAdmin 角色具有设置组织政策限制条件的权限。如需详细了解如何在组织级层管理政策,请参阅使用限制条件页面。

布尔值限制条件

以下限制条件是布尔值限制条件类型,它们设置为 true 或 false。

停用对默认服务帐号的自动角色授予功能

一些 Google Cloud 服务会自动创建默认服务帐号。创建默认服务帐号后,系统会自动为其授予项目的 Editor 角色 (roles/editor)。

为了提高安全性,我们强烈建议您停用自动角色授予功能。使用 iam.automaticIamGrantsForDefaultServiceAccounts 布尔值限制条件来停用自动角色授予功能。

停用服务帐号创建功能

您可以使用 iam.disableServiceAccountCreation 布尔值限制条件来停用创建新服务帐号的功能。这样您就可以集中管理服务帐号,同时不会限制开发者对项目拥有的其他权限。

停用服务帐号密钥创建功能

您可以使用 iam.disableServiceAccountKeyCreation 布尔值限制条件来停用创建新外部服务帐号密钥的功能。这样您就可以控制服务帐号的非托管式长期凭据的使用。设置此限制条件后,便无法为受该限制条件影响的项目中的服务帐号创建用户管理的凭据。

停用服务帐号密钥上传功能

您可以使用 iam.disableServiceAccountKeyUpload 布尔值限制条件来停用将外部公钥上传到服务帐号。设置此限制条件后,用户无法将公钥上传到受限制条件影响的项目中的服务帐号。

停用 Workload Identity 集群创建功能

您可以使用 iam.disableWorkloadIdentityClusterCreation 布尔值限制条件来要求所有新的 Google Kubernetes Engine 集群在创建时都停用 Workload Identity 功能。如果要严格控制您组织中的服务帐号访问权限,除了停用服务帐号创建和服务帐号密钥创建功能之外,您可能还想停用 Workload Identity。

启用了 Workload Identity 的现有 GKE 集群不会受到影响,将继续正常运行。

设置布尔值限制条件

控制台

如需设置包含限制条件以限制对服务帐号的使用的组织政策,请执行以下操作:

  1. 转到 Google Cloud Console 中的组织政策页面。

    转到“组织政策”页面

  2. 点击页面顶部的组织下拉列表,然后选择您的组织。
  3. 点击上面列出的一项服务帐号使用布尔值限制条件。
  4. 点击修改按钮。
  5. 应用对象下,选择自定义
  6. 实施下,选择开启
  7. 点击保存。此时将显示一条通知,确认政策已更新。

gcloud

您可以通过 gcloud 命令行工具设置政策。

如需限制对服务帐号的使用,请运行以下命令:

gcloud resource-manager org-policies enable-enforce \
    --organization 'ORGANIZATION_ID' \
    BOOLEAN_CONSTRAINT

其中,BOOLEAN_CONSTRAINT 是您要强制执行的布尔值限制条件。

要停用政策,您可以发出相同命令,但需要搭配

disable-enforce
命令。

如需了解如何在组织政策中使用限制条件,请参阅使用限制条件

具有布尔值限制条件的示例政策

以下代码段展示了一项组织政策,用于强制执行 iam.disableServiceAccountCreation 布尔值限制条件,该限制条件会阻止创建服务帐号:

resource: "organizations/842463781240"
policy {
  constraint: "constraints/iam.disableServiceAccountCreation"
  etag: "\a\005L\252\122\321\946\334"
  boolean_policy {
  enforced: true
  }
}

列表限制条件

以下限制条件是列表限制条件类型,它们设置为 true 或 false。

延长 OAuth 2.0 访问令牌的生命周期

您可以创建 OAuth 2.0 访问令牌,以提供服务帐号的短期有效凭据。默认情况下,访问令牌的最长生命周期为 1 小时(3600 秒)。不过,您可以将最长生命周期延长至 12 小时。为此,请确定需要延长访问令牌生命周期的服务帐号,然后将这些服务帐号添加到包含 constraints/iam.allowServiceAccountCredentialLifetimeExtension 列表限制条件的组织政策中。

设置列表限制条件

控制台

如需设置一项组织政策来延长服务帐号的 OAuth 2.0 访问令牌的最长生命周期,请执行以下操作:

  1. 转到 Google Cloud Console 中的组织政策页面。

    转到“组织政策”页面

  2. 点击页面顶部的组织下拉列表,然后选择您的组织。
  3. 点击 constraints/iam.allowServiceAccountCredentialLifetimeExtension 限制条件。
  4. 点击修改按钮。
  5. 应用对象下,选择自定义
  6. 强制执行政策下,选择与父级合并,将此政策与层次结构中的现有政策合并。
  7. 政策值下方,选择自定义
  8. 政策类型下,选择允许
  9. 自定义值下,输入您想要延长 OAuth 2.0 访问令牌生命周期的服务帐号的电子邮件地址。
    1. 如果要添加更多地址,请点击新政策值来创建更多行,并向每一行添加一个地址。
  10. 点击保存。此时将显示一条通知,确认政策已更新。

gcloud

您可以通过 gcloud 命令行工具设置政策。

如需设置一项组织政策来延长服务帐号的 OAuth 2.0 访问令牌的最长生命周期,请运行以下命令:

gcloud resource-manager org-policies allow \
    constraints/iam.allowServiceAccountCredentialLifetimeExtension \
    SERVICE_ACCOUNT_ADDRESS [SERVICE_ACCOUNT_ADDRESS ...] \
    --organization 'ORGANIZATION_ID' \

其中,SERVICE_ACCOUNT_ADDRESS 是您要提供已延长访问令牌的服务帐号的电子邮件地址列表。

如需了解如何在组织政策中使用限制条件,请参阅使用限制条件

包含列表限制条件的示例政策

以下代码段展示了一个强制执行 iam.allowServiceAccountCredentialLifetimeExtension 列表限制条件的组织政策,它将为所列服务帐号延长 OAuth 2.0 访问令牌的最长生命周期:

resource: "organizations/842463781240"
policy {
  constraint: "constraints/iam.allowServiceAccountCredentialLifetimeExtension"
  etag: "\a\005L\252\122\321\946\334"
  listPolicy {
    allowedValues:
      - <var>SERVICE_ACCOUNT_ADDRESS</var>
  }
  updateTime: <var>CURRENT_TIME</var>
}

错误消息

停用服务帐号创建功能

如果您实施了 iam.disableServiceAccountCreation,则创建服务帐号的操作将失败,并显示以下错误:

FAILED_PRECONDITION: Service account creation is not allowed on this project.

停用服务帐号密钥创建功能

如果您实施了 iam.disableServiceAccountKeyCreation,则创建服务帐号的操作将失败,并显示以下错误:

FAILED_PRECONDITION: Key creation is not allowed on this service account.

停用 Workload Identity 集群创建功能

如果您实施了 iam.disableWorkloadIdentityClusterCreation,则创建启用了 Workload Identity 的 GKE 集群将失败,并显示以下错误:

FAILED_PRECONDITION: Workload Identity is disabled by the organization
policy constraints/iam.disableWorkloadIdentityClusterCreation. Contact your
administrator to enable this feature.

排查已知问题

默认服务帐号

应用 iam.disableServiceAccountCreation 限制条件后,系统将阻止在相关项目中创建服务帐号。此限制也会影响到 Google Cloud 服务,这些服务在启用时会自动在项目中创建默认服务帐号,例如:

  • Compute Engine
  • GKE
  • App Engine
  • Dataflow

在应用 iam.disableServiceAccountCreation 限制条件后,由于系统无法为这些服务创建默认服务帐号,尝试启用这些服务的操作将会失败。

要解决此问题,请执行以下操作:

  1. 暂时移除 iam.disableServiceAccountCreation 限制条件。
  2. 启用所需服务。
  3. 创建任何其他所需的服务帐号。
  4. 最后,重新应用该限制条件。