使用 OIDC 设置身份和安全性

本页面适用于基础架构运维者

本页面介绍如何通过您选择的 OpenID Connect(OIDC 提供商)启用 Anthos Management Center 身份验证。OIDC 是基于 OAuth 2.0 构建的身份验证层,它指定 RESTful HTTP API,并使用 JSON 作为数据格式。

通过 OIDC,您可以使用现有身份提供商来管理用户和群组身份验证。借助 OIDC,您可以按照组织中创建、启用和停用帐号的标准程序来管理对集群的访问权限。

准备工作

在设置 OIDC 之前,您需要做好以下准备:

  1. 用于访问 Management Center 的域名(由基础架构运维者提供),例如:anthos.example.com
  2. OIDC 提供商,例如 Microsoft Active Directory Federation Services (ADFS)、Google SSO 或 Keycloak。集群和浏览器必须都能连接到 OIDC 提供商。OIDC 提供商无需能够直接连接回集群。如果您没有 OIDC 提供商,请参阅使用 Keycloak 进行身份验证进行安装。Keycloak 仅用于演示目的,不建议用于生产环境。

创建身份配置文件

身份配置文件包含使用身份提供商进行身份验证所需的配置。您可以按照以下步骤创建身份配置文件:

  1. 在 Management Center Console 中,打开身份和访问权限菜单。

  2. 身份标签页中,点击设置 Anthos Identity Service (OIDC)

  3. 配置文件名称字段中分配方便用户使用的配置文件名称。这是配置文件所引用的名称。

  4. 输入您的 OIDC 提供商提供的 OIDC 提供商网址客户端 ID客户端 Secret

  5. 设置用户名声明字段。用户名声明是 OIDC 令牌中用于保留用户名的声明。例如,如果用户名声明为 email,则由 OIDC 令牌中的用户字段进行识别。

    设置此声明时,请确保请求的范围中存在该声明。

  6. 设置用户名前缀字段。用户名前缀用于区分来自不同身份提供商的用户。为用户分配 RBAC 权限时,也需要包含用户前缀。

    例如,如果用户名声明为 email,且用户前缀为 prefix-,则用户会被标识为 prefix-sally@example.com。用户是 sally@example.com,并且前缀 prefix- 用作用户前缀来区分不同的身份提供商。

  7. 设置群组声明字段。在 Anthos 不公开模式下,默认值为 groups。如需详细了解如何将群组绑定到角色,请参阅角色绑定

  8. 设置群组前缀字段。群组前缀用于区分不同身份提供商的群组。将 RBAC 权限分配给群组时,还必须包含群组前缀。

    例如,如果群组声明为 groups,且群组前缀为 groupprefix-,则群组将被标识为 groupprefix-group。群组为 group,前缀 groupprefix- 用作群组的前缀。 我们建议您在前缀的末尾插入一个分隔符,如第 6 步设置用户名前缀部分所述。

  9. (可选)如果范围不是 openid email profile,请设置范围字段。

    范围是用于指定在 ID 令牌中请求什么访问权限的标识符:

    • OIDC 需要 openid
    • profile 包含用户的默认 profile 声明。
    • email 通常包括 emailemail_verified 声明。
  10. 如果 OIDC 提供商(例如 Google SSO)需要其他参数,请设置额外参数字段。

    例如,您可以将额外参数字段设置为 prompt=consent,access_type=offline,以便在每次请求访问范围授权之前显示同意屏幕。

  11. 如果与 /.well-known/openid-configuration 页面或 OIDC 提供商的 JWKS 页面的 HTTPS 连接得到受信任的证书(例如自签名证书)保护,则您需要使用 OIDC 提供商所用的 HTTPS 证书填写 OIDC 提供商证书字段。

    • 将 OIDC 提供商的 PEM 编码的证书编码为 base64。如需创建该字符串,请将证书(包括标头)编码为 base64。将生成的字符串添加为单独的一行。

    • 示例:LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tC...k1JSUN2RENDQWFT==

    • 如需查看设置此字段的示例,请参阅使用 Keycloak 进行身份验证

  12. 点击提交,然后返回到身份和访问权限标签页。

  13. 向 OIDC 提供商注册回调网址。

点击身份配置文件标签页中的添加,创建其他身份配置文件。

将身份配置文件应用于管理员集群

集群创建后,您必须将身份配置文件应用于集群。

  1. 身份配置文件标签中,点击应用到集群

    将配置文件应用于管理员集群

  2. 点击管理员集群标签页。在配置文件下拉列表中,为之前创建的配置文件选择配置文件名称。您可以选择多个配置文件来应用到集群。

    OIDC 配置文件页面

  3. 验证配置文件的域名。这是映射到身份提供商配置文件的域名。尝试访问网域上路径的未经身份验证的用户将被定向到使用此身份提供商登录。此域名由基础架构运维者分配。

    如果要一次应用多个配置文件,则必须向每个配置文件分配不同的域名。

    如需详细了解如何配置域名,请参阅配置域名以访问 Management Center

  4. 输入被授予平台管理员访问权限的初始用户名(例如,alice@example.com、bob@example.com)。用户名应带有在配置文件中设置的用户前缀的前缀。例如,如果前缀为 prefix-,则 Initial Platform Admin 字段中的用户名应类似于 prefix-alice@example.com。如需详细了解平台管理员和授权,请参阅授权角色

  5. 应用这些设置并等待几分钟,以应用配置并重启服务。

