本文档适用于平台管理员或组织中管理身份设置的人员。本文档介绍如何配置您选择的 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_URL为https://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 用户数据库。
打开 AD FS 管理窗格。
选择 Application Groups > Actions > Add an Application Group。
选择 Server Application。输入您选择的名称和说明。点击下一步。
输入上文指定的两个重定向网址。您将获得一个客户端 ID。 AD FS 会使用此客户端 ID 来标识集群。保存客户端 ID 以供日后使用。
选择 Generate a shared secret。Kubernetes 身份验证机制会使用此密钥向 AD FS 服务器进行身份验证。保存此密钥以供日后使用。
配置安全群组(可选)
在 AD FS 管理中,选择 Relying party trusts > Add a new relying party trust。
选择 Claims aware,然后点击 Start。
选择 Enter data about relying party manually。
输入显示名。
跳过接下来的两个步骤。
输入信赖方信任标识符。建议使用
token-groups-claim。对于 Access control policy,请选择 Permit everyone。这意味着所有用户都会通过 gcloud CLI 和Google Cloud 控制台共享其安全群组信息。
点击完成。
将 LDAP 特性 (Attribute) 映射到声明名称
在 AD FS 管理中,选择 Relying party trusts > Edit claim issuance policy。
选择 Send LDAP Attributes as Claims,然后点击 Next。
对于 Claim rule name,请输入
groups。对于 Attribute store,请选择 Active Directory。
在表格中,对于 LDAP Attribute,请选择:
- AD FS 5.0 及更高版本:Token-Groups Qualified by Domain name
- AD FS 5.0 之前的版本:Token Groups - Qualified Names
对于 Outgoing Claim Type,请选择:
- AD FS 5.0 及更高版本:Group
- AD FS 5.0 之前的版本:groups
点击 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 客户端,请完成以下链接中的步骤:
如果您尚未设置 Microsoft Entra 租户,请进行设置。
在 Microsoft Entra 管理中心内,打开应用注册页面,然后选择您的应用。应用概览页面即会打开。
创建客户端密钥:
- 在导航菜单中,点击证书和密钥。
- 点击客户端密钥标签页。
- 点击 New client secret(新建客户端密钥)。 为密钥命名,然后点击添加。
- 将密钥的值保存在一个安全位置。关闭或刷新页面后,您将无法检索它。
如需了解详情,请参阅在 Microsoft Entra ID 中添加和管理应用凭证。
添加重定向 URI:
- 在导航菜单中,点击身份验证。
- 在平台配置部分,点击添加平台。配置平台窗格即会打开。
- 点击 Web。
- 在重定向 URI 字段中,为 gcloud CLI 登录流程输入
http://localhost:PORT/callback。选择大于 1024 的 PORT。 - 点击配置。
- 点击添加 URI 以添加另一个 URI。
- 为Google Cloud 控制台登录流程输入
https://console.cloud.google.com/kubernetes/oidc。 - 保存配置。
如需了解详情,请参阅如何向应用添加重定向 URI。
现在,您的客户端注册已完成。您应该会获得要与集群管理员共享的以下信息:
Issuer URI:
https://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 授权政策无法按预期工作。
您需要拥有全局管理员或组织管理员权限才能执行此设置步骤。
- 登录 Microsoft Entra 管理中心。
- 选择包含您的客户端应用的 Microsoft Entra 租户。
- 选择应用注册,然后选择您的客户端应用。
- 选择 API permissions - Add a permission - Microsoft Graph - Delegated permissions。
- 在 Group 标签页下,选中 Group.Read.All。在 User 标签页下,选中User.Read.All。
- 点击 Add permissions 以完成此过程。
- 点击授予管理员同意...,以代表所有用户授予同意。如需了解详情,请参阅有关 API 权限和管理员同意的更多信息。
共享身份提供方详细信息
与集群管理员共享以下提供方信息,以便进行集群设置:
- 提供商的颁发者 URI
- 客户端密钥
- 客户端 ID
- 您为 gcloud CLI 指定的重定向 URI 和端口
- 提供商用于在其令牌(配置集群为
sub时采用默认值)中标识用户的用户名字段(声明) - 您的提供商用于返回安全群组的群组名称字段(声明)(如有)。
- 特定于提供商的任何其他范围或参数,如上一部分所述。例如,如果您的授权服务器提示是否同意向 Microsoft Entra ID 和 Okta 进行身份验证,则集群管理员需要指定
prompt=consent作为参数。如果您已将 AD FS 配置为提供安全群组信息,则相关的额外参数为resource=token-groups-claim(或您选择作为您的信赖方信任标识符的任何内容)。 - (可选)如果您的提供方未使用由公共证书授权机构签名的证书(例如,如果您使用的是自签名证书),则您需要身份提供方的证书(或证书链)。证书(或证书链)需要至少包含根证书(只要证书链连续返回根证书,系统就会接受部分证书链)。在 ClientConfig 中提供此值时,需要采用 base64 编码的字符串格式。如需创建字符串,请将完整的 PEM 编码的证书合并为单个字符串,然后进行 base64 编码。
如需详细了解集群的配置参数,请参阅配置集群。