Azure Kubernetes Service (AKS) で OpenID Connect プロバイダーを作成する
OpenID Connect (OIDC) は、OAuth 2.0 の認可プロトコルを Microsoft Entra ID によって発行された別の認証プロトコルとして使用できるように拡張したものです。 OIDC を使用すると、Azure Kubernetes Service (AKS) クラスター上で、ID トークン と呼ばれるセキュリティ トークンを使用して OAuth 対応アプリケーション間でシングル サインオン (SSO) を有効にできます。 AKS クラスターを使用すると、OpenID Connect (OIDC) Issuer を有効にすることができます。これにより、Microsoft Entra ID またはその他のクラウド プロバイダー ID およびアクセス管理プラットフォームで API サーバーの公開署名キーを検出できます。
AKS では、キーは定期的に自動ローテーションされます。 待ちたくない場合は、キーを手動ですぐにローテーションできます。 OIDC プロバイダーによって発行されるトークンの最大有効期間は 1 日です。
警告
既存のクラスターで OIDC Issuer を有効にすると、現在のサービス アカウント トークンの発行者が新しい値に変更され、API サーバーが再起動されるため、ダウン タイムが発生する場合があります。 OIDC Issuer を有効にした後、サービス トークンを使っているアプリケーション ポッドが失敗状態のままになる場合は、ポッドを手動で再起動することをお勧めします。
この記事では、クラスターの OIDC Issuer を作成、更新、管理する方法について説明します。
重要
クラスターで OIDC 発行者を有効にした後、無効にすることはサポートされていません。
重要
トークンは定期的に更新する必要があります。 SDKを使用する場合、ローテーションは自動的に行われます。それ以外の場合は、手動で 24 時間ごとにトークンを更新する必要があります。
前提条件
- Azure CLI バージョン 2.42.0 以降。 バージョンを確認するには
az --version
を実行します。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。 - AKS では、バージョン 1.22 以降の OIDC Issuer がサポートされています。
OIDC Issuer を使用して AKS クラスターを作成する
OIDC Issuer を使うには、az aks create コマンドと --enable-oidc-issuer
パラメーターを使って、AKS クラスターを作成します。 次の例では、myResourceGroup 内の 1 つのノードで myAKSCluster という名前のクラスターを作成します。
az aks create -g myResourceGroup -n myAKSCluster --node-count 1 --enable-oidc-issuer
OIDC Issuer を備えた AKS クラスターを更新する
OIDC Issuer (プレビュー) を使うには、az aks update コマンドと --enable-oidc-issuer
パラメーターを使って、AKS クラスターを更新します。 次の例では、myAKSCluster という名前のクラスターを更新します。
az aks update -g myResourceGroup -n myAKSCluster --enable-oidc-issuer
OIDC 発行者 URL を表示する
OIDC Issuer の URL を取得するには、az aks show コマンドを実行します。 クラスター名とリソース グループ名の既定値を置き換えてください。
az aks show -n myAKScluster -g myResourceGroup --query "oidcIssuerProfile.issuerUrl" -otsv
既定では、発行者はベース URL https://{region}.oic.prod-aks.azure.com
を使用するように設定されています。ここで {region}
の値は、AKS クラスターがデプロイされている場所と一致します。
OIDC キーをローテーションする
OIDC キーをローテーションするには、az aks oidc-issuer コマンドを実行します。 クラスター名とリソース グループ名の既定値を置き換えてください。
az aks oidc-issuer rotate-signing-keys -n myAKSCluster -g myResourceGroup
重要
キーをローテーションすると、古いキー (key1) は 24 時間後に期限切れになります。 つまり、24 時間経過するまでは、古いキー (key1) と新しいキー (key2) の両方が有効になっています。 古いキー (key1) をすぐに無効にしたい場合は、OIDC キーを 2 回ローテーションし、投影されたサービス アカウント トークンを使用してポッドを再起動する必要があります。 その後は、key2 と key3 が有効になり、key1 は無効になります。
OIDC キーを確認する
OIDC 発行者 URL を取得する
OIDC Issuer の URL を取得するには、az aks show コマンドを実行します。 クラスター名とリソース グループ名の既定値を置き換えてください。
az aks show -n myAKScluster -g myResourceGroup --query "oidcIssuerProfile.issuerUrl" -otsv
出力は次のようになります。
https://eastus.oic.prod-aks.azure.com/00000000-0000-0000-0000-000000000000/00000000-0000-0000-0000-000000000000/
既定では、発行者はベース URL https://{region}.oic.prod-aks.azure.com/{uuid}
を使用するように設定されています。ここで {region}
の値は、AKS クラスターがデプロイされている場所と一致します。 値 {uuid}
は、不変であるクラスターごとにランダムに生成される guid である OIDC キーを表します。
検出ドキュメントを取得する
検出ドキュメントを取得するには、URL https://(OIDC issuer URL).well-known/openid-configuration
をコピーしてブラウザーで開きます。
出力は次のようになります。
{
"issuer": "https://eastus.oic.prod-aks.azure.com/00000000-0000-0000-0000-000000000000/00000000-0000-0000-0000-000000000000/",
"jwks_uri": "https://eastus.oic.prod-aks.azure.com/00000000-0000-0000-0000-000000000000/00000000-0000-0000-0000-000000000000/openid/v1/jwks",
"response_types_supported": [
"id_token"
],
"subject_types_supported": [
"public"
],
"id_token_signing_alg_values_supported": [
"RS256"
]
}
JWK セット ドキュメントを取得する
JWK セット ドキュメントを取得するには、検出ドキュメントから jwks_uri
をコピーし、ブラウザーのアドレス バーに貼り付けます。
出力は次のようになります。
{
"keys": [
{
"use": "sig",
"kty": "RSA",
"kid": "xxx",
"alg": "RS256",
"n": "xxxx",
"e": "AQAB"
},
{
"use": "sig",
"kty": "RSA",
"kid": "xxx",
"alg": "RS256",
"n": "xxxx",
"e": "AQAB"
}
]
}
キーのローテーション中、検出ドキュメントには他のキーが 1 つあります。
次のステップ
- フェデレーション ID 資格情報によってクラスター上のアプリケーションと外部 ID プロバイダーの間に信頼関係が作成される方法については、アプリと外部 ID プロバイダー間の信頼関係の作成の構成に関する記事を参照してください。
- Microsoft Entra ワークロード ID (プレビュー) を確認します。 この認証方法は Kubernetes のネイティブ機能と統合され、アプリケーションに代わって任意の外部 ID プロバイダーとフェデレーションされます。
- ネットワーク ポリシー エンジンを使用し、Kubernetes ネットワーク ポリシーを作成して AKS の ポッド間のトラフィック フローを制御する方法については、ポッドのネットワーク トラフィックのセキュリティ保護に関する記事を参照してください。