9.2. 直接認証に使用する外部 OIDC アイデンティティープロバイダーの設定


OpenShift Container Platform を、外部の OIDC アイデンティティープロバイダーを使用して直接認証を行うように設定します。これにより、ユーザーは既存の企業認証情報を使用してログインでき、組み込みの OAuth サーバーをバイパスして、効率的なシングルサインオンを実現できます。

前提条件

  • 外部認証プロバイダーを設定した。

    この手順では、Keycloak をアイデンティティープロバイダーとして使用し、以下のクライアントが設定されていることを前提としています。

    • 有効なリダイレクト URI が https://<openshift_console_route>/auth/callback に設定された console-test という Web コンソールの機密クライアント
    • 有効なリダイレクト URI が http://localhost:8080 に設定された、oc-cli-test という OpenShift CLI (oc) の公開クライアント
  • クラスターのインストールプログラムによって生成された kubeconfig ファイルにアクセスできる。
  • 認証に組み込みの OAuth サーバーを使用するように戻す必要がある場合に備えて、既存の認証設定をバックアップした。
  • クラスター上で OpenShift Container Platform の Web コンソールが有効になっている。

    注記

    クラスターで Web コンソールが有効になっていない場合は、Web コンソールクライアントを使用しない設定例について、「CLI クライアント専用の OIDC プロバイダー設定例」を参照してください。

手順

  1. インストールプログラムによって生成された kubeconfig ファイル、またはクラスター管理者としてログインする別の長期的な方法を使用していることを確認します。
  2. 次のコマンドを実行して、Web コンソールでの認証を可能にするシークレットを作成します。

    $ oc create secret generic console-secret \
        --from-literal=clientSecret=<secret_value> \
        -n openshift-config

    <secret_value> は、アイデンティティープロバイダーの console-test クライアントのシークレット値に置き換えます。

  3. オプション: 次のコマンドを実行して、プロバイダーの認証局バンドルを含む config map を作成します。

    $ oc create configmap keycloak-oidc-ca --from-file=ca-bundle.crt=my-directory/ca-bundle.crt \
        -n openshift-config

    プロバイダーの ca-bundle.crt ファイルへのパスを指定します。

  4. 次のコマンドを実行して認証設定を編集します。

    $ oc edit authentication.config/cluster
  5. type フィールドを OIDC に設定し、プロバイダーの oidcProviders フィールドを設定し、webhookTokenAuthenticator フィールドを null に設定して、認証設定を更新します。

    apiVersion: config.openshift.io/v1
    kind: Authentication
    metadata:
    # ...
    spec:
      type: OIDC
      webhookTokenAuthenticator: null
      oidcProviders:
      - claimMappings:
          extra:
          - key: example.com/role
            valueExpression: claims.?role.orValue("unknown")
          groups:
            claim: groups
            prefix: 'oidc-groups-test:'
          uid:
            claim: "sub"
          username:
            claim: email
            prefixPolicy: Prefix
            prefix:
              prefixString: 'oidc-user-test:'
        issuer:
          audiences:
          - console-test
          - oc-cli-test
          issuerCertificateAuthority:
            name: keycloak-oidc-ca
          issuerURL: https://keycloak-keycloak.apps.example.com/realms/master
        name: 'keycloak-oidc-server'
        oidcClients:
        - clientID: oc-cli-test
          componentName: cli
          componentNamespace: openshift-console
        - clientID: console-test
          clientSecret:
            name: console-secret
          componentName: console
          componentNamespace: openshift-console
          extraScopes:
            - email
            - profile

    各項目の説明:

    spec.type
    認証タイプを指定します。外部 OIDC アイデンティティープロバイダーを使用することを示すには、OIDC に設定する必要があります。
    spec.webhookTokenAuthenticator
    Webhook トークンのオーセンティケーター設定を指定します。type が OIDC に設定されている場合は null に設定する必要があります。
    spec.oidcProviders
    OIDC プロバイダーの設定を指定します。現在、OIDC プロバイダー設定は 1 つだけ許可されています。
    spec.oidcProviders.claimMappings.extra
    クラスターアイデンティティーの追加属性の構築に使用されるマッピングを指定します。このフィールドは任意です。
    spec.oidcProviders.claimMappings.groups.claim
    クラスターアイデンティティーのグループ名を構築するために使用されるクレームの名前を指定します。
    spec.oidcProviders.claimMappings.uid
    クラスターアイデンティティーの UID を構築するために使用されるクレームマッピングを指定します。このフィールドは任意です。
    spec.oidcProviders.claimMappings.username.claim
    クラスターアイデンティティーのユーザー名を構築するために使用されるクレームの名前を指定します。
    spec.oidcProviders.issuer.audiences
    この認証プロバイダーがトークンを発行するオーディエンスのリストを指定します。
    spec.oidcProviders.issuer.issuerCertificateAuthority.name
    ca-bundle.crt キーが含まれる config map の名前を指定します。設定されていない場合は、代わりにシステム信頼が使用されます。
    spec.oidcProviders.issuer.issuerURL
    トークン発行者の URL を指定します。
    spec.oidcProviders.name
    外部 OIDC プロバイダーの名前を指定します。
    spec.oidcProviders.oidcClients.clientID
    プロバイダーが使用するクライアント ID を指定します。OpenShift CLI (oc) と OpenShift Container Platform Web コンソール用に、それぞれ個別のエントリーを設定します。
    spec.oidcProviders.oidcClients.clientSecret.name
    コンソールクライアントのシークレット値を保存するシークレットの名前を指定します。
    spec.oidcProviders.oidcClients.extraScopes
    要求する追加スコープを指定します。GitLab などの一部のプロバイダーでは、Web コンソールから適切にログインするために追加のスコープが必要になる場合があります。
  6. 終了して変更を保存し、新しい設定を適用します。
  7. クラスターが新しいリビジョンをすべてのノードにロールアウトするまで待ちます。

    1. 次のコマンドを実行して、Kubernetes API server Operator のステータスを確認します。

      $ oc get co kube-apiserver

      出力例

      NAME             VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE   MESSAGE
      kube-apiserver   5.0.0    True        True          False      85m     NodeInstallerProgressing: 2 node are at revision 8; 1 node is at revision 10

      前の例のメッセージは、1 つのノードが新しいリビジョンに進み、2 つのノードがまだ更新されていないことを示しています。クラスターのサイズによっては、新しいリビジョンをすべてのノードにロールアウトするのに 20 分以上かかる場合があります。

    2. 問題をトラブルシューティングするために、Cluster Authentication Operator と kube-apiserver Pod のログでエラーを確認することもできます。