现在,您可以通过域名访问 Management Center 了。如果您未登录,系统会将您重定向到 OIDC 提供商进行登录。

通过 API 配置 OIDC

除了通过 Management Center 配置 OIDC,您还可以通过 API 设置 OIDC。如需配置 OIDC 身份验证,您需要使用身份验证详细信息配置管理员集群的 ClientConfig CRD。为此,请创建一个包含以下内容的文件(例如 admin-cluster-oidc-config.yaml):

spec:
  authentication:
  - name: CONFIGURATION_NAME
    oidc:
      clientID: CLIENT_ID
      clientSecret: CLIENT_SECRET
      # The URI to redirect users going through the OAuth flow using cloud
      # console.
      # This is a required parameter not supported by Anthos private mode, so
      # a dummy value is required.
      cloudConsoleRedirectURI: http://cloud.console.not.enabled
      extraParams: EXTRA_PARAMS
      issuerURI: ISSUER_URI
      # The redirect URL that kubectl uses for authorization.
      kubectlRedirectURI: http://localhost:9879/callback
      scopes: SCOPES
      userClaim: USER_CLAIM
      groupsClaim: GROUPS_CLAIM
      certificateAuthorityData: CERT_AUTHORITY_DATA

替换以下内容:

  • CONFIGURATION_NAME:要创建的 OIDC 配置的名称。
  • CLIENT_ID:向 OpenID 提供方发出身份验证请求的客户端应用的 ID。
  • CLIENT_SECRET:客户端应用的密钥。
  • EXTRA_PARAMS:要发送到 OpenID 提供方的额外键值对参数(以英文逗号分隔)。
  • ISSUER_URI:向您的 OpenID 发送授权请求的网址。
  • SCOPES:要发送到 OpenID 提供方的其他范围(以英文逗号分隔)。
  • USER_CLAIM:用作用户名的 JWT 声明。您可以选择其他声明,例如电子邮件或名称,具体取决于 OpenID 提供方。不过,电子邮件以外的声明会以颁发者网址作为前缀,以防止命名冲突。
  • GROUPS_CLAIM:包含用户群组信息的 OIDC ID 令牌中的声明名称。
  • CERT_AUTHORITY_DATA:OIDC 提供方的可选 base64 编码的 PEM 编码证书。如果不需要,请将其移除。要创建字符串,请将证书(包括标头)进行 base64 编码。将生成的字符串作为单独的一行添加到 certificateAuthorityData 中。

使用所需配置修改文件后,运行以下命令:

kubectl patch --kubeconfig=ADMIN_KUBECONFIG clientconfig default -n kube-public \
  --type=merge --patch "$(cat OIDC_CONFIG)"

替换以下内容:

  • ADMIN_KUBECONFIG:管理员集群 kubeconfig 文件的路径。
  • OIDC_CONFIG:您创建的配置文件的路径。

使用 OIDC 登录管理员集群 Kubernetes API 服务器

设置 OIDC 后,用户可以从身份和访问权限页面下载 admin-actl-auth-login-config.yaml

  1. 在“身份和访问权限”页面上,点击身份标签页,然后点击集群标签页。

  2. 找到名为管理员的集群,然后点击查看配置详情

  3. 点击下载登录配置,将用于通过身份登录的配置下载到管理员集群 Kubernetes API 服务器。

    AIS 配置下载按钮

  4. 输出文件 admin-actl-auth-login-config.yaml 包含用户向管理员集群验证身份所需的配置。与需要访问集群的可信用户共享 admin-actl-auth-login-config.yaml

  5. 获取 admin-actl-auth-login-config.yaml 后,用户可以使用 actl auth login 命令登录。当用户通过浏览器成功登录时,系统会生成 kubeconfig 档。用户可以使用该新文件通过其联合凭据来访问集群:

    # Where to store the new kubeconfig
    export ADMIN_OIDC_KUBECONFIG=$(pwd)/admin-oidc-kubeconfig
    
    actl auth login --login-config=admin-actl-auth-login-config.yaml --cluster=admin \
      --kubeconfig=${ADMIN_OIDC_KUBECONFIG} \
      --preferred-auth="CONFIGURATION_NAME"
    

    CONFIGURATION_NAME 替换为要进行身份验证的身份个人资料名称。

  6. 用户现在可以使用 ${ADMIN_OIDC_KUBECONFIG} 访问管理员集群上的资源,例如:

    kubectl get pods -n anthos-management-center --kubeconfig=${ADMIN_OIDC_KUBECONFIG}
    
  7. ${ADMIN_OIDC_KUBECONFIG} 也可用于对 actl CLI 命令进行身份验证,例如:

    actl platform management-center describe --kubeconfig=${ADMIN_OIDC_KUBECONFIG}
    

重置身份验证配置

如果平台管理员因身份验证设置有误而无法访问 Management Center,请运行命令,将 OIDC 身份验证重置为原始设置,并获取 Management Center 的新访问网址。

actl auth reset --kubeconfig=ADMIN_KUBECONFIG

# Get the new access URL to management center.
actl platform management-center describe --kubeconfig=ADMIN_KUBECONFIG

后续步骤