管理工作负载身份池和提供商

本页面介绍如何管理现有的工作负载身份池及其身份提供商。

您可以使用 Google Cloud 控制台、Google Cloud CLIREST API 管理池和提供商。

准备工作

创建工作负载身份池。请参阅以下某个页面,了解操作方法:

所需的角色

如需获得管理工作负载身份池和提供商所需的权限,请让管理员向您授予项目的以下 IAM 角色:

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

这些预定义角色具有管理工作负载身份池和提供商所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

如需管理工作负载身份池和提供方,您需要具备以下权限:

  • 如需查看工作负载身份池和提供商:
    • iam.googleapis.com/workloadIdentityPoolProviders.get
    • iam.googleapis.com/workloadIdentityPoolProviders.list
    • iam.googleapis.com/workloadIdentityPools.get
    • iam.googleapis.com/workloadIdentityPools.list
  • 如需创建、更新和删除池和提供商:
    • iam.googleapis.com/workloadIdentityPoolProviders.create
    • iam.googleapis.com/workloadIdentityPoolProviders.delete
    • iam.googleapis.com/workloadIdentityPoolProviders.undelete
    • iam.googleapis.com/workloadIdentityPoolProviders.update
    • iam.googleapis.com/workloadIdentityPools.create
    • iam.googleapis.com/workloadIdentityPools.delete
    • iam.googleapis.com/workloadIdentityPools.undelete
    • iam.googleapis.com/workloadIdentityPools.update

您也可以使用自定义角色或其他预定义角色来获取这些权限。

管理工作负载身份池

本部分介绍如何管理工作负载身份池。

创建池

如需在项目中创建工作负载身份池,请执行以下操作:

控制台

在 Google Cloud 控制台中,转到 Workload Identity 池页面。

转到“工作负载身份池”

gcloud

执行 gcloud iam workload-identity-pools create 命令。

REST

调用 projects.locations.workloadIdentityPools.create()

列出池

如需列出项目中的所有工作负载身份池,请执行以下操作:

控制台

在 Google Cloud 控制台中,转到 Workload Identity 池页面。

转到“工作负载身份池”

gcloud

执行 gcloud iam workload-identity-pools list 命令。

REST

调用 projects.locations.workloadIdentityPools.list()

获取池

如需获取特定工作负载身份池的详细信息,请执行以下操作:

控制台

  1. 在 Google Cloud 控制台中,转到 Workload Identity 池页面。

    转到“工作负载身份池”

  2. 找到您要查看的工作负载身份池,然后点击其 修改图标。Google Cloud 控制台会显示有关工作负载身份池的详细信息。

gcloud

执行 gcloud iam workload-identity-pools describe 命令。

REST

调用 projects.locations.workloadIdentityPools.get()

更新池

您可以启用或停用工作负载身份池。您还可以更改其显示名或说明。

如需更新现有工作负载身份池,请执行以下操作:

控制台

  1. 在 Google Cloud 控制台中,转到 Workload Identity 池页面。

    转到“工作负载身份池”

  2. 找到您要修改的工作负载身份池,然后点击其 修改图标。

    如需停用或启用工作负载身份池,请点击状态切换开关,然后点击停用启用

    如需修改显示名,请点击显示名旁边的 修改。更新名称,然后点击保存

    如需修改说明,请使用 gcloud CLI 或 REST API。

gcloud

执行 gcloud iam workload-identity-pools update 命令。

REST

调用 projects.locations.workloadIdentityPools.patch()

删除池

删除工作负载身份池时,其工作负载身份池提供商也将一同删除。因此,池中的身份将无法再访问 Google Cloud 资源。

您最长可以在删除后 30 天内恢复删除池。30 天后,系统会永久删除提供商。在系统永久删除某个池之前,您不能在创建新的工作负载身份池时重复使用该池的名称。

如需删除工作负载身份池及其身份提供商,请执行以下操作:

控制台

  1. 在 Google Cloud 控制台中,转到 Workload Identity 池页面。

    转到“工作负载身份池”

  2. 找到您要删除的工作负载身份池,然后点击其 修改图标。

  3. 点击 删除池,然后点击删除。工作负载身份池及其身份提供商会被删除。

gcloud

执行 gcloud iam workload-identity-pools delete 命令。

REST

调用 projects.locations.workloadIdentityPools.delete()

恢复删除池

您最长可以在删除后 30 天内恢复已删除的工作负载身份池。

如需恢复删除池,请执行以下操作:

控制台

  1. 在 Google Cloud 控制台中,转到 Workload Identity 池页面。

    转到“工作负载身份池”

  2. 点击显示已删除的池和提供商切换开关。

  3. 找到您要恢复删除的工作负载身份池,然后点击其 恢复图标。

  4. 点击恢复。系统会恢复池及其提供商。

gcloud

执行 gcloud iam workload-identity-pools undelete 命令。

REST

调用 projects.locations.workloadIdentityPools.undelete()