検証

  1. アイデンティティープロバイダーで認証して、OpenShift CLI (oc) にログインできることを確認します。

    1. 次のコマンドを実行してログインします。

      $ oc login --exec-plugin=oc-oidc \
          --issuer-url=https://keycloak-keycloak.apps.example.com/realms/master \
          --client-id=oc-cli-test \
          --extra-scopes=email --callback-port=8080 \
          --oidc-certificate-authority my-directory/ca-bundle.crt

      各項目の説明:

      --exec-plugin
      実行プラグインのタイプを指定します。oc-oidc の値のみが許可されます。
      --issuer-url
      アイデンティティープロバイダーの発行者 URL を指定します。
      --client-id
      OpenShift CLI (oc) のクライアント ID を指定します。
      --oidc-certificate-authority

      ローカルマシン上の ca-bundle.crt ファイルへのパスを指定します。

      出力例

      Please visit the following URL in your browser: http://localhost:8080

    2. ブラウザーで http://localhost:8080 を開きます。
    3. アイデンティティープロバイダーからの認証情報を使用して認証します。

      認証に成功すると、ターミナルに次の出力のようなメッセージが表示されます。

      Logged into "https://api.my-cluster.example.com:6443" as "oidc-user-test:user1@example.com" from an external oidc issuer.
  2. アイデンティティープロバイダーで認証して、OpenShift Container Platform Web コンソールにログインできることを確認します。

    1. ブラウザーでクラスターの Web コンソール URL を開きます。

      ログインのために、アイデンティティープロバイダーにリダイレクトされます。

    2. アイデンティティープロバイダーからの認証情報を使用して認証します。

      正常にログインし、OpenShift Container Platform Web コンソールにリダイレクトされたことを確認します。

9.2.1. OIDC プロバイダーの設定パラメーター

これらのパラメーターを使用して、JWT トークンクレームをクラスターアイデンティティーにマッピングし、認証トークンを検証し、プラットフォームコンポーネントによるアイデンティティープロバイダーの認証を可能にすることで、外部認証用の OIDC プロバイダーを設定します。

次の表には、直接認証に使用できるすべての OIDC プロバイダーパラメーターがリストされています。

表9.1 oidcProviders 設定
パラメーター説明

claimMappings

Kubernetes API サーバーが、アイデンティティープロバイダーによって発行された JSON web token (JWT) 内のクレームをクラスターアイデンティティーに変換するために使用するルールを設定します。

