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


認証用のトークン発行に外部 OIDC アイデンティティープロバイダーを直接使用するように OpenShift Container Platform を設定できます。

重要

OIDC アイデンティティープロバイダーを使用した直接認証は、テクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。

Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。

前提条件

  • TechPreviewNoUpgrade 機能セットが有効化されている。
  • 外部認証プロバイダーを設定した。

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

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

手順

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

    $ oc create secret generic console-secret \
        --from-literal=clientSecret=<secret_value> \
    1
    
        -n openshift-config
    Copy to Clipboard Toggle word wrap
    1
    <secret_value> は、アイデンティティープロバイダーの console-test クライアントのシークレット値に置き換えます。
  3. オプション: 次のコマンドを実行して、プロバイダーの認証局バンドルを含む config map を作成します。

    $ oc create configmap keycloak-oidc-ca --from-file=ca-bundle.crt=my-directory/ca-bundle.crt \
    1
    
        -n openshift-config
    Copy to Clipboard Toggle word wrap
    1
    プロバイダーの ca-bundle.crt ファイルへのパスを指定します。
  4. 次のコマンドを実行して認証設定を編集します。

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

    apiVersion: config.openshift.io/v1
    kind: Authentication
    metadata:
    # ...
    spec:
      oidcProviders: 
    1
    
      - claimMappings:
          groups:
            claim: groups 
    2
    
            prefix: 'oidc-groups-test:'
          username:
            claim: email 
    3
    
            prefixPolicy: Prefix
            prefix:
              prefixString: 'oidc-user-test:'
        issuer:
          audiences: 
    4
    
          - console-test
          - oc-cli-test
          issuerCertificateAuthority:
            name: keycloak-oidc-ca 
    5
    
          issuerURL: https://keycloak-keycloak.apps.example.com/realms/master 
    6
    
        name: 'keycloak-oidc-server' 
    7
    
        oidcClients:
        - clientID: oc-cli-test 
    8
    
          componentName: cli
          componentNamespace: openshift-console
        - clientID: console-test 
    9
    
          clientSecret:
            name: console-secret 
    10
    
          componentName: console
          componentNamespace: openshift-console
      type: OIDC 
    11
    
      webhookTokenAuthenticator: null 
    12
    Copy to Clipboard Toggle word wrap
    1
    OIDC プロバイダーの設定。現在、OIDC プロバイダー設定は 1 つだけ許可されています。
    2
    クラスターアイデンティティーのグループ名を構築するために使用されるクレームの名前。
    3
    クラスターアイデンティティーのユーザー名を構築するために使用されるクレームの名前。
    4
    この認証プロバイダーがトークンを発行するオーディエンスのリスト。
    5
    ca-bundle.crt キーが含まれる config map の名前。設定されていない場合は、代わりにシステム信頼が使用されます。
    6
    トークン発行者の URL。
    7
    外部 OIDC プロバイダーの名前。
    8
    プロバイダーが OpenShift CLI (oc) に使用するクライアント ID。
    9
    プロバイダーが OpenShift Container Platform Web コンソールに使用するクライアント ID。
    10
    コンソールクライアントのシークレット値を保存するシークレットの名前。
    11
    外部 OIDC アイデンティティープロバイダーを使用することを示すには、OIDC に設定する必要があります。
    12
    typeOIDC に設定されている場合は null に設定する必要があります。

    使用可能なすべてのパラメーターの詳細は、「OIDC プロバイダー設定パラメーター」を参照してください。

  6. 終了して変更を保存し、新しい設定を適用します。
  7. クラスターが新しいリビジョンをすべてのノードにロールアウトするまで待ちます。

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

      $ oc get co kube-apiserver
      Copy to Clipboard Toggle word wrap

      出力例

      NAME             VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE   MESSAGE
      kube-apiserver   4.19.0    True        True          False      85m     NodeInstallerProgressing: 2 node are at revision 8; 1 node is at revision 10
      Copy to Clipboard Toggle word wrap

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

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

検証

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

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

      $ oc login --exec-plugin=oc-oidc \
      1
      
          --issuer-url=https://keycloak-keycloak.apps.example.com/realms/master \
      2
      
          --client-id=oc-cli-test \
      3
      
          --extra-scopes=email --callback-port=8080 \
          --oidc-certificate-authority my-directory/ca-bundle.crt 
      4
      Copy to Clipboard Toggle word wrap
      1
      exec プラグインタイプとして oc-oidc を指定します。oc-oidc の値のみが許可されます。
      2
      アイデンティティープロバイダーの発行者 URL を指定します。
      3
      OpenShift CLI (oc) のクライアント ID を指定します。
      4
      ローカルマシン上の ca-bundle.crt ファイルへのパスを指定します。

      出力例

      Please visit the following URL in your browser: http://localhost:8080
      Copy to Clipboard Toggle word wrap

    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.
      Copy to Clipboard Toggle word wrap
  2. アイデンティティープロバイダーで認証して、OpenShift Container Platform Web コンソールにログインできることを確認します。

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

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

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

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

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

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

Expand
表8.1 oidcProviders 設定
パラメーター説明

claimMappings

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

claimMappings.groups

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

claimMappings.groups.claim

このマッピングに関連付けられたクラスターアイデンティティーフィールドに値が割り当てられる JWT トークンクレームを設定します。

claimMappings.groups.prefix

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

claimMappings.username

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

claimMappings.username.claim

このマッピングに関連付けられたクラスターアイデンティティーフィールドに値が割り当てられる JWT トークンクレームを設定します。

claimMappings.username.prefix

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

claimMappings.username.prefix.prefixString

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

claimMappings.username.prefixPolicy

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

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

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

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

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

claimValidationRules

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

claimValidationRules.requiredClaim

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

claimValidationRules.requiredClaim.claim

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

claimValidationRules.requiredClaim.requiredValue

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

claimValidationRules.type

検証ルールのタイプを設定します。許可される値は RequiredClaim で、省略 (指定されていないか空の文字列) することもできます。

RequiredClaim に設定すると、Kubernetes API サーバーは、受信 JWT に必要なクレームが含まれていること、およびその値が必要な値と一致することを検証するように設定されます。デフォルト値は RequiredClaim です。

issuer

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

issuer.audiences

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

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 スコープを超えて特定のスコープを要求するクレームマッピングを設定した場合に役立ちます。省略すると、追加のスコープは要求されません。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

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

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

会社概要

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

Theme

© 2025 Red Hat