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

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

您可以使用 Google Cloud Console、gcloud 命令行工具REST API 来管理身份池和提供商。

准备工作

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

管理工作负载身份池

列出池

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

控制台

在 Cloud Console 中,转到工作负载身份池页面。

转到“工作负载身份池”

gcloud

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

REST

调用 projects.locations.workloadIdentityPools.list()

获取池

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

控制台

  1. 在 Cloud Console 中,转到工作负载身份池页面。

    转到“工作负载身份池”

  2. 找到您要查看的工作负载身份池,然后点击其 修改图标。Cloud Console 将显示工作负载身份池的相关详细信息。

gcloud

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

REST

调用 projects.locations.workloadIdentityPools.get()

更新池

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

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

控制台

  1. 在 Cloud Console 中,转到工作负载身份池页面。

    转到“工作负载身份池”

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

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

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

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

gcloud

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

REST

调用 projects.locations.workloadIdentityPools.patch()

删除池

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

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

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

控制台

  1. 在 Cloud Console 中,转到工作负载身份池页面。

    转到“工作负载身份池”

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

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

gcloud

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

REST

调用 projects.locations.workloadIdentityPools.delete()

恢复删除池

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

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

控制台

  1. 在 Cloud Console 中,转到工作负载身份池页面。

    转到“工作负载身份池”

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

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

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

gcloud

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

REST

调用 projects.locations.workloadIdentityPools.undelete()

管理工作负载身份提供商

创建提供商

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

控制台

  1. 在 Cloud Console 中,转到工作负载身份池页面。

    转到“工作负载身份池”

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

  3. 点击 添加提供商

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

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

    Cloud Console 将使用该名称创建提供商 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. 在 Cloud Console 中,转到工作负载身份池页面。

    转到“工作负载身份池”

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

gcloud

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

REST

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

获取提供商

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

控制台

  1. 在 Cloud Console 中,转到工作负载身份池页面。

    转到“工作负载身份池”

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

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

gcloud

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

REST

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

更新提供商

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

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

控制台

  1. 在 Cloud Console 中,转到工作负载身份池页面。

    转到“工作负载身份池”

  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. 在 Cloud Console 中,转到工作负载身份池页面。

    转到“工作负载身份池”

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

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

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

gcloud

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

REST

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

恢复删除提供商

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

控制台

  1. 在 Cloud Console 中,转到工作负载身份池页面。

    转到“工作负载身份池”

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

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

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

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

gcloud

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

REST

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

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

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

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

限制身份提供商配置

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

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

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

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 身份提供商的联合是一种特殊情况,因为用于验证断言的公钥在配置时提供,而不是直接从身份提供商提取。因此,恶意用户可能会试图使用贵组织的身份提供商实体 ID 以及有权访问私钥的公钥上传 SAML 元数据文档。在此场景中,按实体 ID 限制联合只会产生安全错觉。因此,我们强烈建议您仅允许在组织集中管理的 GCP 项目中创建工作负载身份池,以允许 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 布尔值限制条件,该限制条件会停用服务帐号的公钥上传。

您可以使用 Cloud Consolegcloud 工具启用这些限制条件。例如,以下 gcloud 工具命令同时启用这两个限制条件:

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

后续步骤

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