claimMappings.extra

クラスターアイデンティティーの追加属性の構築に使用されるマッピングを設定するためのオプションフィールド。省略すると、クラスターアイデンティティーに追加の属性は存在しなくなります。追加マッピングのキー値は一意である必要があります。最大 32 個の追加属性マッピングを提供できます。

claimMappings.extra.key

追加属性キーとして使用する文字列を指定する必須フィールド。以下の制限が適用されます。

  • キーはドメイン接頭辞パスである必要があります (例: example.org/foo)。
  • キーの長さは 510 文字以内にする必要があります。
  • キーには、ドメインとパスの文字を区切る / 文字が含まれている必要があります。
  • キーは空にできません。
  • キーのドメイン部分 (/ の前の文字列) は、有効な RFC1123 サブドメインである必要があります。
  • 長さは 253 文字以内にする必要があります。
  • 英数字で開始および終了する必要があります。
  • 使用できるのは、小文字の英数字と - または . のみです。
  • 予約済みのドメイン、kubernetes.io、k8s.io、openshift.io のサブドメインは使用できません。
  • キーのパスの部分 (/ の後の文字列) は空であってはならず、少なくとも 1 つの英数字、% 記号でエンコードされたバイト列、-、.、_、~、!、$、&、'、(、)、*、+、,、;、=、および : で構成されている必要があります。
  • キーのドメイン部分の長さは 256 文字以内にする必要があります。

claimMappings.extra.valueExpression

JWT トークンのクレームから追加の属性値を抽出する CEL 式を指定するための必須フィールド。valueExpression フィールドは文字列または文字列配列の値を生成する必要があります。以下の制限が適用されます。

  • ""、[]、および null を返す CEL 式は、追加のマッピングが存在しないものとして扱われます。
  • 配列内の空の文字列値はフィルタリングされます。たとえば、[one, `, `three] は [one, three] になります。
  • CEL 式は、CEL 変数 claims を通じてトークンクレームにアクセスできます。
  • claims は、クレーム名とクレーム値のマップです。たとえば、sub クレーム値には claims.sub としてアクセスできます。
  • ネストされたクレームには、ドット表記 (claims.foo.bar) を使用してアクセスできます。
  • valueExpression 値の長さは 1024 文字以内にする必要があります。
  • valueExpression の値は空にできません。

claimMappings.groups

クラスターアイデンティティーのグループが、アイデンティティープロバイダーによって発行された JWT トークン内のクレームから構築される方法を設定します。クレームの参照時にクレームが JWT トークン内に存在する場合、その値はグループのコンマ区切りリストである必要があります。

claimMappings.groups.claim

オプションのパラメーター。グループマッピングに使用される JWT トークンクレーム。claim または expression の両方ではなく、いずれか一方のみ設定します。文字数: 1-256 文字。

claimMappings.groups.expression

オプションのパラメーター。JWT トークンクレームから文字列または文字列配列を生成する CEL 式。

クレームにアクセスするには、claims 変数を使用します (たとえば、claims.groups や、ネストされたクレームの場合は claims.foo.bar)。

claim または expression の両方ではなく、いずれか一方のみ設定します。文字数: 1-1024 文字。

claimMappings.groups.prefix

JWT クレームをクラスターアイデンティティー属性にマッピングするプロセス中にクラスターアイデンティティー属性に適用される接頭辞を設定します。

claimMappings.uid

クラスターアイデンティティーの UID の構築に使用されるクレームマッピングを設定するためのオプションフィールド。省略すると、ユーザーによる指定なしとみなされ、プラットフォームによってデフォルトが選択されます。デフォルトは、今後変更される可能性があります。現在のデフォルトでは、sub クレームが使用されます。

claimMappings.uid.claim

マッピングで使用される JWT トークンクレームを指定するためのオプションフィールド。このクレームの値は、このマッピングが関連付けられているフィールドに割り当てられます。クレームを指定するには、uid.claim に単一の文字列値を使用します。

claim または expression のいずれかを設定する必要があります。expression を設定する場合は claim を指定しないでください。claim の値は 1 文字以上で、長さが 256 文字以内にする必要があります。

claimMappings.uid.expression

JWT トークンクレームから文字列値を生成する CEL 式を指定するためのオプションフィールド。uid.expression を使用する場合、式の結果は単一の文字列値になる必要があります。

CEL 式は、CEL 変数 claims を通じてトークンクレームにアクセスできます。claims 変数は、クレーム名とクレーム値のマップです。たとえば、claims.sub として sub クレーム値にアクセスできます。ネストされたクレームには、ドット表記を使用してアクセスできます (例: claims.foo.bar)。

