Azure Kubernetes Service (AKS) で Microsoft Entra ワークロード ID を使う

Azure Kubernetes Services (AKS) クラスターにデプロイされたワークロードでは、Azure Key Vault や Microsoft Graph などの Microsoft Entra で保護されたリソースにアクセスするには、Microsoft Entra アプリケーションの資格情報またはマネージド ID が必要です。 Microsoft Entra ワークロード ID は、Kubernetes にネイティブな機能と統合され、外部 ID プロバイダーとフェデレーションされます。

Microsoft Entra ワークロード ID では、サービス アカウント トークン ボリューム プロジェクションを使って、ポッドで Kubernetes ID (つまりサービス アカウント) を使用できるようにします。 Kubernetes トークンが発行され、OIDC フェデレーションにより、Kubernetes アプリケーションは注釈付きのサービス アカウントに基づいて Microsoft Entra ID を使って Azure リソースに安全にアクセスできるようになります。

Microsoft Entra ワークロード ID は、アプリケーションの登録を使っている場合は、Azure ID クライアント ライブラリMicrosoft Authentication Library (MSAL) コレクションで特に適切に機能します。 ワークロードでは、これらのライブラリのいずれかを使用して、Azure クラウド リソースのシームレスな認証とアクセスを行うことができます。

この記事は、この新しい認証機能を理解し、プロジェクト戦略や Microsoft Entra ポッドマネージド ID からの移行の可能性を計画するために使用できるオプションを確認するのに役立ちます。

Note

すべての手順を手動で構成する代わりに、Service Connector と呼ばれる別の実装があり、いくつかの手順を自動的に構成できます。 関連項目: Service Connector とは

依存関係

  • AKS は、バージョン 1.22 以降で Microsoft Entra ワークロード ID をサポートしています。
  • Azure CLI バージョン 2.47.0 以降。 az --version を実行してバージョンを見つけ、az upgrade を実行してバージョンをアップグレードします。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。

Azure ID クライアント ライブラリ

Azure ID クライアント ライブラリで、次のいずれかの方法を選択します。

  • WorkloadIdentityCredential を使用しようとしている DefaultAzureCredential を使用します。
  • WorkloadIdentityCredential を含む ChainedTokenCredential インスタンスを作成します。
  • WorkloadIdentityCredential を直接使用します。

次の表は、各言語のクライアント ライブラリに必要な最小 のパッケージ バージョンを示しています。

エコシステム ライブラリ 最小バージョン
.NET Azure.Identity 1.9.0
C++ azure-identity-cpp 1.6.0
Go azidentity 1.3.0
Java azure-identity 1.9.0
Node.js @azure/identity 3.2.0
Python azure-identity 1.13.0

次のコード サンプルでは、DefaultAzureCredential が使用されています。 この資格情報の種類では、Azure Workload Identity によって挿入された環境変数を使用して、Webhook を変更して Azure Key Vault で認証します。

using Azure.Identity;
using Azure.Security.KeyVault.Secrets;

string keyVaultUrl = Environment.GetEnvironmentVariable("KEYVAULT_URL");
string secretName = Environment.GetEnvironmentVariable("SECRET_NAME");

var client = new SecretClient(
    new Uri(keyVaultUrl),
    new DefaultAzureCredential());

KeyVaultSecret secret = await client.GetSecretAsync(secretName);

Microsoft Authentication Library (MSAL)

次のクライアント ライブラリは、必要な最小バージョンです。

エコシステム ライブラリ Image Windows が含まれます
.NET Microsoft Authentication Library-for-dotnet ghcr.io/azure/azure-workload-identity/msal-net:latest リンク はい
Go Microsoft Authentication Library-for-go ghcr.io/azure/azure-workload-identity/msal-go:latest リンク はい
Java Microsoft Authentication Library-for-java ghcr.io/azure/azure-workload-identity/msal-java:latest リンク いいえ
JavaScript Microsoft Authentication Library-for-js ghcr.io/azure/azure-workload-identity/msal-node:latest リンク いいえ
Python Microsoft Authentication Library-for-python ghcr.io/azure/azure-workload-identity/msal-python:latest リンク いいえ

