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 つあります。

次のステップ