claim または expression のいずれかを設定する必要があります。claim が設定されている場合は expression を指定しないでください。expression の値は 1 文字以上で、長さが 1024 文字以内にする必要があります。

claimMappings.username

アイデンティティープロバイダーによって発行された JWT トークン内のクレームからクラスターアイデンティティーのユーザー名を構築する方法を設定します。

claimMappings.username.claim

オプションのパラメーター。ユーザー名のマッピングに使用される JWT トークンクレーム。claim または expression の両方ではなく、いずれか一方のみ設定します。文字数: 1-256 文字。

claimMappings.username.expression

オプションのパラメーター。JWT トークンクレームから文字列値を生成する CEL 式。単一の文字列が生成されなければなりません。

クレームにアクセスするには、claims 変数を使用します (たとえば、claims.email や、ネストされたクレームの場合は claims.foo.bar)。

claim または expression の両方ではなく、いずれか一方のみ設定します。文字数: 1-1024 文字。

claimMappings.username.prefix

JWT クレームの値の先頭に追加する接頭辞を設定します。prefixPolicy が Prefix に設定されている場合は設定する必要があり、それ以外の場合は設定を解除する必要があります。

claimMappings.username.prefix.prefixString

JWT クレームをクラスターアイデンティティーユーザー名属性にマッピングするプロセス中にクラスターアイデンティティー属性に適用される接頭辞を設定します。空の文字列 ("") にすることはできません。

claimMappings.username.prefixPolicy

claim フィールドで指定された JWT クレームの値に接頭辞を適用する方法を設定します。許可される値は Prefix か NoPrefix で、省略 (指定なしまたは空の文字列) することもできます。

Prefix に設定すると、接頭辞フィールドで指定された値が JWT クレームの値の先頭に追加されます。prefixPolicy が Prefix の場合、接頭辞フィールドを設定する必要があります。

NoPrefix に設定すると、JWT クレームの値の先頭に接頭辞は付加されません。

省略すると、指定なしとみなされ、プラットフォームによって選択された接頭辞が適用されます。ただし、これは今後変更される可能性があります。

現時点では、クレームが email 以外の場合、プラットフォームは JWT クレームの値の先頭に {issuerURL}# を追加します。

claimValidationRules

アイデンティティープロバイダーによって発行された JWT トークン内のクレームを検証するために Kubernetes API サーバーが使用するルールを設定します。検証ルールは AND 演算で結合されます。

claimValidationRules.cel

オプションのパラメーター。type が CEL の場合は必須です。expression (評価対象の CEL 式) と message (エラーテキスト) が含まれています。

claimValidationRules.cel.expression

トークンクレームを検証する CEL 式。認証が成功するには、評価結果が true である必要があります。

クレームにアクセスするには、ドット表記を使用して claims 変数を使用します (たとえば、claims.sub または claims.foo.bar)。

制限: 1-1024 文字。

claimValidationRules.cel.message

検証に失敗した際に表示されるエラーメッセージ。文字数制限: 1-256 文字。

claimValidationRules.requiredClaim

Kubernetes API サーバーが、受信 JWT がこのアイデンティティープロバイダーに対して有効かどうかを検証するために使用する、必須のクレームと値を設定します。type が RequiredClaim に設定されている場合は必須です。

claimValidationRules.requiredClaim.claim

必須クレームの名前を設定します。JWT クレームから取得する場合、クレームは文字列の値である必要があります。空の文字列 ("") にすることはできません。

claimValidationRules.requiredClaim.requiredValue

受信した JWT クレームから取得した場合に claim が持っていなければならない値を設定します。JWT クレームの値が一致しない場合、トークンの認証は拒否されます。空の文字列 ("") にすることはできません。

claimValidationRules.type

検証ルールのタイプ。許可される値: RequiredClaim および CEL。

  • RequiredClaim - JWT に必須のクレームと必須の値が含まれているか検証します
  • CEL - JWT を CEL 式に対して検証します

issuer

プラットフォームがアイデンティティープロバイダーと対話する方法と、アイデンティティープロバイダーから発行されたトークンが Kubernetes API サーバーによって評価される方法を設定する必須フィールド。

issuer.audiences

アイデンティティープロバイダーによって発行される JWT トークンの発行先として許可されるオーディエンスを設定する必須フィールド。エントリーの少なくとも 1 つは、JWT トークンの aud クレームと一致する必要があります。少なくとも 1 つのエントリーがなければならず、またエントリー数は 10 以下でなければなりません。