制限事項

  • フェデレーション ID 資格情報は、マネージド ID ごとに 20 個しか持つことができません。
  • フェデレーション ID 資格情報が最初に追加された後に反映されるまでに数秒かかります。
  • オープン ソース プロジェクト Virtual Kubelet に基づき、仮想ノード アドオンはサポートされていません。
  • これらのリージョンのユーザー割り当て済みマネージド ID では、フェデレーション ID 資格情報の作成がサポートされていません。

動作方法

このセキュリティ モデルでは、AKS クラスターがトークン発行者として機能し、Microsoft Entra ID は OpenID Connect を使って公開署名キーを検出し、Microsoft Entra トークンと交換する前にサービス アカウント トークンの信頼性を確認します。 ワークロードでは、Azure ID クライアント ライブラリまたは Microsoft Authentication Library を使って、Microsoft Entra トークンのボリュームに投影されたサービス アカウント トークンを交換できます。

AKS ワークロード ID セキュリティ モデルの図。

次の表では、Microsoft Entra ワークロード ID に必要な OIDC 発行者のエンドポイントについて説明します。

エンドポイント 説明
{IssuerURL}/.well-known/openid-configuration OIDC 探索ドキュメントとも呼ばれます。 これには、発行者の構成に関するメタデータが含まれています。
{IssuerURL}/openid/v1/jwks これには、サービス アカウント トークンの信頼性を検証するために Microsoft Entra ID で使う公開署名キーが含まれています。

次の図は、OpenID Connect を使用した認証シーケンスをまとめたものです。

AKS ワークロード ID OIDC 認証シーケンスの図。

Webhook 証明書の自動ローテーション

他の Webhook アドオンと同様に、証明書はクラスター証明書の自動ローテーション処理によってローテーションされます。

サービス アカウントのラベルと注釈

Microsoft Entra ワークロード ID では、サービス アカウントに関連する次のマッピングがサポートされています。

  • 1 つのサービス アカウントから 1 つの Microsoft Entra オブジェクトを参照する一対一。
  • 複数のサービス アカウントから同一の Microsoft Entra オブジェクトを参照する多対一。
  • クライアント ID 注釈を変更することで、1 つのサービス アカウントから複数の Microsoft Entra オブジェクトを参照する一対多。 詳しくは、「Kubernetes サービス アカウントを使用して複数の ID をフェデレートする方法」をご覧ください。

Note

サービス アカウントの注釈が更新された場合は、変更を有効にするためにポッドを再起動する必要があります。

Microsoft Entra ポッドマネージド ID を使っている場合、サービス アカウントはコア Kubernetes API の一部であることを除き、サービス アカウントをカスタム リソース定義 (CRD) ではなく Azure ID と考えてください。 次に、Microsoft Entra アクセス トークンのサービス アカウント トークンを交換するときに動作を構成するために使用できる、使用可能なラベルと注釈の一覧について説明します。

サービス アカウントの注釈

すべての注釈は省略可能です。 注釈が指定されていない場合は、既定値が使用されます。

注釈 説明 Default
azure.workload.identity/client-id Microsoft Entra アプリケーションを表す
クライアント ID を表します。
azure.workload.identity/tenant-id Azure AD アプリケーションが登録される
Microsoft Entra アプリケーションが登録されています。
AZURE_TENANT_ID 環境変数
(azure-wi-webhook-config ConfigMap から抽出されたもの)。
azure.workload.identity/service-account-token-expiration 投影されたサービス アカウント トークンの expirationSeconds フィールドを
表します。 これは、サービス アカウント トークンの更新中のエラーによって発生する
ダウンタイムを防ぐために構成する省略可能なフィールドです。 Kubernetes サービス アカウント トークンの有効期限は、Microsoft Entra トークンと関連付けられていません。 Microsoft Entra トークンは、発行されてから 24 時間で有効期限が切れます。
3600
サポートされる範囲は 3600 から 86400 です。

ポッド ラベル

Note

