7.9. OpenID Connect アイデンティティープロバイダーの設定
oidc
アイデンティティープロバイダーを、Authorization Code Flowを使用して OpenID Connect アイデンティティープロバイダーと統合するように設定します。
OpenShift Container Platform の OpenID Connect アイデンティティープロバイダーとして Red Hat シングルサインオンを設定できます。
OpenShift Container Platform の認証 Operator では、設定済みの OpenID Connect アイデンティティープロバイダーが OpenID Connect Discovery 仕様を実装する必要があります。
ID Token
および UserInfo
の復号化はサポートされていません。
デフォルトで、openid
の範囲が要求されます。必要な場合は、extraScopes
フィールドで追加の範囲を指定できます。
要求は、OpenID アイデンティティープロバイダーから返される JWT id_token
から読み取られ、指定される場合は UserInfo
URL によって返される JSON から読み取られます。
1 つ以上の要求をユーザーのアイデンティティーを使用するように設定される必要があります。標準のアイデンティティー要求は sub
になります。
また、どの要求をユーザーの推奨ユーザー名、表示名およびメールアドレスとして使用するか指定することができます。複数の要求が指定されている場合、値が入力されている最初の要求が使用されます。標準のアイデンティティー要求は以下の通りです。
| 「subject identifier」の省略形です。 発行側のユーザーのリモートアイデンティティーです。 |
|
ユーザーのプロビジョニング時に優先されるユーザー名です。 |
| メールアドレス。 |
| 表示名。 |
詳細は、OpenID claim のドキュメント を参照してください。
OpenID Connect アイデンティティープロバイダーを使用するには、<master>/oauth/token/request
を使用してトークンを取得し、コマンドラインツールで使用する必要があります。
7.9.1. OpenShift Container Platform のアイデンティティープロバイダーについて
デフォルトでは、kubeadmin
ユーザーのみがクラスターに存在します。アイデンティティープロバイダーを指定するには、アイデンティティープロバイダーを記述し、これをクラスターに追加するカスタムリソースを作成する必要があります。
/
、:
、および %
を含む OpenShift Container Platform ユーザー名はサポートされません。
7.9.2. シークレットの作成
アイデンティティープロバイダーは openshift-config
namespace で OpenShift Container Platform シークレットを使用して、クライアントシークレット、クライアント証明書およびキーをこれに組み込みます。
以下のコマンドを使用して、OpenShift Container Platform シークレットを定義できます。
$ oc create secret generic <secret_name> --from-literal=clientSecret=<secret> -n openshift-config
以下のコマンドを実行して、証明書ファイルなどのファイルの内容を含む OpenShift Container Platform シークレットを定義できます。
$ oc create secret generic <secret_name> --from-file=/path/to/file -n openshift-config
7.9.3. ConfigMap の作成
アイデンティティープロバイダーは、openshift-config
namespace で OpenShift Container Platform ConfigMap を使用し、認証局バンドルをこれに組み込みます。これらは、主にアイデンティティープロバイダーで必要な証明書バンドルを組み込むために使用されます。
以下のコマンドを使用して、認証局が含まれる OpenShift Container Platform ConfigMap を定義します。認証局は ConfigMap の
ca.crt
キーに保存する必要があります。$ oc create configmap ca-config-map --from-file=ca.crt=/path/to/ca -n openshift-config
7.9.4. 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 issuer: https://www.idp-issuer.com 6
- 1
- このプロバイダー名はアイデンティティー要求の値にプレフィックスとして付加され、アイデンティティー名が作成されます。これはリダイレクト URL を作成するためにも使用されます。
- 2
- このプロバイダーのアイデンティティーとユーザーオブジェクト間にマッピングが確立される方法を制御します。
- 3
- OpenID プロバイダーに登録されているクライアントのクライアント ID です。このクライアントは
https://oauth-openshift.apps.<cluster-name>.<cluster-domain>/oauth2callback/<idp-provider-name>
にリダイレクトすることを許可されている必要があります。 - 4
- クライアントシークレットを含む OpenShift Container Platform シークレットへの参照。
- 5
- アイデンティティーとして使用する要求の一覧です。空でない最初の要求が使用されます。1 つ以上の要求が必要になります。一覧表示される要求のいずれにも値がないと、認証は失敗します。たとえば、これは、ユーザーのアイデンティティーとして、返される
id_token
のsub
要求の値を使用します。 - 6
- OpenID 仕様に記述される発行者 ID。クエリーまたはフラグメントコンポーネントのない
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 issuer: https://www.idp-issuer.com
- 1
- オプション: 設定済みの URL のサーバー証明書を検証するために使用する PEM エンコードされた認証局バンドルを含む OpenShift Container Platform ConfigMap への参照。
- 2
- 認可トークン要求時に
openid
の範囲のほかに要求する範囲のオプションの一覧です。 - 3
- 認可トークン要求に追加する追加パラメーターのオプションのマップです。
- 4
- このアイデンティティーのユーザーをプロビジョニングする際に推奨ユーザー名として使用される要求の一覧です。空でない最初の要求が使用されます。
- 5
- 表示名として使用する要求の一覧です。空でない最初の要求が使用されます。
- 6
- メールアドレスとして使用する要求の一覧です。空でない最初の要求が使用されます。
7.9.5. アイデンティティープロバイダーのクラスターへの追加
クラスターのインストール後に、アイデンティティープロバイダーをそのクラスターに追加し、ユーザーの認証を実行できるようにします。
前提条件
- OpenShift Container Platform クラスターを作成します。
- アイデンティティープロバイダーのカスタムリソース (CR) を作成します。
- 管理者としてログインしている必要があります。
手順
定義された 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
この場合は、この警告を無視しても問題ありません。OAuth サーバーからトークンを取得します。
kubeadmin
ユーザーが削除されている限り、oc login
コマンドは、トークンを取得できる Web ページにアクセスする方法についての情報を提供します。Web コンソールからこのページにアクセスするには、(?) Help
Command Line Tools Copy Login Commandに移動します。 認証するトークンを渡して、クラスターにログインします。
$ oc login --token=<token>
注記このアイデンティティープロバイダーは、ユーザー名とパスワードを使用してログインすることをサポートしません。
ユーザーが正常にログインされていることを確認し、ユーザー名を表示します。
$ oc whoami
7.9.6. Web コンソールを使用したアイデンティティープロバイダーの設定
CLI ではなく Web コンソールを使用してアイデンティティープロバイダー (IDP) を設定します。
前提条件
- クラスター管理者として Web コンソールにログインしている必要があります。
手順
-
Administration
Cluster Settings に移動します。 - Global Configuration タブで、OAuth をクリックします。
- Identity Providers セクションで、Add ドロップダウンメニューからアイデンティティープロバイダーを選択します。
既存の IDP を上書きすることなく、Web コンソールで複数の IDP を指定することができます。