issuer.discoveryURL

オプションのパラメーター。カスタム OIDC 検出エンドポイント URL。有効な HTTPS URL で、かつ issuer.issuerURL とは異なる必要があります。

指定されていない場合、OpenShift Container Platform は標準の OIDC フォーマット ({issuerURL}/.well-known/openid-configuration) を使用して検出 URL を構築します。

issuer.issuerCertificateAuthority

Kubernetes API サーバーが使用する認証局を設定して、検出情報を取得するときにアイデンティティープロバイダーへの接続を検証します。指定しない場合は、システム信頼が使用されます。指定する場合は、config map の data フィールドの ca-bundle.crt キーの下にある PEM エンコードされた CA 証明書が含まれる openshift-config namespace の config map を参照する必要があります。

issuer.issuerCertificateAuthority.name

参照される config map の名前。

issuer.issuerURL

アイデンティティープロバイダーによってトークンを発行するために使用される URL を設定します。Kubernetes API サーバーは、JWT の iss クレームを設定されたアイデンティティープロバイダーの issuerURL と照合することで、認証トークンを処理する方法を決定します。これは必須フィールドであり、https:// スキームを使用する必要があります。

name

アイデンティティープロバイダーに関連付けられた、人間が判読できる一意の識別子を設定する必須フィールド。複数のアイデンティティープロバイダーを区別するために使用され、トークンの検証や認証メカニズムには影響しません。空の文字列 ("") にすることはできません。

oidcClients

クラスター上のプラットフォームクライアントがアイデンティティープロバイダーからトークンを要求する方法を設定します。エントリーは 20 以下でなければならず、エントリーには一意の namespace/名前のペアが必要です。

oidcClients.clientID

プラットフォームコンポーネントがアイデンティティープロバイダーへの認証要求に使用する、アイデンティティープロバイダーからのクライアント ID を設定します。プラットフォームコンポーネントがアイデンティティープロバイダーを認証モードとして使用するためには、アイデンティティープロバイダーがこの識別子を受け入れる必要があります。空の文字列 ("") にすることはできません。

oidcClients.clientSecret

アイデンティティープロバイダーへの認証要求を行うときにプラットフォームコンポーネントによって使用されるクライアントシークレットを設定します。

指定しない場合、アイデンティティープロバイダーへの認証要求時にクライアントシークレットは使用されません。

指定すると、.data フィールドの clientSecret キーにクライアントシークレットが含まれる openshift-config namespace 内のシークレットが参照されます。クライアントシークレットは、アイデンティティープロバイダーへの認証要求を行うときに使用されます。

パブリッククライアントにクライアントシークレットは必要ありませんが、プライベートクライアントにはアイデンティティープロバイダーと連携するためにクライアントシークレットが必要です。

oidcClients.clientSecret.name

参照されるシークレットの名前。

oidcClients.componentName

認証モードとしてアイデンティティープロバイダーを使用するように設定されているプラットフォームコンポーネントの名前を指定します。一意の識別子として、componentNamespace と組み合わせて使用されます。空の文字列 ("") にはできず、長さは 256 文字以下でなければなりません。

oidcClients.componentNamespace

認証モードとしてアイデンティティープロバイダーを使用するように設定されているプラットフォームコンポーネントが実行されている namespace を指定します。一意の識別子として、componentName と組み合わせて使用されます。空の文字列 ("") にはできず、長さは 63 文字以下でなければなりません。

oidcClients.extraScopes

アイデンティティープロバイダーへの認証要求を行うときに、プラットフォームコンポーネントによって要求される追加のスコープを設定します。標準の OIDC スコープ以外の特定のスコープを要求する必要があるクレームマッピングを設定している場合、この機能が役立ちます。省略すると、追加のスコープは要求されません。

userValidationRules

オプションのパラメーター。認証済みトークンから作成されたユーザーオブジェクトの検証ルール。すべてのルールに合格する必要があります (AND 操作)。

各ルールには、expression (true 評価が必要) と message (エラーテキスト) が含まれます。

user 変数を使用してユーザーにアクセス: user.username (文字列)、user.groups (配列)、user.uid (文字列)、user.extra (マップ)。

userValidationRules[].expression

必須。ユーザーオブジェクトを検証する CEL 式。認証が成功するには、評価結果が true である必要があります。制限: 1-1024 文字、ブール値の結果。

userValidationRules[].message

必須。検証に失敗した際に表示されるエラーメッセージ。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

Red Hat ドキュメントについて

Legal Notice

Theme

© 2026 Red Hat
トップに戻る