ワークロード ID を使用するアプリケーションの場合、ワークロード ID を使用する必要があるポッドに対して一貫した信頼性の高い動作を提供するため、AKS がワークロード ID を Fail Close シナリオに移動するよう、ポッド スペックに azure.workload.identity/use: "true" ラベルを追加する必要があります。 それ以外の場合、ポッドは再起動後に失敗します。

Label 説明 推奨値 必須
azure.workload.identity/use このラベルは、ポッド テンプレート スペックで必要です。このラベルを持つポッドのみが、Azure 固有の環境変数と予測されるサービス アカウント トークン ボリュームを挿入するために、azure-workload-identity mutating admission webhook によって変更されます。 true はい

ポッドの注釈

すべての注釈は省略可能です。 注釈が指定されていない場合は、既定値が使用されます。

注釈 説明 Default
azure.workload.identity/service-account-token-expiration 投影されたサービス アカウント トークンの expirationSeconds フィールドを表しています。 これは、サービス アカウント トークンの更新中のエラーが原因のダウンタイムを防ぐために構成する省略可能なフィールドです。 Kubernetes サービス アカウント トークンの有効期限は、Microsoft Entra トークンと関連付けられていません。 Microsoft Entra トークンは、発行されてから 24 時間で有効期限が切れます。 1 3600
サポートされる範囲は 3600 から 86400 です。
azure.workload.identity/skip-containers 投影されたサービス アカウント トークン ボリュームの追加をスキップする、セミコロンで区切られたコンテナーの一覧を表します。 たとえば、container1;container2 のようにします。 既定では、サービス アカウントに azure.workload.identity/use: true というラベルが付いている場合、投影されたサービス アカウント トークン ボリュームはすべてのコンテナーに追加されます。
azure.workload.identity/inject-proxy-sidecar プロキシ init コンテナーとプロキシ サイドカーをポッドに挿入します。 プロキシ サイドカーは、IMDS へのトークン要求をインターセプトし、フェデレーション ID 資格情報を持つユーザーに代わって Microsoft Entra トークンを取得するために使われます。 true
azure.workload.identity/proxy-sidecar-port プロキシ サイドカーのポートを表します。 8000

1 サービス アカウントにも注釈が付けられる場合に優先されます。

ワークロード ID に移行する方法

ポッドマネージド ID が既に実行されているクラスターでは、2 つの方法のいずれかでワークロード ID を使用するように構成できます。 最初のオプションでは、ポッドマネージド ID に対して現在実装しているものと同じ構成を使用できます。 名前空間内のサービス アカウントに ID で注釈を付けるだけで済み、ワークロード ID でポッドに注釈を挿入できるようになります。

2 つ目のオプションは、Azure ID クライアント ライブラリの最新バージョンを使用するようにアプリケーションを書き換える方法です。

移行プロセスを合理化および容易にするために、アプリケーションで行われる IMDS トランザクションを OpenID Connect (OIDC) に変換する移行サイドカーを開発しました。 移行サイドカーは長期的なソリューションを意図したものではなく、ワークロード ID で迅速に稼働させる方法です。 アプリケーション内で移行サイドカーを実行すると、アプリケーション IMDS トランザクションが OIDC にプロキシされます。 もう 1 つの方法は、OIDC 認証をサポートする Azure ID クライアント ライブラリのサポートされているバージョンにアップグレードすることです。

次の表は、ワークロード ID の移行またはデプロイに関する推奨事項をまとめたものです。

シナリオ 説明
新規または既存のクラスターのデプロイでは、Azure ID クライアント ライブラリのサポートされているバージョンが実行されます 移行手順は必要ありません。
デプロイ リソースの例:
- 新しいクラスターにワークロード ID をデプロイして構成する
- チュートリアル: AKS 上のアプリケーションでワークロード ID を使用する
新規または既存のクラスターのデプロイでは、Azure ID クライアント ライブラリのサポートされないバージョンが実行されます サポートされているバージョンの Azure ID SDK を使用するようにコンテナー イメージを更新するか、移行サイドカーを使用します。

次のステップ