×

关于 OpenShift Container Platform 中的身份提供程序

默认情况下,您的集群中只存在kubeadmin用户。要指定身份提供程序,必须创建一个描述该身份提供程序的自定义资源 (CR),并将其添加到集群。

OpenShift Container Platform 用户名包含/:%不受支持。

关于 OpenID Connect 身份验证

OpenShift Container Platform 中的身份验证操作符要求配置的 OpenID Connect 身份提供程序实现OpenID Connect Discovery规范。

不支持ID 令牌用户信息解密。

默认情况下,请求openid范围。如有需要,可以在extraScopes字段中指定额外的范围。

从 OpenID 身份提供程序返回的 JWT id_token 中读取声明,如果指定,则从UserInfo URL 返回的 JSON 中读取声明。

必须至少配置一个声明用作用户的身份。标准身份声明是sub

您还可以指示哪些声明用作用户的首选用户名、显示名称和电子邮件地址。如果指定多个声明,则使用第一个具有非空值的值。下表列出了标准声明

声明 描述

sub

“主体标识符”的缩写。发行者处用户的远程身份。

preferred_username

配置用户时的首选用户名。用户希望被称为的简写名称,例如janedoe。通常是一个与用户在身份验证系统中的登录名或用户名相对应的值,例如用户名或电子邮件。

email

电子邮件地址。

name

显示名称。

有关详细信息,请参阅OpenID 声明文档

除非您的 OpenID Connect 身份提供程序支持资源所有者密码凭据 (ROPC) 授予流程,否则用户必须从<namespace_route>/oauth/token/request获取令牌才能与命令行工具一起使用。

支持的 OIDC 提供程序

Red Hat 对 OpenShift Container Platform 中的特定 OpenID Connect (OIDC) 提供商进行了测试和支持。以下是经过测试并受 OpenShift Container Platform 支持的 OpenID Connect (OIDC) 提供商。使用不在以下列表中的 OIDC 提供商可能与 OpenShift Container Platform 一起工作,但该提供商未经 Red Hat 测试,因此不受 Red Hat 支持。

  • 适用于 Windows Server 的 Active Directory 联合身份验证服务

    目前,当使用自定义声明时,不支持在 OpenShift Container Platform 中使用适用于 Windows Server 的 Active Directory 联合身份验证服务。

  • GitLab

  • Google

  • Keycloak

  • Microsoft 身份平台 (Azure Active Directory v2.0)

    目前,当需要同步组名称时,不支持使用 Microsoft 身份平台。

  • Okta

  • Ping Identity

  • Red Hat Single Sign-On

创建密钥

身份提供商使用 OpenShift Container Platform `Secret` 对象(位于 `openshift-config` 命名空间中)来包含客户端密钥、客户端证书和密钥。

步骤
  • 使用以下命令创建包含字符串的 `Secret` 对象

    $ oc create secret generic <secret_name> --from-literal=clientSecret=<secret> -n openshift-config

    或者,您可以应用以下 YAML 来创建密钥

    apiVersion: v1
    kind: Secret
    metadata:
      name: <secret_name>
      namespace: openshift-config
    type: Opaque
    data:
      clientSecret: <base64_encoded_client_secret>
  • 您可以使用以下命令定义包含文件内容的 `Secret` 对象

    $ oc create secret generic <secret_name> --from-file=<path_to_file> -n openshift-config

创建 ConfigMap

身份提供商使用 OpenShift Container Platform `ConfigMap` 对象(位于 `openshift-config` 命名空间中)来包含证书颁发机构捆绑包。这些主要用于包含身份提供商所需的证书捆绑包。

步骤
  • 使用以下命令定义包含证书颁发机构的 OpenShift Container Platform `ConfigMap` 对象。证书颁发机构必须存储在 `ConfigMap` 对象的 `ca.crt` 密钥中。

    $ oc create configmap ca-config-map --from-file=ca.crt=/path/to/ca -n openshift-config

    或者,您可以应用以下 YAML 来创建 ConfigMap

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: ca-config-map
      namespace: openshift-config
    data:
      ca.crt: |
        <CA_certificate_PEM>

OpenID Connect CR 示例

以下自定义资源 (CR) 显示了 OpenID Connect 身份提供商的参数和可接受的值。

如果您必须指定自定义证书捆绑包、额外范围、额外授权请求参数或 `userInfo` URL,请使用完整的 OpenID Connect CR。

标准 OpenID Connect CR
apiVersion: config.openshift.io/v1
kind: OAuth
metadata:
  name: cluster
