|
この文書は自動機械翻訳技術を使用して翻訳されています。 正確な翻訳を提供するように努めておりますが、翻訳された内容の完全性、正確性、信頼性については一切保証いたしません。 相違がある場合は、元の英語版 英語 が優先され、正式なテキストとなります。 |
RancherをOIDCプロバイダーとして設定します。
Rancherは他のアプリケーションのためのOpenID Connect (OIDC) アイデンティティプロバイダー (IdP) として機能します。これにより、Rancherの集中認証とロールベースのアクセス制御 (RBAC) を使用して、外部のサードパーティアプリケーションへのアクセスを管理できます。これは、Rancherコンポーネント全体でシングルサインオン (SSO) を有効にするために使用できます。例えば、 SUSE ObservabilityのOIDCプロバイダーの設定に関するドキュメントを参照してください。
|
OIDCはOAuth2のスーパーセットであるため、完全なOIDCを必要とせずにRancherをOAuth2サーバーとして使用できます。これにより、`rancher-ai-mcp`サーバーなどのOAuth2の側面を利用するクライアントが完全にサポートされます。 |
Rancher OIDCプロバイダーは、OAuth2およびOIDCのためのアクセストークンを発行し、これをRancherとの認証に使用できる標準のBearerトークン(RFC6750に準拠)として利用できます。以前は、IDトークンのみがユーザーになりすますために使用できました。
OIDCプロバイダーは、`oidc-provider`機能フラグで有効にできます。このフラグがオンのとき、次のエンドポイントが利用可能です:
-
https://{rancher-url}/oidc/authorize:このエンドポイントは認証フローを開始します。ユーザーがすでにRancherにログインしている場合、認可コードを返します。そうでない場合、ユーザーはRancherのログインページにリダイレクトされます。認可コードと関連するリクエスト情報は、セッションシークレットに安全に保存されます。コードは一度限りの使用で、10分後に期限切れになります。 -
https://{rancher-url}/oidc/token:このエンドポイントは、認可コードを`id_token`、access_token、および`refresh_token`と交換します。 -
https://{rancher-url}/oidc/.well-known/openid-configuration:このエンドポイントは、エンドポイントURL、サポートされているスコープ、クレーム、およびその他の関連詳細を含むOIDCプロバイダーの設定を含むJSONドキュメントを返します。 -
https://{rancher-url}/oidc/userinfo:このエンドポイントは、認証されたユーザーに関する情報を提供します。
OIDCプロバイダーはPKCEを使用したOIDC認証コードフローをサポートしています。
OIDCクライアントの設定
`OIDCClient`は、Rancherに対して認証を行う外部アプリケーションを表します。クライアントアプリケーションを登録するには、`OIDCClient`カスタムリソースを作成する必要があります。
設定フィールド
`OIDCClient`マニフェストを定義する際には、CRD検証を通過させるために特定のフィールドを含める必要があります。
-
spec.tokenExpirationSeconds:このフィールドは厳密に必要であり、省略すると検証エラーが発生します。これはアクセストークンの有効期限を定義します。 -
spec.refreshTokenExpirationSeconds:このフィールドも厳密に必要であり、省略すると検証エラーが発生します。これはリフレッシュトークンの有効期限を定義します。 -
scopes(オプション):このフィールドでは、クライアントが要求できるスコープを制限することができます。明示的に設定されていない場合、許可されるスコープは`openid`、profile、および`offline_access`にデフォルト設定されます。
OIDCクライアントマニフェストの例
以下は`OIDCClient`設定の例です:
|
リソースを正常に適用するには、有効期限フィールドを含める必要があります。 |
apiVersion: management.cattle.io/v3
kind: OIDCClient
metadata:
name: example-client
spec:
description: "Example OIDC Client"
redirectUris:
- "https://example-app.com/callback"
tokenExpirationSeconds: 3600
refreshTokenExpirationSeconds: 86400
# scopes:
# - openid
# - profile
# - offline_access
この設定をファイルに保存し(例:oidcclient.yaml)、Rancherのローカルクラスタに適用します:
kubectl apply -f oidcclient.yaml
Rancherは各`OIDCClient`のためにクライアントIDとクライアントシークレットを自動的に生成します。リソースが作成されると、RancherはクライアントIDでステータスフィールドを埋めます:
apiVersion: management.cattle.io/v3
kind: OIDCClient
metadata:
name: oidc-client-test
spec:
tokenExpirationSeconds: 600 # expiration of the id_token and access_token
refreshTokenExpirationSeconds: 3600 # expiration of the refresh_token
redirectURIs:
- "https://myredirecturl.com" # replace with your redirect url
scopes: # Optional: Restricts the scopes the client can request. Defaults to openid, profile, and offline_access if omitted.
- openid
- profile
- offline_access
status:
clientID: client-xxx
clientSecrets:
client-secret-1:
createdAt: "xxx"
lastFiveCharacters: xxx
Rancherは各`OIDCClient`リソースのために、`cattle-oidc-client-secrets`ネームスペースにKubernetes `Secret`を自動的に生成します。シークレットの名前は`OIDCClient`クライアントIDと一致します。最初は、`Secret`には単一のクライアントシークレットが含まれています。
クライアントシークレットを取得するには:
kubectl get secret client-xxx -n cattle-oidc-client-secrets -o jsonpath="{.data.client-secret-1}" | base64 -d
出力:
secret-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
このクライアントIDとクライアントシークレットをOIDCクライアントアプリケーションで使用できます。
クライアントシークレットの管理
`OIDCClient`ごとに複数のクライアントシークレットを管理できます。シークレット操作を実行するには、`OIDCClient`リソースにアノテーションを使用します:
-
作成:`cattle.io/oidc-client-secret-create: true`アノテーションを追加すると、新しいクライアントシークレットが作成されます。
-
削除:`cattle.io/oidc-client-secret-remove:client-secret-1`アノテーションを追加すると、指定されたクライアントシークレットが削除されます。
-
再生成:`cattle.io/oidc-client-secret-regenerate:client-secret-1`アノテーションを追加すると、指定されたクライアントシークレットが再生成されます。
署名キー
Rancherは、id_token、access_token、および`refresh_token`トークンの署名用のデフォルトキーペアを、`cattle-system`ネームスペースの`oidc-signing-key`という`Secret`に作成します。署名には1つのキーのみが使用されますが、キーのローテーション時の中断を避けるため、複数の公開キーがJWKSエンドポイントで返されることがあります。
中断のないローテーション
署名用の新しいキーペアを作成するには、新しいキーペアを手動で作成し、それを oidc-signing-key Secret に追加する必要があります。
例:
apiVersion: v1
kind: Secret
metadata:
name: oidc-signing-key
type: Opaque
data:
key2.pem: <base64-encoded-new-private-key>
key1.pub: <base64-encoded-old-public-key>
key2.pub: <base64-encoded-new-public-key>
Rancherは key2.pem を使用してトークンを署名し、JWKSエンドポイントは key1.pub と key2.pub の両方を提供します。これにより、既存のトークン検証を中断することなく、key1 から key2 へのスムーズなキーのローテーションが保証されます。シークレットには同時に1つのプライベートキー(.pem)しか保存できず、各キーペアは同じベース名を共有し、サフィックスのみが異なります:プライベートキーは.pem、公開キーは.pubです。