本指南介绍如何通过支持 OIDC 或 SAML 2.0 的身份提供方 (IdP) 配置员工身份联合。
如需查看特定于 IdP 的说明,请参阅以下内容:
准备工作
- 确保您已设置 Google Cloud 组织。
-
安装 Google Cloud CLI。 安装完成后,运行以下命令来初始化 Google Cloud CLI:
gcloud init如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。
-
Enable the Identity and Access Management (IAM) and Resource Manager APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. - 如需登录,您的 IdP 必须提供已签名的身份验证信息:OIDC IdP 必须提供 JWT,而 SAML IdP 响应必须经过签名。
- 如需接收有关贵组织或Google Cloud 产品的变更的重要信息,您必须提供必要的联系人。如需了解详情,请参阅员工身份联合概览。
费用
员工身份联合是一项免费功能。不过,员工身份联合的详细审核日志记录使用 Cloud Logging。如需了解 Logging 价格,请参阅 Google Cloud Observability 价格。
所需的角色
如需获得配置员工身份联合所需的权限,请让您的管理员为您授予组织的 Workforce Identity Pool Admin (roles/iam.workforcePoolAdmin) IAM 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
此外,Owner 基本角色 (roles/owner) 还包括配置员工身份联合所需的权限。您不应在生产环境中授予基本角色,但可以在开发或测试环境中授予这些角色。
配置员工身份联合
如需配置员工身份联合,您需要创建员工身份池和员工身份池提供方。
创建员工身份池
如需创建池,请执行以下命令:
gcloud
如需创建员工身份池,请运行以下命令:
gcloud iam workforce-pools create WORKFORCE_POOL_ID \
--organization=ORGANIZATION_ID \
--display-name="DISPLAY_NAME" \
--description="DESCRIPTION" \
--session-duration=SESSION_DURATION \
--location=global
替换以下内容:
WORKFORCE_POOL_ID:您选择用于表示您的 Google Cloud 员工群组的 ID。如需了解如何设置 ID 的格式,请参阅 API 文档中的查询参数部分。ORGANIZATION_ID:员工身份池所属 Google Cloud 组织的数字形式组织 ID。员工身份池可在组织中的所有项目和文件夹中使用。DISPLAY_NAME:可选。您的员工身份池的显示名称。DESCRIPTION:可选。员工身份池说明。SESSION_DURATION:可选。会话时长,以在后面附加s的数字表示,例如3600s。会话时长,用于确定来自此员工池的 Google Cloud 访问令牌、控制台(联合)登录会话和 gcloud CLI 登录会话的有效时长。会话时长默认为 1 小时(3600 秒)。会话时长值必须介于 15 分钟(900 秒)到 12 小时(43200 秒)之间。
控制台
如需创建员工身份池,请执行以下操作:
在 Google Cloud 控制台中,前往员工身份池页面:
为员工身份池选择组织。员工身份池可在组织中的所有项目和文件夹中使用。
点击创建池,然后执行以下操作:
在名称字段中,输入池的显示名称。池 ID 是根据您输入的名称自动派生的,并显示在名称字段下方。您可以点击池 ID 旁边的修改来更新池 ID。
可选:在说明中,输入池的说明。
如需创建员工身份池,请点击下一步。
员工身份池的会话时长默认为 1 小时(3600 秒)。会话时长用于确定来自此员工池的 Google Cloud 访问令牌以及控制台(联合)和 gcloud CLI 登录会话的有效时长。创建池后,您可以更新池以设置自定义会话时长。会话时长必须介于 15 分钟(900 秒)到 12 小时(43200 秒)之间。
创建员工身份池提供方
本部分介绍如何创建员工身份池提供方,以便您的 IdP 用户能够访问 Google Cloud。您可以将提供方配置为使用 OIDC 或 SAML 协议。
创建 OIDC 员工池提供方
如需使用 OIDC 协议创建员工身份池提供方,请执行以下操作:
在您的 OIDC IdP 中,为 Google Cloud员工身份联合注册一个新应用。记下 IdP 提供的客户端 ID 和颁发者 URI。您在本文档中需要使用这些信息。
如果您打算设置用户对控制台的访问权限,请将以下重定向网址添加到 OIDC IdP:
https://auth.cloud.google/signin-callback/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID替换以下内容:
WORKFORCE_POOL_ID:员工身份池 IDWORKFORCE_PROVIDER_ID:您在本文档后面部分创建的员工身份池提供方的 ID。
如需了解如何配置控制台(联合)登录,请参阅设置用户对控制台(联合)的访问权限。
在 Google Cloud中,如需创建提供方,请执行以下操作:
gcloud
代码流
如需创建使用授权代码流程进行 Web 登录的 OIDC 提供方,请运行以下命令:
gcloud iam workforce-pools providers create-oidc WORKFORCE_PROVIDER_ID \ --workforce-pool=WORKFORCE_POOL_ID \ --display-name="DISPLAY_NAME" \ --description="DESCRIPTION" \ --issuer-uri="ISSUER_URI" \ --client-id="OIDC_CLIENT_ID" \
--client-secret-value="OIDC_CLIENT_SECRET" \ --web-sso-response-type="code" \ --web-sso-assertion-claims-behavior="merge-user-info-over-id-token-claims" \ --web-sso-additional-scopes="WEB_SSO_ADDITIONAL_SCOPES" \ --attribute-mapping="ATTRIBUTE_MAPPING" \ --attribute-condition="ATTRIBUTE_CONDITION" \ --jwk-json-path="JWK_JSON_PATH" \ --detailed-audit-logging \ --location=global请替换以下内容:
WORKFORCE_PROVIDER_ID:唯一的员工身份池提供方 ID。前缀gcp-已预留,因此不能在员工身份池或员工身份池提供方 ID 中使用。WORKFORCE_POOL_ID:您的 IdP 所关联的员工身份池 ID。DISPLAY_NAME:提供方的可选易记显示名;例如idp-eu-employees。DESCRIPTION:可选的员工提供方说明;例如IdP for Partner Example Organization employees。ISSUER_URI:OIDC 颁发者 URI,采用有效的 URI 格式且以https开头;例如https://example.com/oidc。注意:出于安全原因,ISSUER_URI必须使用 HTTPS 架构。OIDC_CLIENT_ID:向 OIDC IdP 注册的 OIDC 客户端的 ID;该 ID 必须与您的 IdP 颁发的 JWT 的aud声明相匹配。OIDC_CLIENT_SECRET:OIDC 客户端密钥。WEB_SSO_ADDITIONAL_SCOPES:(可选)要发送到 OIDC IdP 以进行控制台(联合)或基于浏览器的 gcloud CLI 登录的额外范围。ATTRIBUTE_MAPPING:属性映射。以下是属性映射示例: 此示例会将 OIDC 断言中的 IdP 属性google.subject=assertion.sub, google.groups=assertion.groups, attribute.costcenter=assertion.costcentersubject、groups和costcenter分别映射到google.subject、google.groups和attribute.costcenter属性。ATTRIBUTE_CONDITION:属性条件;例如assertion.role == 'gcp-users'。本示例条件可确保仅具有gcp-users角色的用户才能使用此提供方登录。JWK_JSON_PATH:本地上传的 OIDC JWK 的可选路径。如果未提供此参数, Google Cloud 会改用您的 IdP 的/.well-known/openid-configuration路径来寻找包含公钥的 JWK。如需详细了解本地上传的 OIDC JWK,请参阅管理 OIDC JWK。-
员工身份联合详细审核日志记录会将从 IdP 接收的信息记录到 Logging。详细的审核日志记录有助于排查员工身份池提供方配置的问题。如需了解如何通过详细审核日志记录来排查属性映射错误,请参阅一般属性映射错误。如需了解 Logging 价格,请参阅 Google Cloud Observability 价格。
如需为员工身份池提供方停用详细审核日志记录,请在运行
gcloud iam workforce-pools providers create时省略--detailed-audit-logging标志。如需停用详细审核日志记录,您也可以更新提供方。
locations/global/workforcePools/enterprise-example-organization-employees。隐式流
如需创建使用隐式流进行 Web 登录的 OIDC 提供方,请运行以下命令:
gcloud iam workforce-pools providers create-oidc WORKFORCE_PROVIDER_ID \ --workforce-pool=WORKFORCE_POOL_ID \ --display-name="DISPLAY_NAME" \ --description="DESCRIPTION" \ --issuer-uri="ISSUER_URI" \ --client-id="OIDC_CLIENT_ID" \ --web-sso-response-type="id-token" \ --web-sso-assertion-claims-behavior="only-id-token-claims" \ --web-sso-additional-scopes="WEB_SSO_ADDITIONAL_SCOPES" \ --attribute-mapping="ATTRIBUTE_MAPPING" \ --attribute-condition="ATTRIBUTE_CONDITION" \ --jwk-json-path="JWK_JSON_PATH" \ --detailed-audit-logging \ --location=global请替换以下内容:
WORKFORCE_PROVIDER_ID:唯一的员工身份池提供方 ID。前缀gcp-已预留,因此不能在员工身份池或员工身份池提供方 ID 中使用。WORKFORCE_POOL_ID:您的 IdP 所关联的员工身份池 ID。DISPLAY_NAME:提供方的可选易记显示名;例如idp-eu-employees。DESCRIPTION:可选的员工提供方说明;例如IdP for Partner Example Organization employees。ISSUER_URI:OIDC 颁发者 URI,采用有效的 URI 格式且以https开头;例如https://example.com/oidc。注意:出于安全原因,ISSUER_URI必须使用 HTTPS 架构。OIDC_CLIENT_ID:向 OIDC IdP 注册的 OIDC 客户端的 ID;该 ID 必须与您的 IdP 颁发的 JWT 的aud声明相匹配。WEB_SSO_ADDITIONAL_SCOPES:(可选)要发送到 OIDC IdP 以进行控制台(联合)或基于浏览器的 gcloud CLI 登录的额外范围。ATTRIBUTE_MAPPING:属性映射。以下是属性映射示例: 此示例会将 OIDC 断言中的 IdP 属性google.subject=assertion.sub, google.groups=assertion.groups, attribute.costcenter=assertion.costcentersubject、groups和costcenter分别映射到google.subject、google.groups和attribute.costcenter属性。ATTRIBUTE_CONDITION:属性条件;例如assertion.role == 'gcp-users'。本示例条件可确保仅具有gcp-users角色的用户才能使用此提供方登录。JWK_JSON_PATH:本地上传的 OIDC JWK 的可选路径。如果未提供此参数, Google Cloud 会改用您的 IdP 的/.well-known/openid-configuration路径来寻找包含公钥的 JWK。如需详细了解本地上传的 OIDC JWK,请参阅管理 OIDC JWK。-
员工身份联合详细审核日志记录会将从 IdP 接收的信息记录到 Logging。详细的审核日志记录有助于排查员工身份池提供方配置的问题。如需了解如何通过详细审核日志记录来排查属性映射错误,请参阅一般属性映射错误。如需了解 Logging 价格,请参阅 Google Cloud Observability 价格。
如需为员工身份池提供方停用详细审核日志记录,请在运行
gcloud iam workforce-pools providers create时省略--detailed-audit-logging标志。如需停用详细审核日志记录,您也可以更新提供方。
locations/global/workforcePools/enterprise-example-organization-employees。前缀
gcp-已预留,因此不能在员工身份池或员工身份池提供方 ID 中使用。对于 OIDC 联合,您可以使用
assertion.NAME:一个字符串,该字符串等于 ID 令牌载荷中类似名称声明的值。控制台
代码流
在 Google Cloud 控制台中,如需创建使用授权代码流程的 OIDC 提供方,请执行以下操作:
在 Google Cloud 控制台中,前往员工身份池页面:
在员工身份池表中,选择要为其创建提供方的池。
在提供方部分中,点击 添加提供方。
在选择提供方供应商列表中,选择您的 IdP。
如果您的 IdP 未列出,请选择通用身份提供方。
在选择身份验证协议中,选择 OpenID Connect (OIDC)。
在创建提供方部分中,执行以下操作:
- 在名称中,输入提供方的名称。
- 在说明中,输入提供方的说明。
- 在颁发者 (网址) 中,输入颁发者 URI。OIDC 颁发者 URI 必须采用有效的 URI 格式,并以
https开头;例如https://example.com/oidc。 - 在客户端 ID 中,输入注册到 OIDC IdP 的 OIDC 客户端 ID,该 ID 必须与 IdP 颁发的 JWT 的
aud声明相匹配。 如需创建状态为已启用的提供方,请确保启用提供方处于开启状态。
- 点击继续。
在与 IdP 分享提供方信息部分,复制相应网址。 在您的 IdP 中,将此网址配置为重定向 URI,以便 IdP 知晓在您登录后应将断言令牌发送到何处。
点击继续。
在配置 OIDC Web 登录部分中,执行以下操作:
- 在流程类型列表中,选择代码。
在断言声明行为列表中,选择以下任一选项:
- 用户信息和 ID 令牌
- 仅 ID 令牌
在客户端密钥字段中,输入 IdP 提供的客户端密钥。
可选:如果您选择 Okta 作为 IdP,请在 OpenID、个人资料和邮箱之外的其他范围字段中添加任何额外的 OIDC 范围。
点击继续。
在配置提供方中,您可以配置属性映射和属性条件。如需创建属性映射,请执行以下操作。您可以提供 IdP 字段名称,也可以提供返回字符串的 CEL 格式表达式。
必需:在 OIDC 1 中,输入 IdP 中的主题,例如
assertion.sub。可选:如需添加其他属性映射,请执行以下操作:
- 点击添加映射。
- 在 Google n 中(其中 n 为数字),输入一个 Google Cloud支持的密钥。
- 在相应的 OIDC n 字段中,以 CEL 格式输入要映射的 IdP 特定字段的名称。
如果您选择 Microsoft Entra ID 作为 IdP,则可以增加群组数量。
- 选择使用额外属性。
- 在额外属性颁发者 URI 字段中,输入颁发者网址。
- 在额外属性客户端 ID 字段中,输入客户端 ID。
- 在额外属性客户端密钥字段中,输入客户端密钥。
- 在额外属性类型列表中,选择额外属性的属性类型。
- 在额外属性过滤条件字段中,输入在查询 Microsoft Graph API 以获取群组时使用的过滤表达式。
如需创建属性条件,请执行以下操作:
- 点击添加条件。
- 在属性条件字段中,以 CEL 格式输入条件;例如
assertion.role == 'gcp-users'。本示例条件可确保仅具有gcp-users角色的用户才能使用此提供方登录。
如需启用详细审核日志记录,请在详细日志记录中点击启用属性值审核日志记录切换开关。
员工身份联合详细审核日志记录会将从 IdP 接收的信息记录到 Logging。详细的审核日志记录有助于排查员工身份池提供方配置的问题。如需了解如何通过详细审核日志记录来排查属性映射错误,请参阅一般属性映射错误。如需了解 Logging 价格,请参阅 Google Cloud Observability 价格。
如需为员工身份池提供方停用详细审核日志记录,请在运行
gcloud iam workforce-pools providers create时省略--detailed-audit-logging标志。如需停用详细审核日志记录,您也可以更新提供方。
如需创建提供方,请点击提交。
隐式流
在 Google Cloud 控制台中,如需创建使用隐式流的 OIDC 提供方,请执行以下操作:
在 Google Cloud 控制台中,前往员工身份池页面:
在员工身份池表中,选择要为其创建提供方的池。
在提供方部分,点击 添加提供方。
在选择提供方供应商列表中,选择您的 IdP。
如果您的 IdP 未列出,请选择通用身份提供方。
在选择身份验证协议中,选择 OpenID Connect (OIDC)。
在创建提供方部分中,执行以下操作:
- 在名称中,输入提供方的名称。
- 在说明中,输入提供方的说明。
- 在颁发者 (网址) 中,输入颁发者 URI。OIDC 颁发者 URI 必须采用有效的 URI 格式,并以
https开头;例如https://example.com/oidc。 - 在客户端 ID 中,输入注册到 OIDC IdP 的 OIDC 客户端 ID,该 ID 必须与 IdP 颁发的 JWT 的
aud声明相匹配。 - 如需创建状态为已启用的提供方,请确保启用提供方处于开启状态。
- 点击继续。
在与 IdP 分享提供方信息部分,复制相应网址。 在您的 IdP 中,将此网址配置为重定向 URI,以便 IdP 知晓在您登录后应将断言令牌发送到何处。
点击继续。
在配置 OIDC Web 登录部分中,执行以下操作:
在流程类型列表中,选择 ID 令牌。
在断言声明行为列表中,ID 令牌处于选中状态。
可选:如果您选择 Okta 作为 IdP,请在 OpenID、个人资料和邮箱之外的其他范围字段中添加任何额外的 OIDC 范围。
点击继续。
在配置提供方中,您可以配置属性映射和属性条件。如需创建属性映射,请执行以下操作。您可以提供 IdP 字段名称,也可以提供返回字符串的 CEL 格式表达式。
必需:在 OIDC 1 中,输入 IdP 中的主题;例如
assertion.sub。可选:如需添加其他属性映射,请执行以下操作:
- 点击添加映射。
- 在 Google n 中(其中 n 为数字),输入一个 Google Cloud支持的密钥。
- 在相应的 OIDC n 字段中,以 CEL 格式输入要映射的 IdP 特定字段的名称。
如果您选择 Microsoft Entra ID 作为 IdP,则可以增加群组数量。
- 选择使用额外属性。
- 在额外属性颁发者 URI 字段中,输入颁发者网址。
- 在额外属性客户端 ID 字段中,输入客户端 ID。
- 在额外属性客户端密钥字段中,输入客户端密钥。
- 在额外属性类型列表中,选择额外属性的属性类型。
- 在额外属性过滤条件字段中,输入在查询 Microsoft Graph API 以获取群组时使用的过滤表达式。
如需创建属性条件,请执行以下操作:
- 点击添加条件。
- 在属性条件字段中,以 CEL 格式输入条件;例如
assertion.role == 'gcp-users'。本示例条件可确保仅具有gcp-users角色的用户才能使用此提供方登录。
如需启用详细审核日志记录,请在详细日志记录中点击启用属性值审核日志记录切换开关。
员工身份联合详细审核日志记录会将从 IdP 接收的信息记录到 Logging。详细的审核日志记录有助于排查员工身份池提供方配置的问题。如需了解如何通过详细审核日志记录来排查属性映射错误,请参阅一般属性映射错误。如需了解 Logging 价格,请参阅 Google Cloud Observability 价格。
如需为员工身份池提供方停用详细审核日志记录,请在运行
gcloud iam workforce-pools providers create时省略--detailed-audit-logging标志。如需停用详细审核日志记录,您还可以更新提供方。
如需创建提供方,请点击提交。
创建 SAML 员工池提供方
在您的 SAML IdP 中,为 Google Cloud员工身份联合注册一个新应用。
设置 SAML 断言的目标对象。它通常是 IdP 配置中的
SP Entity ID字段。您必须将其设置为以下网址:https://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID设置重定向网址,也称为断言使用方服务 (ACS) 网址。如需设置重定向网址,请在 SAML IdP 中找到重定向网址字段,然后执行以下操作之一:
如需通过 Google Cloud 控制台或其他基于浏览器的登录方法来设置基于浏览器的登录,请输入以下网址:
https://auth.cloud.google/signin-callback/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID替换以下内容:
WORKFORCE_POOL_ID:员工身份池 IDWORKFORCE_PROVIDER_ID:您在本文档后面部分创建的员工身份池提供方的 ID。
如需通过 IdP 设置程序化登录,请输入以下网址:
localhost
如需详细了解如何配置控制台登录,请参阅设置用户对控制台的访问权限。
在 Google Cloud中,使用 IdP 的 SAML 元数据文档创建 SAML 员工身份池提供方。您可以从 IdP 下载 SAML 元数据 XML 文档。该文档必须至少包含以下内容:
- 您的 IdP 的 SAML 实体 ID。
- 您的 IdP 的单点登录网址。
- 至少一个签名公钥。 如需详细了解签名密钥,请参阅本指南后面部分的密钥要求。
gcloud
如需使用 gcloud CLI 配置 SAML 提供方,请执行以下操作:
gcloud iam workforce-pools providers create-saml WORKFORCE_PROVIDER_ID \
--workforce-pool=WORKFORCE_POOL_ID \
--display-name="DISPLAY_NAME" \
--description="DESCRIPTION" \
--idp-metadata-path=METADATA_FILE_PATH \
--attribute-mapping="ATTRIBUTE_MAPPING" \
--attribute-condition="ATTRIBUTE_CONDITION" \
--location=global
替换以下内容:
WORKFORCE_PROVIDER_ID:员工身份池提供方 ID。WORKFORCE_POOL_ID:员工身份池 ID。DISPLAY_NAME:提供方的显示名;例如idp-eu-employees。DESCRIPTION:员工身份池提供方的说明;例如IdP for Partner Example Organization EU employees。METADATA_FILE_PATH:SAML 元数据文件的路径。ATTRIBUTE_MAPPING:属性映射,例如: 此示例会将 IdP 属性google.subject=assertion.subject, google.groups=assertion.attributes['https://example.com/aliases'], attribute.costcenter=assertion.attributes.costcenter[0]assertion.subject、assertion.attributes['https://example.com/aliases']和assertion.attributes.costcenter[0]分别映射到 Google Cloud属性google.subject、google.groups和google.costcenter。ATTRIBUTE_CONDITION:属性条件。例如,要将ipaddr属性限制为特定 IP 范围,您可以设置条件assertion.attributes.ipaddr.startsWith('98.11.12.')。此示例条件可确保只有 IP 地址以98.11.12.开头的用户才能使用此员工提供方登录。
提供方可能需要几分钟才能开始接受请求。
对于 SAML 联合,您可以在属性映射和条件中使用以下关键字:
assertion.subject:一个字符串,等于 SAML 断言中的NameID属性。assertion.attributes.NAME:一个字符串列表,等于 SAML 断言中类似名称属性的值。
可选:接受来自 IdP 的加密 SAML 断言
如需让您的 SAML 2.0 IdP 能够生成员工身份联合可接受的加密 SAML 断言,请执行以下操作:
- 在员工身份联合中,执行以下操作:
- 为您的员工身份池提供方创建非对称密钥对。
- 下载包含公钥的证书文件。
- 配置您的 SAML IdP,以使用公钥加密颁发的 SAML 断言。
- 在 IdP 中,执行以下操作:
- 启用断言加密(也称为令牌加密)。
- 上传您在员工身份联合中创建的公钥。
- 确认您的 IdP 生成加密的 SAML 断言。
创建员工身份联合 SAML 断言加密密钥
本部分将指导您创建非对称密钥对,使员工身份联合能够接受加密的 SAML 断言。
Google Cloud 使用私钥来解密 IdP 发出的 SAML 断言。如需创建用于 SAML 加密的非对称密钥对,请运行以下命令。如需了解详情,请参阅支持的 SAML 加密算法。
gcloud iam workforce-pools providers keys create KEY_ID \ --workforce-pool WORKFORCE_POOL_ID \ --provider WORKFORCE_PROVIDER_ID \ --location global \ --use encryption \ --spec KEY_SPECIFICATION
请替换以下内容:
KEY_ID:您选择的键名称WORKFORCE_POOL_ID:池 IDWORKFORCE_PROVIDER_ID:员工身份池提供方 ID-
KEY_SPECIFICATION:密钥规范,可以是rsa-2048、rsa-3072和rsa-4096之一。
创建密钥对后,如需将公钥下载到证书文件中,请执行以下命令。只有员工身份联合可以访问私钥。
gcloud iam workforce-pools providers keys describe KEY_ID \ --workforce-pool WORKFORCE_POOL_ID \ --provider WORKFORCE_PROVIDER_ID \ --location global \ --format "value(keyData.key)" \ > CERTIFICATE_PATH
替换以下内容:
KEY_ID:密钥名称WORKFORCE_POOL_ID:池 IDWORKFORCE_PROVIDER_ID:员工身份池提供方 IDCERTIFICATE_PATH:要将证书写入的路径,例如saml-certificate.cer或saml-certificate.pem
配置符合 SAML 2.0 标准的 IdP,以发出加密的 SAML 断言
配置您的 SAML IdP,以使用上一步中下载的公共证书来加密颁发的 SAML 断言。如需了解具体说明,请咨询您的 IdP 团队。将 IdP 配置为加密 SAML 断言后,我们建议您检查以确保其生成的断言确实已加密。即使配置了 SAML 断言加密,员工身份联合仍然可以处理明文断言。
删除员工身份联合加密密钥
如需删除 SAML 加密密钥,请运行以下命令:gcloud iam workforce-pools providers keys delete KEY_ID \ --workforce-pool WORKFORCE_POOL_ID \ --provider WORKFORCE_PROVIDER_ID \ --location global
请替换以下内容:
KEY_ID:密钥名称WORKFORCE_POOL_ID:池 IDWORKFORCE_PROVIDER_ID:员工身份池提供方 ID
支持的 SAML 加密算法
员工身份联合支持以下密钥传输算法:
- http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p
- http://www.w3.org/2009/xmlenc11#rsa-oaep"
- http://www.w3.org/2001/04/xmlenc#rsa-1_5"
员工身份联合支持以下块加密算法:
- http://www.w3.org/2001/04/xmlenc#aes128-cbc
- http://www.w3.org/2001/04/xmlenc#aes192-cbc
- http://www.w3.org/2001/04/xmlenc#aes256-cbc
- http://www.w3.org/2009/xmlenc11#aes128-gcm
- http://www.w3.org/2009/xmlenc11#aes256-gcm
SAML X.509 签名密钥要求
以下密钥规范适用于 SAML X.509 签名密钥:
封装在 X.509 v3 证书中的 RSA 公钥。
证书有效性要求:
notBefore:不超过未来 7 天的时间戳notAfter:不超过未来 25 年的时间戳
推荐的算法:
- RSAwithSHA256(支持的密钥大小(位):2048、3072、4096)
- ECDSAwithSHA256
在给定时间,员工身份池提供方最多可以同时配置 3 个签名密钥。如果存在多个密钥, Google Cloud会遍历这些密钥,并尝试使用每个未过期的密钥来履行令牌交换请求。
出于安全方面的考虑,我们强烈建议您不要在其他服务中重复使用相同的密钥对。
密钥管理
如需更新 IdP 的签名密钥,请执行以下操作:
创建新的非对称密钥对,并使用密钥对配置 SAML 身份提供方。您需要首先将其标记为无效,然后在后续步骤中将其激活。
从 IdP 下载 SAML 元数据 XML 文档。
使用 SAML 元数据文档更新员工身份池提供方资源。如果存在多个密钥, Google Cloud 会遍历每个未过期的密钥,并尝试使用每个密钥来履行令牌交换请求。
如需使用 SAML 元数据更新员工身份池提供方,请执行以下命令。
gcloud iam workforce-pools providers update-saml WORKFORCE_PROVIDER_ID \ --workforce-pool=WORKFORCE_POOL_ID \ --idp-metadata-path=SAML_METADATA_FILE_PATH \ --location=global替换以下内容:
WORKFORCE_PROVIDER_ID:员工身份池提供方 IDWORKFORCE_POOL_ID:员工身份池 IDSAML_METADATA_FILE_PATH:SAML 元数据文件的路径
等待上一步返回的操作完成(该操作标记为已完成),然后在 SAML IdP 中激活新的签名密钥。旧签名密钥会被标记为无效。您的 IdP 发出的断言会使用新密钥进行签名。
以下步骤不是强制性的,但我们建议您最好执行这些步骤:
- 从 IdP 中删除现已失效的旧签名密钥。
- 从 IdP 下载 SAML 元数据 XML 文档。
使用 SAML 元数据文档更新员工身份池提供方资源。 Google Cloud 会拒绝使用过期签名密钥签名的断言。如需更新文档,请执行以下命令:
gcloud iam workforce-pools providers update-saml WORKFORCE_PROVIDER_ID \ --workforce-pool=WORKFORCE_POOL_ID \ --idp-metadata-path=SAML_METADATA_FILE_PATH \ --location=global替换以下内容:
WORKFORCE_PROVIDER_ID:员工身份池提供方 IDWORKFORCE_POOL_ID:员工身份池 IDSAML_METADATA_FILE_PATH:SAML 元数据路径
密钥删除限制条件
Google Cloud 会拒绝使用已删除密钥签名的断言。
控制台
如需使用 Google Cloud 控制台配置 SAML 提供方,请执行以下操作:
在 Google Cloud 控制台中,前往员工身份池页面:
在员工身份池表中,选择要为其创建提供方的池。
在提供方部分,点击添加提供方。
在选择提供方供应商列表中,选择您的 IdP。
如果您的 IdP 未列出,请选择通用身份提供方。
在选择身份验证协议中,选择 SAML。
在创建提供方部分中,执行以下操作:
在名称中,输入提供方的名称。
可选:在说明中,输入提供方的说明。
在 IDP 元数据文件 (XML) 中,选择您在本指南前面部分生成的元数据 XML 文件。
如需创建状态为已启用的提供方,请确保启用提供方处于开启状态。
点击继续。
在分享提供方信息部分,复制网址。 在您的 IdP 中,将第一个网址配置为实体 ID,用于向 IdP 标识您的应用。 将另一个网址配置为重定向 URI,以便告知您的 IdP 在用户登录后应将断言令牌发送到何处。
点击继续。
在配置提供方部分,执行以下操作:
在属性映射中,输入
google.subject的 CEL 表达式。可选:如需输入其他映射,请点击添加映射,然后输入其他映射,例如:
此示例会将 IdP 属性google.subject=assertion.subject, google.groups=assertion.attributes['https://example.com/aliases'], attribute.costcenter=assertion.attributes.costcenter[0]assertion.subject、assertion.attributes['https://example.com/aliases']和assertion.attributes.costcenter[0]分别映射到 Google Cloud属性google.subject、google.groups和google.costcenter。如果您选择 Microsoft Entra ID 作为 IdP,则可以通过执行以下操作来增加群组数量:
- 选择使用额外属性。
- 在额外属性颁发者 URI 字段中,输入颁发者网址。
- 在额外属性客户端 ID 字段中,输入客户端 ID。
- 在额外属性客户端密钥字段中,输入客户端密钥。
- 在额外属性类型列表中,选择额外属性的属性类型。
- 在额外属性过滤条件字段中,输入在查询 Microsoft Graph API 以获取群组时使用的过滤表达式。
可选:如需添加属性条件,请点击添加条件,然后输入表示属性条件的 CEL 表达式。 例如,要将
ipaddr属性限制为特定 IP 范围,您可以设置条件assertion.attributes.ipaddr.startsWith('98.11.12.')。此示例条件可确保只有 IP 地址以98.11.12.开头的用户才能使用此员工提供方登录。点击继续。
如需启用详细审核日志记录,请在详细日志记录中点击启用属性值审核日志记录切换开关。
员工身份联合详细审核日志记录会将从 IdP 接收的信息记录到 Logging。详细的审核日志记录有助于排查员工身份池提供方配置的问题。如需了解如何通过详细审核日志记录来排查属性映射错误,请参阅一般属性映射错误。如需了解 Logging 价格,请参阅 Google Cloud Observability 价格。
如需为员工身份池提供方停用详细审核日志记录,请在运行
gcloud iam workforce-pools providers create时省略--detailed-audit-logging标志。如需停用详细审核日志记录,您也可以更新提供方。
如需创建提供方,请点击提交。
IAM 政策的员工主账号标识符
下表显示了可用于向单个用户和用户群组授予角色的主账号标识符。
| 身份 | 标识符格式 |
|---|---|
| 员工身份池中的单个身份 |
principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/SUBJECT_ATTRIBUTE_VALUE
|
| 群组中的所有员工身份 |
principalSet://iam.googleapis.com/locations/global/workforcePools/POOL_ID/group/GROUP_ID
|
| 具有特定属性值的所有员工身份 |
principalSet://iam.googleapis.com/locations/global/workforcePools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE
|
| 员工身份池中的所有身份 |
principalSet://iam.googleapis.com/locations/global/workforcePools/POOL_ID/*
|
如需查看主账号标识符的完整列表,请参阅主账号标识符。
向主账号授予 IAM 角色
您可以为主账号(例如单个身份、身份群组或整个池)授予角色。
如需向主账号授予项目角色,请执行以下命令:
gcloud projects add-iam-policy-binding PROJECT_ID \
--role="ROLE" \
--member="PRINCIPAL"
请替换以下内容:
PROJECT_ID:项目 IDROLE:要授予的角色PRINCIPAL:主账号;请参阅员工身份联合的主账号标识符。
在以下示例中,该命令会将 Storage Admin 角色 (roles/storage.admin) 授予 GROUP_ID 群组中的所有身份:
gcloud projects add-iam-policy-binding my-project \
--role="roles/storage.admin" \
--member="principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/group/GROUP_ID"
如需详细了解主账号格式,请参阅员工身份联合的主账号标识符。
删除用户
员工身份联合为联合用户身份创建用户元数据和资源。如果您选择在 IdP 中删除用户,则还必须在 Google Cloud中明确删除这些资源。为此,请参阅删除员工身份联合用户及其数据。
您可能会看到资源仍与已删除的用户关联。这是因为删除用户元数据和资源需要长时间运行的操作。在您启动用户身份删除后,用户在删除操作之前启动的进程可以继续运行,直到这些进程完成或取消。
配置 SCIM
本部分介绍如何在员工身份池中配置 SCIM 租户。
每个员工身份池仅支持一个 SCIM 租户。如需在已有一个 SCIM 租户的身份池中配置新的 SCIM 租户,您必须先硬删除现有租户。
SCIM 租户的 --claim-mapping 标志只能包含特定的通用表达式语言 (CEL) 表达式。如需了解支持哪些表达式,请参阅映射令牌和 SCIM 属性。
如需配置跨网域身份管理系统(SCIM),您必须执行以下操作:
在 Google Cloud中配置 SCIM 租户和令牌
如需在 Google Cloud中配置 SCIM 租户,请执行以下操作:
-
创建 SCIM 租户。
gcloud iam workforce-pools providers scim-tenants create SCIM_TENANT_ID \ --workforce-pool="WORKFORCE_POOL_ID" \ --provider="PROVIDER_ID" \ --display-name="SCIM_TENANT_DISPLAY_NAME" \ --description="SCIM_TENANT_DESCRIPTION" \ --claim-mapping="CLAIM_MAPPING" \ --location="global"请替换以下内容:
SCIM_TENANT_ID:SCIM 租户的 ID。WORKFORCE_POOL_ID:您在本文档前面部分创建的员工池的 ID。PROVIDER_ID:您在本文档前面部分创建的员工身份池提供方的 ID。SCIM_TENANT_DISPLAY_NAME:SCIM 租户的显示名称。SCIM_TENANT_DESCRIPTION:SCIM 租户的说明。CLAIM_MAPPING:以英文逗号分隔的属性映射列表。我们建议您使用以下属性映射: 您在 SCIM 租户中映射的google.subject=user.externalId,google.group=group.externalId
google.subject属性必须使用--attribute-mapping标志唯一引用在员工身份池提供方的google.subject属性中映射的相同身份。 创建 SCIM 租户后,您将无法更新声明映射。如需替换,您可以硬删除 SCIM 租户,然后立即创建一个新的租户。如需详细了解使用 SCIM 的注意事项,请参阅 SCIM 支持。
-
命令完成后,执行以下操作:
-
在输出的
baseUri字段中,保存整个 URI,其格式为https://iamscim.googleapis.com/v1alpha1/tenants/SCIM_TENANT_UID。您需要向 IdP 提供此 URI。 -
此外,从 URI 中,仅保存
SCIM_TENANT_UID。 您需要在本文档后面部分使用此 UID 设置相应 SCIM 租户的 IAM 政策。
-
在输出的
-
创建 SCIM 令牌:
gcloud iam workforce-pools providers scim-tenants tokens create SCIM_TOKEN_ID \ --display-name DISPLAY_NAME \ --scim-tenant SCIM_TENANT_ID \ --workforce-pool WORKFORCE_POOL_ID \ --provider PROVIDER_ID \ --location global请替换以下内容:
SCIM_TOKEN_ID:SCIM 令牌的 IDDISPLAY_NAME:SCIM 令牌的显示名称WORKFORCE_POOL_ID:员工池的 IDSCIM_TENANT_ID:SCIM 租户的 IDPROVIDER_ID:员工身份池提供方的 ID
-
gcloud iam workforce-pools providers scim-tenants tokens create命令完成后,执行以下操作:-
在输出中,保存
securityToken字段中SCIM_TOKEN的值。您需要向 IdP 提供此安全令牌。安全令牌仅在此输出中显示,如果丢失,您必须创建新的 SCIM 令牌。 - 如需检查
SCIM_TOKEN是否因组织政策而被拒绝,请运行以下命令: 如果该命令因权限相关错误而失败,请运行curl -v -H "Authorization: Bearer SCIM_TOKEN" https://iamscim.googleapis.com/v1alpha1/tenants/SCIM_TENANT_UID/Users
gcloud organizations add-iam-policy-binding,如后续步骤中所述。如果该命令成功执行,则可以跳过该步骤。
-
在输出中,保存
-
为 SCIM 租户和令牌设置 IAM 政策。如果上一步中的
curl命令因权限相关错误而失败,则必须运行以下命令:gcloud organizations add-iam-policy-binding ORGANIZATION_ID \ --member=serviceAccount:SERVICE_AGENT_EMAIL \ --role roles/iam.scimSyncer请替换以下内容:
- ORGANIZATION_ID:组织的 ID。
- SERVICE_AGENT_EMAIL:服务代理的邮箱。该邮箱的格式如下:
o-ORGANIZATION_ID-SCIM_TENANT_UID@gcp-sa-iamscim.iam.gserviceaccount.com。创建 SCIM 租户时,系统会返回 SCIM_TENANT_UID。
在 IdP 中配置群组时,确保每个群组的显示名称(在 displayName 字段中提供)在 SCIM 租户中都是唯一的。如需详细了解 Microsoft Entra ID 中的群组和 SCIM,请参阅群组。
在 OIDC 或 SAML IdP 中配置 SCIM
在 IdP 中,按照 IdP 文档中的说明配置 SCIM。使用在上一步中获得的 SCIM 网址和 SCIM 令牌。
更新提供方以启用 SCIM
如需为提供方启用 SCIM,请执行以下操作:
OIDC
gcloud iam workforce-pools providers update-oidc PROVIDER_ID \
--workforce-pool=WORKFORCE_POOL_ID \
--location=LOCATION \
--scim-usage=enabled-for-groups
请替换以下内容:
PROVIDER_ID:员工身份池提供方的 IDWORKFORCE_POOL_ID:员工池的 IDLOCATION:员工池的位置
SAML
gcloud iam workforce-pools providers update-saml PROVIDER_ID \
--workforce-pool=WORKFORCE_POOL_ID \
--location=LOCATION \
--scim-usage=enabled-for-groups
请替换以下内容:
PROVIDER_ID:员工身份池提供方的 IDWORKFORCE_POOL_ID:员工池的 IDLOCATION:员工池的位置
映射令牌和 SCIM 属性
您必须在员工身份池提供方和为该提供方配置的 SCIM 租户中保持特性映射的一致性。对于员工身份池提供方,您可以使用 --attribute-mapping 标志;对于 SCIM 租户,您可以使用 --claim-mapping 标志。映射到用户的 google.subject 的 IdP 属性必须唯一地引用同一身份,无论是在令牌中还是在 SCIM 映射中定义。如需详细了解在使用 SCIM 时如何映射属性,请参阅
SCIM 支持部分。
下表显示了如何映射令牌声明中的属性和 SCIM 属性:
| Google 属性 | 员工身份池提供方映射 | SCIM 租户映射 |
|---|---|---|
google.subject |
assertion.oid |
user.externalId |
google.subject |
assertion.email |
user.emails[0].value |
google.subject |
assertion.email.lowerAscii() |
user.emails[0].value.lowerAscii() |
google.subject |
assertion.preferred_username |
user.userName |
google.group 请务必向提供方更新 --scim-usage=enabled-for-groups |
N/A |
group.externalId |
强制删除 SCIM 租户
如需强制删除 SCIM 租户,请执行以下操作:
gcloud iam workforce-pools providers scim-tenants delete SCIM_TENANT_ID \
--workforce-pool=WORKFORCE_POOL_ID \
--provider=PROVIDER_ID \
--hard-delete \
--location=global
请替换以下内容:
SCIM_TENANT_ID:要删除的 SCIM 租户的 IDWORKFORCE_POOL_ID:员工池的 IDPROVIDER_ID:员工身份池提供方的 ID
后续步骤
- 为员工身份联合获取短期有效的凭据
- 管理员工身份池提供方
- 删除员工身份联合用户及其数据
- 了解哪些 Google Cloud 产品支持员工身份联合
- 设置用户对控制台(联合)的访问权限