spec:
  identityProviders:
  - name: oidcidp (1)
    mappingMethod: claim (2)
    type: OpenID
    openID:
      clientID: ... (3)
      clientSecret: (4)
        name: idp-secret
      claims: (5)
        preferredUsername:
        - preferred_username
        name:
        - name
        email:
        - email
        groups:
        - groups
      issuer: https://www.idp-issuer.com (6)
1 此提供商名称作为身份声明值的词缀,用于构成身份名称。它还用于构建重定向 URL。
2 控制如何在此提供商的身份和 `User` 对象之间建立映射。
3 在 OpenID 提供商处注册的客户端的客户端 ID。客户端必须允许重定向到 `https://oauth-openshift.apps.<cluster_name>.<cluster_domain>/oauth2callback/<idp_provider_name>`。
4 包含客户端密钥的 OpenShift Container Platform `Secret` 对象的引用。
5 用作身份的声明列表。使用第一个非空声明。
6 OpenID 规范中描述的颁发者标识符。必须使用 `https`,不包含查询或片段组件。
完整的 OpenID Connect CR
apiVersion: config.openshift.io/v1
kind: OAuth
metadata:
  name: cluster
spec:
  identityProviders:
  - name: oidcidp
    mappingMethod: claim
    type: OpenID
    openID:
      clientID: ...
      clientSecret:
        name: idp-secret
      ca: (1)
        name: ca-config-map
      extraScopes: (2)
      - email
      - profile
      extraAuthorizeParameters: (3)
        include_granted_scopes: "true"
      claims:
        preferredUsername: (4)
        - preferred_username
        - email
        name: (5)
        - nickname
        - given_name
        - name
        email: (6)
        - custom_email_claim
        - email
        groups: (7)
        - groups
      issuer: https://www.idp-issuer.com
1 可选:包含 PEM 编码的证书颁发机构捆绑包的 OpenShift Container Platform ConfigMap 的引用,用于验证为配置的 URL 验证服务器证书。
2 可选:除了 `openid` 范围外,在授权令牌请求期间请求的范围列表。
3 可选:添加到授权令牌请求的额外参数映射。
4 用于在为该身份预配用户时用作首选用户名的一系列声明。使用第一个非空声明。
5 用作显示名称的声明列表。使用第一个非空声明。
6 用作电子邮件地址的声明列表。使用第一个非空声明。
7 用于在用户登录时将组从 OpenID Connect 提供商同步到 OpenShift Container Platform 的声明列表。使用第一个非空声明。
其他资源
  • 有关所有身份提供商共有的参数(例如 `mappingMethod`)的信息,请参阅身份提供商参数

将身份提供商添加到您的集群

安装集群后,向其中添加身份提供商,以便您的用户可以进行身份验证。

先决条件
  • 创建一个 OpenShift Container Platform 集群。

  • 为您的身份提供商创建自定义资源 (CR)。

  • 您必须以管理员身份登录。

步骤
  1. 应用已定义的 CR

    $ oc apply -f </path/to/CR>

    如果 CR 不存在,则 `oc apply` 将创建一个新的 CR,并可能触发以下警告:`Warning: oc apply should be used on resources created by either oc create --save-config or oc apply`。在这种情况下,您可以安全地忽略此警告。

  2. 从 OAuth 服务器获取令牌。

    只要已删除 `kubeadmin` 用户,`oc login` 命令就会提供有关如何访问网页以检索令牌的说明。

    您还可以通过 Web 控制台访问此页面,方法是导航到**(?)帮助** → **命令行工具** → **复制登录命令**。

  3. 登录到集群,传入令牌进行身份验证。

    $ oc login --token=<token>

    如果您的 OpenID Connect 身份提供商支持资源所有者密码凭据 (ROPC) 授予流程,您可以使用用户名和密码登录。您可能需要采取步骤来为您的身份提供商启用 ROPC 授予流程。

    在 OpenShift Container Platform 中配置 OIDC 身份提供商后,您可以使用以下命令登录,该命令会提示您输入用户名和密码

    $ oc login -u <identity_provider_username> --server=<api_server_url_and_port>
  4. 确认用户已成功登录并显示用户名。

    $ oc whoami

使用 Web 控制台配置身份提供商

通过 Web 控制台而不是 CLI 配置您的身份提供商 (IDP)。

先决条件
  • 您必须以集群管理员身份登录 Web 控制台。

步骤
  1. 导航到**管理** → **集群设置**。

  2. 在**配置**选项卡下,单击**OAuth**。

  3. 在**身份提供商**部分,从**添加**下拉菜单中选择您的身份提供商。

您可以通过 Web 控制台指定多个 IDP,而不会覆盖现有 IDP。