配置 OIDC 提供方以向集群进行身份验证

本文档适用于平台管理员或组织中管理身份设置的人员。本文档介绍如何配置您选择的 OpenID Connect (OIDC) 身份提供方,以便对未在 Google Cloud上运行的 Kubernetes 集群进行身份验证。

向您的提供方注册客户端应用

在用户身份验证流程中,集群使用客户端 ID 和密钥连接到您的身份提供方。您可以通过为 Kubernetes 配置客户端应用,从身份提供方获取客户端 ID 和密钥。设置客户端应用的步骤取决于您的提供方。您可以在下一部分找到有关常用提供方的一些具体注册详情。

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

  • https://console.cloud.google.com/kubernetes/oidc 是 Google Cloud 控制台的重定向网址。
  • http://localhost:PORT/callback 是 gcloud CLI 的重定向网址。您可以指定大于 1024 的任何端口号。
  • 如果您选择使用 FQDN 访问权限进行身份验证APISERVER_URL:11001/finish-login 是重定向网址。将 APISERVER_URL 替换为集群的 Kubernetes API 服务器的 FQDN。例如,如果 APISERVER_URLhttps://apiserver.company.com,则 redirect_uri 应为 https://apiserver.company.com:11001/finish-login

保存您从注册步骤获得的客户端 ID 和密钥。将这些详细信息共享给需要设置其集群的集群管理员。

身份提供方设置信息

本部分介绍了向 Microsoft Active Directory Federation Services (AD FS) 或 Microsoft Entra ID 注册客户端应用的步骤。

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 会使用此客户端 ID 来标识集群。保存客户端 ID 以供日后使用。

  5. 选择 Generate a shared secret。Kubernetes 身份验证机制会使用此密钥向 AD FS 服务器进行身份验证。保存此密钥以供日后使用。

配置安全群组(可选)

  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 注册 Kubernetes 客户端应用

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

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

替换以下内容:

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

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

Microsoft Entra ID

如需向 Microsoft Entra ID 注册 OAuth 客户端,请完成以下链接中的步骤:

  1. 如果您尚未设置 Microsoft Entra 租户,请进行设置。

  2. 在 Microsoft Entra ID 中注册应用

  3. 在 Microsoft Entra 管理中心内,打开应用注册页面,然后选择您的应用。应用概览页面即会打开。

  4. 创建客户端密钥:

    1. 在导航菜单中,点击证书和密钥
    2. 点击客户端密钥标签页。
    3. 点击 New client secret(新建客户端密钥)。 为密钥命名,然后点击添加
    4. 将密钥的保存在一个安全位置。关闭或刷新页面后,您将无法检索它。

    如需了解详情,请参阅在 Microsoft Entra ID 中添加和管理应用凭证

  5. 添加重定向 URI:

    1. 在导航菜单中,点击身份验证
    2. 平台配置部分,点击添加平台配置平台窗格即会打开。
    3. 点击 Web
    4. 重定向 URI 字段中,为 gcloud CLI 登录流程输入 http://localhost:PORT/callback。选择大于 1024 的 PORT
    5. 点击配置
    6. 点击添加 URI 以添加另一个 URI。
    7. 为Google Cloud 控制台登录流程输入 https://console.cloud.google.com/kubernetes/oidc
    8. 保存配置。

    如需了解详情,请参阅如何向应用添加重定向 URI

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

  • Issuer URIhttps://login.microsoftonline.com/TENANT_ID/v2.0。在 Microsoft Entra 管理中心的应用概览页面中,租户 ID 显示为 Directory (tenant) ID

  • 客户端 ID:在 Microsoft Entra 管理中心的应用概览页面中,客户端 ID 显示为 Application (client) ID

  • 客户端密钥:您在注册客户端应用时创建的客户端密钥的值。如果您无法访问此值,请生成一个新的密钥。

Microsoft Entra ID 的高级设置

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

  • 本地 Google Distributed Cloud(VMware 和裸金属):从 1.14 版开始
  • GKE on AWS:从 1.14 版开始(Kubernetes 1.25 版或更高版本)
  • GKE on Azure:从 1.14 版开始(Kubernetes 1.25 版或更高版本)

开始之前,请确保每个用户都在 Microsoft Entra ID 中配置了关联的邮箱作为其标识符。此邮箱用于声明用户的身份并对请求进行身份验证。

您需要确保在上一部分中注册的客户端被授予从 Microsoft Graph API 获取用户和群组信息的权限。这些权限使 Kubernetes 身份验证机制能够访问要从中获取群组信息的 Microsoft Graph API 端点。如果缺少此步骤,集群将无法获取用户的群组信息,这会导致基于群组的 RBAC 授权政策无法按预期工作。

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

  1. 登录 Microsoft Entra 管理中心。
  2. 选择包含您的客户端应用的 Microsoft Entra 租户。
  3. 选择应用注册,然后选择您的客户端应用。
  4. 选择 API permissions - Add a permission - Microsoft Graph - Delegated permissions
  5. Group 标签页下,选中 Group.Read.All。在 User 标签页下,选中User.Read.All
  6. 点击 Add permissions 以完成此过程。
  7. 点击授予管理员同意...,以代表所有用户授予同意。如需了解详情,请参阅有关 API 权限和管理员同意的更多信息

共享身份提供方详细信息

与集群管理员共享以下提供方信息,以便进行集群设置:

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

如需详细了解集群的配置参数,请参阅配置集群

后续步骤