管理工作负载身份池提供方

本部分介绍如何管理工作负载身份池提供方。

创建提供商

如需在现有工作负载身份池中创建工作负载身份池提供方,请执行以下操作:

控制台

  1. 在 Google Cloud 控制台中,转到 Workload Identity 池页面。

    转到“工作负载身份池”

  2. 找到要向其中添加提供商的工作负载身份池,然后点击其 修改图标。

  3. 点击 添加提供商

  4. 选择要创建的提供商类型:

    • AWS:Amazon Web Services (AWS) 身份提供商。
    • OpenID Connect (OIDC):与 OIDC 兼容的身份提供商。这包括 Microsoft Azure。
  5. 输入提供商的名称。

    Google Cloud 控制台将使用该名称创建提供商 ID。如需更改提供商 ID,请点击修改。提供商 ID 创建后便无法更改。

  6. 填写提供商的剩余字段:

    • AWS:输入您的 AWS 账号 ID。
    • OIDC:输入颁发者网址。对于 Azure,颁发者网址采用 https://sts.windows.net/AZURE_TENANT_ID 格式。对于其他提供商,请参阅相关提供商的文档。

    完成操作后,请点击继续

  7. 如需配置特性映射,请点击修改映射。通过特性映射,您可以使用有关外部身份的信息来授予对其中一部分身份的访问权限。

  8. 可选:如需提供用于指定可进行身份验证的身份的特性条件,请点击添加条件并输入有效的通用表达式语言 (CEL) 表达式。如需了解详情,请参阅特性条件

  9. 点击保存。创建了工作负载身份池提供商。

gcloud

执行 gcloud iam workload-identity-pools providers create-aws 命令以创建 AWS 提供商。

执行 gcloud iam workload-identity-pools providers create-oidc 命令以创建 OIDC 提供商。这包括 Microsoft Azure。

REST

调用 projects.locations.workloadIdentityPools.providers.create()

列出提供商

如需列出项目中的工作负载身份池提供商,请执行以下操作:

控制台

  1. 在 Google Cloud 控制台中,转到 Workload Identity 池页面。

    转到“工作负载身份池”

  2. 如需查看工作负载身份池的提供商,请点击该池的 展开节点图标。

gcloud

执行 gcloud iam workload-identity-pools providers list 命令。

REST

调用 projects.locations.workloadIdentityPools.providers.list()

获取提供商

如需获取特定工作负载身份池提供方的详细信息,请执行以下操作:

控制台

  1. 在 Google Cloud 控制台中,转到 Workload Identity 池页面。

    转到“工作负载身份池”

  2. 找到包含提供商的工作负载身份池,然后点击池的 展开节点图标。

  3. 找到要查看的工作负载身份池提供商,然后点击其 修改图标。Google Cloud 控制台会显示有关提供商的详细信息。

gcloud

执行 gcloud iam workload-identity-pools providers describe 命令。

REST

调用 projects.locations.workloadIdentityPools.providers.get()

更新提供商

您可以启用或停用工作负载身份池提供商。您还可以更新其账号信息及其特性映射,以及它的显示名和说明。

如需更新现有工作负载身份池提供方,请执行以下操作:

控制台

  1. 在 Google Cloud 控制台中,转到 Workload Identity 池页面。

    转到“工作负载身份池”

  2. 找到包含提供商的工作负载身份池,然后点击池的 展开节点图标。

  3. 找到要修改的工作负载身份池提供商,然后点击其 修改图标。

  4. 修改提供商信息,然后点击保存

gcloud

执行 gcloud iam workload-identity-pools providers update-aws 命令以更新 AWS 提供商。

执行 gcloud iam workload-identity-pools providers update-oidc 命令以更新 OIDC 提供商。这包括 Microsoft Azure。

REST

调用 projects.locations.workloadIdentityPools.providers.patch()

删除提供商

删除工作负载身份池提供商后,提供商的身份将无法再访问 Google Cloud 资源。

您最长可以在删除后 30 天内恢复删除提供商。30 天后,系统会永久删除提供商。在系统永久删除某个提供商之前,您不能在创建新的提供商时重复使用该提供商的名称。

如需删除工作负载身份池提供商,请执行以下操作:

控制台

  1. 在 Google Cloud 控制台中,转到 Workload Identity 池页面。

    转到“工作负载身份池”

  2. 找到包含该提供商的工作负载身份池,然后点击其 修改图标。

  3. 提供商窗格中,找到要删除的提供商,然后点击其 删除图标。

  4. 点击删除以删除该提供商。

gcloud

执行 gcloud iam workload-identity-pools providers delete 命令。

REST

调用 projects.locations.workloadIdentityPools.providers.delete()

恢复删除提供商

您最长可以在删除后 30 天内恢复已删除的工作负载身份池提供方。如需恢复删除的提供商,请执行以下操作:

控制台

  1. 在 Google Cloud 控制台中,转到 Workload Identity 池页面。

    转到“工作负载身份池”

  2. 点击显示已删除的池和提供商切换开关。

  3. 找到包含提供商的工作负载身份池,然后点击池的 展开节点图标。

  4. 找到要恢复删除的提供商,然后点击其 恢复图标。

  5. 点击恢复。该提供商将被恢复。

gcloud

执行 gcloud iam workload-identity-pools providers undelete 命令。

REST

调用 projects.locations.workloadIdentityPools.providers.undelete()

管理工作负载身份联合的限制条件

您可以使用组织政策限制条件来限制 Google Cloud 组织中资源的使用方式。

本部分介绍使用工作负载身份联合时推荐的限制条件。

限制身份提供商配置

作为组织管理员,您可以决定允许自己的组织与哪些身份提供商联合。

如需管理允许的身份提供商,请在组织的组织政策中启用 constraints/iam.workloadIdentityPoolProviders 列表限制条件。此限制条件指定允许的提供商的颁发者 URI。您可以使用 Google Cloud 控制台Google Cloud CLI 启用此限制条件。

如需只允许来自 AWS 的联合,请使用 URI https://sts.amazonaws.com 创建一个限制条件。以下示例展示了如何使用 gcloud CLI 创建此限制条件:

gcloud resource-manager org-policies allow constraints/iam.workloadIdentityPoolProviders \
     https://sts.amazonaws.com --organization=ORGANIZATION_NUMBER

您还可以指定哪些 AWS 账号 ID 有权访问您的 Google Cloud 资源。如要指定账号 ID,请使用 constraints/iam.workloadIdentityPoolAwsAccounts 列表限制条件:

gcloud resource-manager org-policies allow constraints/iam.workloadIdentityPoolAwsAccounts \
    ACCOUNT_ID --organization=ORGANIZATION_NUMBER

如需只允许来自一个 OIDC 提供商的联合,请使用允许的提供商的 issuer_uri 创建一个限制条件。例如,以下命令只允许来自特定 Azure 租户的联合:

gcloud resource-manager org-policies allow constraints/iam.workloadIdentityPoolProviders \
     https://sts.windows.net/AZURE_TENANT_ID --organization=ORGANIZATION_NUMBER

来自 SAML 身份提供商的联合是一种特殊情况,因为用于验证断言的公钥是在配置时提供的,而不是直接由身份提供商提供的。因此,恶意用户可能会试图上传 SAML 元数据文档,其中包含贵组织的身份提供商的实体 ID,但该 ID 是一个可供恶意用户访问私钥的公钥。在此情况下,通过实体 ID 限制联合只能提供安全假象。因此,我们强烈建议您仅允许在组织集中管理的 Google Cloud 项目中创建工作负载身份池,以允许进行 SAML 联合。然后,您可以向该工作负载身份池中的外部身份授予您组织中各项资源的访问权限。

如需允许来自 SAML 身份提供商的联合,请创建一个允许特殊关键字 KEY_UPLOAD 的限制条件。

gcloud resource-manager org-policies allow constraints/iam.workloadIdentityPoolProviders \
     KEY_UPLOAD --organization=ORGANIZATION_NUMBER

您可以重复运行这些命令,以允许来自其他提供商的联合。

如需阻止来自所有提供商的联合,请执行以下操作:

  1. 创建一个包含以下内容的 YAML 文件:

    constraint: constraints/iam.workloadIdentityPoolProviders
    listPolicy:
      allValues: DENY
  2. 将文件传递给 gcloud resource-manager org-policies set-policy 命令:

    gcloud resource-manager org-policies set-policy FILE_NAME.yaml \
        --organization=ORGANIZATION_NUMBER

限制服务账号密钥的创建

工作负载身份联合允许您从 Google Cloud 外部访问 Google Cloud 资源,而无需使用服务账号密钥。如果您从来不使用服务账号密钥进行身份验证,则可以通过停用密钥创建来降低风险。

如需停用服务账号密钥创建,请在组织的组织政策中强制执行 iam.disableServiceAccountKeyCreation 布尔值限制条件。您也可以强制执行 iam.disableServiceAccountKeyUpload 布尔值限制条件,该限制条件会停用服务账号的公钥上传。

您可以使用 Google Cloud 控制台gcloud CLI 启用这些限制条件。例如,以下 gcloud CLI 命令同时启用这两个限制条件:

gcloud resource-manager org-policies enable-enforce \
    constraints/iam.disableServiceAccountKeyCreation \
    --organization=ORGANIZATION_NUMBER
gcloud resource-manager org-policies enable-enforce \
    constraints/iam.disableServiceAccountKeyUpload \
    --organization=ORGANIZATION_NUMBER

监控工作负载身份联合

您可以使用 Cloud Monitoring 指标来监控工作负载身份池和提供方的身份验证事件。如需查看可用指标的列表,请参阅 IAM 指标

后续步骤

详细了解工作负载身份联合