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 発行者を有効にすると、現在のサービス アカウント トークンの発行者が新しい値に変更され、API サーバーが再起動されるため、ダウン タイムが発生する場合があります。 OIDC 発行者を有効にした後、サービス トークンを使っているアプリケーション ポッドが失敗状態のままになる場合は、ポッドを手動で再起動することをお勧めします。
この記事では、クラスターの OIDC 発行者を作成、更新、管理する方法について説明します。
重要
クラスターで OIDC 発行者を有効にした後は、無効にすることはできません。
トークンは定期的に更新する必要があります。 SDK を使用する場合、ローテーションは自動的に行われます。 それ以外の場合は、24 時間ごとにトークンを手動で更新する必要があります。
前提条件
- Azure CLI バージョン 2.42.0 以降。 バージョンを確認するには
az --version
を実行します。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。 - AKS では、バージョン 1.22 以降の OIDC 発行者がサポートされています。
OIDC 発行者を使用して AKS クラスターを作成する
OIDC 発行者を有効にするには、az aks create コマンドと --enable-oidc-issuer
パラメーターを使って、AKS クラスターを作成できます。 次の例では、myResourceGroup 内の 1 つのノードで myAKSCluster という名前のクラスターを作成します。
az aks create \
--resource-group myResourceGroup \
--name myAKSCluster \
--node-count 1 \
--enable-oidc-issuer \
--generate-ssh-keys
OIDC 発行者を備えた AKS クラスターを更新する
OIDC 発行者を有効にするには、az aks update コマンドと --enable-oidc-issuer
パラメーターを使って、AKS クラスターを更新できます。 次の例では、myAKSCluster という名前のクラスターを更新します。
az aks update --resource-group myResourceGroup --name myAKSCluster --enable-oidc-issuer
OIDC 発行者 URL を表示する
OIDC 発行者 URL を取得するには、az aks show コマンドを実行します。 クラスター名とリソース グループ名の既定値を置き換えてください。
az aks show --name myAKScluster --resource-group myResourceGroup --query "oidcIssuerProfile.issuerUrl" -o tsv
既定では、発行者はベース URL https://{region}.oic.prod-aks.azure.com
を使用するように設定されています。ここで {region}
の値は、AKS クラスターがデプロイされている場所と一致します。
OIDC キーをローテーションする
OIDC キーをローテーションするには、az aks oidc-issuer コマンドを実行します。 クラスター名とリソース グループ名の既定値を置き換えてください。
az aks oidc-issuer rotate-signing-keys --name myAKSCluster --resource-group myResourceGroup
重要
キーをローテーションすると、古いキー (key1) は 24 時間後に期限切れになります。 ローテーション後 24 時間経過するまでは、古いキー (key1) と新しいキー (key2) の両方が有効になっています。 古いキー (key1) をすぐに無効にしたい場合は、OIDC キーを 2 回ローテーションし、投影されたサービス アカウント トークンを使用してポッドを再起動する必要があります。 このプロセスでは、key2 と key3 は有効であり、key1 は無効です。
OIDC キーを確認する
OIDC 発行者 URL を取得する
OIDC 発行者 URL を取得するには、az aks show コマンドを実行します。 クラスター名とリソース グループ名の既定値を置き換えてください。
az aks show --name myAKScluster --resource-group myResourceGroup --query "oidcIssuerProfile.issuerUrl" -o tsv
出力は次のようになります。
https://eastus.oic.prod-aks.azure.com/00000000-0000-0000-0000-000000000000/11111111-1111-1111-1111-111111111111/
既定では、発行者はベース URL https://{region}.oic.prod-aks.azure.com/{tenant_id}/{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 の ポッド間のトラフィック フローを制御する方法については、ポッドのネットワーク トラフィックのセキュリティ保護に関する記事を参照してください。
Azure Kubernetes Service