为 GKE Identity Service 配置 OIDC 提供方

本文档介绍如何为 GKE Identity Service 配置所选的 OpenID Connect (OIDC) 身份提供方。如需详细了解 GKE Identity Service,请参阅概览

本文档适用于平台管理员或组织中管理身份设置的人员。如果您是集群管理员或应用运维人员,请先让您的平台管理员按照本部分中的说明操作,然后您再开始为舰队级 GKE Identity Service 配置集群使用 OIDC 为 GKE Identity Service 配置集群

向您的提供方注册 GKE Identity Service

GKE Identity Service 设置需要来自身份提供方的单一客户端 ID 和密钥。作为用户身份验证流程的一部分,GKE Identity Service 在连接到提供方时会使用此 ID 和密钥。如需获取此信息,在所选提供方的标准流程后,您需要向提供方将 GKE Identity Service 注册为客户端应用。您可以在下一部分中找到常见提供商的一些特定注册详细信息。

对于重定向网址,请指定以下值:

  • https://console.cloud.google.com/kubernetes/oidc 是 Google Cloud 控制台的重定向网址。
  • http://localhost:PORT/callback 是 gcloud CLI 的重定向网址。您可以指定大于 1024 的任何端口号。

通过备用身份验证流程注册您的提供方

注册提供方的另一种过程是通过 GKE Identity Service 服务器直接进行身份验证。如果您使用的是 OIDC 或 Azure AD 提供方,则必须根据集群网址的格式更新 redirect_uriredirect_uri 的格式如下:

      https://CLUSTER-SERVER-FQDN.com:8443/finish-login

CLUSTER-SERVER-FQDN 替换为集群服务器的名称。

例如,如果集群网址为 https://cluster.company.com,则 redirect_uri 应为 https://cluster.company.com:8443/finish-login

保存您在注册步骤中获得的客户端 ID 和密钥。与需要设置 GKE Identity Service 的集群管理员共享这些详细信息。您必须确保您已完成以下操作:

  • 配置您的域名服务 (DNS),以将 CLUSTER-SERVER-FQDN 解析为控制平面 VIP(虚拟 IP 地址)。用户可以使用此域名访问集群。
  • 使用由受信任的企业证书授权机构 (CA) 颁发的服务器名称指示 (SNI) 证书。此证书明确指出 CLUSTER-SERVER-FQDN 是有效域名,从而避免了向用户显示的证书警告。您可以在创建集群期间提供 SNI 证书。如需详细了解如何使用 SNI 证书进行身份验证,请参阅 SNI 证书身份验证
  • 如果 SNI 证书不可行,请将所有用户设备配置为信任集群 CA 证书。这样可以避免显示证书警告,但需要将集群 CA 证书分发给所有用户。

要详细了解使用这些证书的用户登录访问权限,请参阅通过备用身份验证流程设置用户登录访问权限

提供商设置信息

本部分提供有关注册 GKE Identity Service 的其他特定于提供方的信息。 如果此处列出了您的提供方,请按照以下说明将 GKE Identity Service 作为客户端应用向您的提供方注册。

Microsoft AD FS

使用一组 AD FS 管理向导来配置 AD FS 服务器和 AD 用户数据库。

  1. 打开 AD FS 管理窗格。

  2. 选择 Application Groups > Actions > Add an Application Group

  3. 选择 Server Application。输入您选择的名称和说明。点击下一步

  4. 输入上文指定的两个重定向网址。您将获得一个客户端 ID。这是 AD FS 服务器标识 GKE Identity Service 的方式。保存客户端 ID 以供日后使用。

  5. 选择 Generate a shared secret。GKE Identity Service 将使用此密钥向 AD FS 服务器进行身份验证。保存此 Secret 以供日后使用。

配置安全群组(可选)

  1. 在 AD FS 管理中,选择 Relying party trusts > Add a new relying party trust

  2. 选择 Claims aware,然后点击 Start

  3. 选择 Enter data about relying party manually

  4. 输入显示名。

  5. 跳过接下来的两个步骤。

  6. 输入信赖方信任标识符。建议使用 token-groups-claim

  7. 对于 Access control policy,请选择 Permit everyone。这意味着所有用户都会通过 gcloud CLI 和 Google Cloud 控制台共享其安全群组信息。

  8. 点击完成

将 LDAP 特性 (Attribute) 映射到声明名称

  1. 在 AD FS 管理中,选择 Relying party trusts > Edit claim issuance policy

  2. 选择 Send LDAP Attributes as Claims,然后点击 Next

  3. 对于 Claim rule name,请输入 groups

  4. 对于 Attribute store,请选择 Active Directory

  5. 在表格中,对于 LDAP Attribute,请选择:

    • AD FS 5.0 及更高版本:Token-Groups Qualified by Domain name
    • AD FS 5.0 之前的版本:Token Groups - Qualified Names
  6. 对于 Outgoing Claim Type,请选择:

    • AD FS 5.0 及更高版本:Group
    • AD FS 5.0 之前的版本:groups
  7. 点击 Finish,然后点击 Apply

向 AD FS 注册 GKE Identity Service

在管理员模式下打开 PowerShell 窗口,然后输入以下命令:

Grant-AD FSApplicationPermission `
  -ClientRoleIdentifier "[CLIENT_ID]" `
 -ServerRoleIdentifier [SERVER_ROLE_IDENTIFIER] `
  -ScopeName "allatclaims", "openid"

替换以下内容:

  • [CLIENT_ID] 是您之前获得的客户端 ID。

  • [SERVER_ROLE_IDENTIFIER] 是您之前输入的声明标识符。回想一下,建议的标识符为 token-groups-claim

Azure AD

向 Azure 注册 OAuth 客户端

如需向 Azure 注册 OAuth 客户端,请使用以下链接中的步骤:

  1. 如果您尚未在 Azure Active Directory 上设置租户,请进行设置。

  2. 向 Microsoft Identity Platform 注册应用

  3. 打开 Azure 门户中的应用注册页面,然后按名称选择您的应用。

  4. 创建客户端密钥。

    1. 点击基本功能下的添加证书或 Secret。系统会显示证书列表和 Secret 列表。

    2. 点击 New client secret(新建客户端密钥)。 为密钥命名,然后点击添加

    3. 将 Secret 的值*保存在安全位置。关闭或刷新页面后,您将无法检索它。

  5. 添加重定向 URI。

    1. 返回应用页面。

    2. 选择基本功能下的添加重定向 URI。系统会显示身份验证页面。

    3. 选择添加平台,右侧将显示名为配置平台的面板。

    4. 选择网站。在重定向 URI 下,输入 gcloud CLI 登录流程的 http://localhost:PORT/callback。选择大于 1024 的 PORT。点击配置按钮。

    5. 点击添加 URI 按钮,为 Google Cloud 控制台登录添加另一个 URI https://console.cloud.google.com/kubernetes/oidc

    6. 点击顶部的保存按钮。

现在,您的客户端注册已完成。您应该会获得要与集群管理员共享的以下信息:

  • Issuer URIhttps://login.microsoftonline.com/TENANT_ID/v2.0。在 Azure 门户的“应用”页面上,租户 ID 显示为 Directory (tenant) ID

  • 客户端 ID:客户端 ID 在 Azure 门户的“应用”页面上显示为 Application (client) ID

  • 客户端密钥:您在上一步中获得了此密钥。如果您在创建 Secret 时关闭该页面,将无法检索此内容。请务必将值保存在安全位置(如果丢失之前的 Secret,请生成新的 Secret)。

Azure AD 的高级设置

仅在您使用基于 Azure AD 群组的授权政策设置集群且集群的用户所属的 Azure AD 群组超过 200 个时,才需考虑使用此高级设置。Azure AD 的高级设置支持以下平台:

  • 本地 GKE 集群(VMware 和 Bare Metal):从 GKE Enterprise 1.14 开始
  • Anthos Clusters on AWS:从 GKE Enterprise 1.14 开始(Kubernetes 1.25 版或更高版本)
  • Anthos Clusters on Azure:从 GKE Enterprise 1.14 开始(Kubernetes 1.25 版或更高版本)
  • Anthos Clusters on AWS(上一代):从 GKE Enterprise 1.14 开始

在开始之前,请确保每位用户都有一个关联的电子邮件地址,配置为他们在 Azure AD 中的标识符。GKE Identity Service 使用用户的电子邮件地址来声明用户的身份并对请求进行身份验证。

您需要确保在上一部分中注册的客户端被授予从 Microsoft Graph API 获取用户和群组信息的权限。这些权限允许 GKE Identity Service 插件访问 Microsoft Graph API 端点以从中提取群组信息。如果没有执行此步骤,GKE Identity Service 无法列出用户的群组,基于群组的 RBAC 授权政策将无法按预期运行。

您需要拥有全局管理员或组织管理员权限才能执行此设置步骤。

  1. 登录 Azure 门户。
  2. 如果您有权访问多个租户,请使用顶部菜单中的 Directory + subscription 过滤条件选择包含您的客户端应用注册的租户。
  3. 选择 Azure Active Directory - App registrations,然后选择您的客户端应用。
  4. 选择 API permissions - Add a permission - Microsoft Graph - Delegated permissions
  5. Group 标签页下,选中 Group.Read.All。在 User 标签页下,选中User.Read.All
  6. 点击 Add permissions 以完成此过程。
  7. 点击 Grant admin consent for... 按钮以代表所有用户授予同意。如需详细了解如何授予管理员同意,请参阅详细了解 API 权限和管理员同意

分享提供商详细信息

确保集群管理员拥有以下所需的集群配置信息:

  • 提供商的颁发者 URI
  • 客户端密钥
  • 客户端 ID
  • 您为 gcloud CLI 指定的重定向 URI 和端口
  • 提供商用于在其令牌(配置集群为 sub 时采用默认值)中标识用户的用户名字段(声明)
  • 您的提供商用于返回安全群组的群组名称字段(声明)(如有)。
  • 特定于提供商的任何其他范围或参数,如上一部分所述。例如,如果您的授权服务器提示是否同意向 Microsoft Azure 和 Okta 进行身份验证,则集群管理员需要指定 prompt=consent 作为参数。如果您已将 ADFS 配置为提供安全群组信息,则相关的额外参数为 resource=token-groups-claim(或您选择作为您的信赖方信任标识符的任何内容)。
  • (可选)如果您的提供方未使用由公共证书授权机构签名的证书(例如,如果您使用的是自签名证书),则您需要身份提供方的证书(或证书链)。证书(或证书链)需要至少包含根证书(只要证书链连续返回根证书,系统就会接受部分证书链)。在 ClientConfig 中提供此值时,需要采用 base64 编码的字符串格式。如需创建字符串,请将完整的 PEM 编码的证书合并为单个字符串,然后进行 base64 编码。

您可以在配置集群中查看 GKE Identity Service 配置参数的完整列表。