Azure Arc 対応 Kubernetes でワークロード ID フェデレーションをデプロイおよび構成する (プレビュー)
Azure CLI を使用して、Azure Arc 対応 Kubernetes クラスターでワークロード ID 機能を有効にすることができます。 このプロセスは、大まかには次のような手順に従います。
- 新規または既存の Arc 対応 Kubernetes クラスターでワークロード ID 機能を有効にします。
- マネージド ID (またはアプリ登録) と Kubernetes サービス アカウントを作成します。
- トークンのフェデレーション用にマネージド ID を構成する。
- ワークロード ID を使用するように、サービス アカウントの注釈とアプリケーション ポッド ラベルを構成します。
- Kubernetes クラスターのワークロード ID 設定を構成します。
- クラスターでワークロード ID を無効にします。
この機能の概要については、「Azure Arc 対応 Kubernetes でのワークロード ID フェデレーション (プレビュー)」を参照してください。
重要
Azure Arc ワークロード ID フェデレーション機能は現在プレビュー段階です。 ベータ版、プレビュー版、または一般提供としてまだリリースされていない Azure の機能に適用される法律条項については、「Microsoft Azure プレビューの追加使用条件」を参照してください。
ヒント
この記事では、Arc 対応 Kubernetes クラスターにワークロード ID をデプロイして構成するために必要な手順について説明します。 他の種類のクラスターでワークロード ID を有効にする方法を学習する場合は、次の記事を参照してください。
前提条件
- Azure Arc 対応 Kubernetes クラスターのワークロード ID (プレビュー) は、次の Kubernetes ディストリビューションでサポートされています。
- K3s を実行する Ubuntu Linux クラスター
- Edge Essentials 上の AKS
- HCI 23H2 上の AKS
ワークロード ID 機能を使うには、Azure CLI バージョン 2.64 以降と az connectedk8s
バージョン 1.10.0 以降が必要です。 必ず、az connectedk8s
のバージョンを更新する前に Azure CLI のバージョンを更新してください。 Azure Cloud Shell をお使いの場合は、最新バージョンの Azure CLI がインストールされます。
クラスターでワークロード ID を有効にする
適切な手順に従って、新しい Arc 対応 Kubernetes クラスターまたは既存のクラスターのワークロード ID 機能を有効にします。 どちらの場合も、名前とリソース グループを必要な値に置き換えて、必要に応じてパラメーターを構成してください。
パラメーター | Description | 必須 |
---|---|---|
--enable-oidc-issuer |
これは、API サーバーでトークンを検証するための公開署名キーを検出できるようにする、パブリックにアクセスできる URL である OIDC 発行者 URL を生成およびホストします。 | 必須 |
--enable-workload-identity |
署名済みサービス アカウント トークンを既知のパスに投影し、注釈付きサービス アカウントの設定に基づいて認証関連の環境変数をアプリケーション ポッドに挿入する Mutating Admission Webhook をインストールします。 新しいクラスターで、このパラメーターが有効になっていない場合は、署名済みサービス アカウント トークンをパスに公開する既知のパスに投影ボリュームをマウントする必要があります。 | 省略可能 |
環境変数の設定
便宜上、この記事の例では、以下に定義する環境変数を参照しています。 次の値は、実際の値に置き換えてください。
export RESOURCE_GROUP="myRG"
export LOCATION="eastus"
export CLUSTER_NAME="mycluster"
export SERVICE_ACCOUNT_NAMESPACE="myKubernetesnamespace"
export SERVICE_ACCOUNT_NAME="mysa"
export SUBSCRIPTION="$(az account show --query id --output tsv)"
export USER_ASSIGNED_IDENTITY_NAME="myIdentity"
export FEDERATED_IDENTITY_CREDENTIAL_NAME="myFedIdentity"
ワークロード ID を有効にした Azure Arc 対応クラスターを作成するには、次のコマンドを使用します。
az connectedk8s connect --name "${CLUSTER_NAME}" --resource-group "${RESOURCE_GROUP}" --enable-oidc-issuer –-enable-workload-identity
既存の Arc 対応 Kubernetes クラスターでワークロード ID を有効にするには、update
コマンドを使用します。
az connectedk8s update --name "${CLUSTER_NAME}" --resource-group "${RESOURCE_GROUP}" --enable-oidc-issuer --enable-workload-identity
OIDC 発行者 URL を取得する
OIDC 発行者 URL を取得し、環境変数に保存します。 この発行者 URL は、後の手順で使用します。
export OIDC_ISSUER="$(az connectk8s show --name "${CLUSTER_NAME}" --resource-group "${RESOURCE_GROUP}" \
--query "oidcIssuerProfile.issuerUrl" \
--output tsv)"
環境変数を表示するには、echo ${OIDC_ISSUER}
を入力します。 環境変数には、次の例のような発行者 URL が含まれている必要があります。
https://northamerica.oic.prod-arc.azure.com/00000000-0000-0000-0000-000000000000/12345678-1234-1234-1234-123456789123/
既定では、発行者はベース URL https://{region}.oic.prod-arc.azure.com/{tenant_id}/{uuid}
を使用するように設定されています。ここで {region}
の値は、Arc 対応 Kubernetes クラスターが作成された場所と一致します。 値 {uuid}
は、不変であるクラスターごとにランダムに生成される guid である OpenID Connect (OIDC) キーを表します。
マネージド ID の作成
az identity create
コマンドを使用して、ユーザー割り当てマネージド ID を作成します。 ワークロード ID では、ユーザーに割り当てられたマネージド ID のトークンと Kubernetes クラスターのサービス アカウント トークンとの間に信頼関係が確立されます。
az identity create \
--name "${USER_ASSIGNED_IDENTITY_NAME}" \
--resource-group "${RESOURCE_GROUP}" \
--location "${LOCATION}" \
--subscription "${SUBSCRIPTION}"
マネージド ID のクライアント ID を取得し、環境変数に格納します。
export USER_ASSIGNED_CLIENT_ID="$(az identity show \
--resource-group "${RESOURCE_GROUP}" \
--name "${USER_ASSIGNED_IDENTITY_NAME}" \
--query 'clientId' \
--output tsv)"
Kubernetes サービス アカウントを作成する
Kubernetes サービス アカウントを作成し、前の手順で作成したマネージド ID のクライアント ID で注釈を付けます。 Kubernetes サービス アカウントに関連付けられた署名済みトークンは、両者の信頼関係が確立された後に Microsoft Entra ID トークンと交換されます。
次の YAML スニペットを適用して、ワークロード ID の注釈を追加したサービス アカウントを作成します。
apiVersion: v1
kind: ServiceAccount
metadata:
annotations:
azure.workload.identity/client-id: "${USER_ASSIGNED_CLIENT_ID}"
name: "${SERVICE_ACCOUNT_NAME}"
namespace: "${SERVICE_ACCOUNT_NAMESPACE}"
フェデレーション ID 資格情報を作成する
az identity federated-credential create
コマンドを使用して、マネージド ID、サービス アカウント発行者、およびサブジェクト間のフェデレーション ID 資格情報を作成します。 この手順では、トークンを交換するための Kubernetes クラスターと Microsoft Entra の信頼関係を確立します。 Microsoft Entra のフェデレーション ID 資格情報の詳細については、Microsoft Entra ID でのフェデレーション ID 資格情報の概要に関する記事を参照してください。
az identity federated-credential create \
--name ${FEDERATED_IDENTITY_CREDENTIAL_NAME} \
--identity-name "${USER_ASSIGNED_IDENTITY_NAME}" \
--resource-group "${RESOURCE_GROUP}" \
--issuer "${OIDC_ISSUER}" \
--subject system:serviceaccount:"${SERVICE_ACCOUNT_NAMESPACE}":"${SERVICE_ACCOUNT_NAME}" \
--audience api://AzureADTokenExchange
Note
フェデレーション ID 資格情報が追加された後、それが反映されるまでに数秒かかります。 フェデレーション ID 資格情報を追加した直後にトークン要求が行われると、キャッシュが更新されるまでの間、要求が失敗する可能性があります。 このイシューを回避するには、フェデレーション ID 資格情報を追加した後にスクリプトに若干の遅延を追加します。
サービス アカウントの注釈とポッド ラベルを構成する
次のサービス アカウントおよびポッドの注釈は、アプリケーション要件に基づいてワークロード ID を構成するために使用できます。 –-enable-workload-identity
が true
に設定されている場合、以下に指定するポッド ラベルは必須です。
サービス アカウントの注釈
サービス アカウントの注釈は省略可能です。 注釈が指定されていない場合は、既定値が使用されます。
注釈 | 説明 | Default |
---|---|---|
azure.workload.identity/client-id |
ポットで使用する Microsoft Entra アプリケーション クライアント ID。 | |
azure.workload.identity/tenant-id |
Microsoft Entra アプリケーションが登録されている Azure テナント ID。 | azure-wi-webhook-config ConfigMap から抽出された AZURE_TENANT_ID 環境変数。 |
azure.workload.identity/service-account-token-expiration |
投影されたサービス アカウント トークンの expirationSeconds フィールド。 サービス アカウント トークンの更新中のエラーが原因のダウンタイムを防ぐために構成します。 Kubernetes サービス アカウント トークンの有効期限は、Microsoft Entra トークンと関連付けられていません。 Microsoft Entra トークンは、発行されてから 24 時間で有効期限が切れます。 |
3600 (サポートされる範囲は 3600 から 86400 です)。 |
ポッド ラベル
注釈 | 説明 | 推奨値 | 必須 |
---|---|---|---|
azure.workload.identity/use |
ポッド テンプレート スペックで必要です。–-enable-workload-identity が true に設定されている場合は、このラベルを持つポッドのみが、Azure 固有の環境変数と予測されるサービス アカウント トークン ボリュームを挿入するために、Mutating Admission Webhook によって変更されます。 |
true |
はい |
ポッドの注釈
すべてのポッドの注釈は省略可能です。 注釈が指定されていない場合は、既定値が使用されます。
注釈 | 説明 | Default |
---|---|---|
azure.workload.identity/service-account-token-expiration |
投影されたサービス アカウント トークンの expirationSeconds フィールド。 サービス アカウント トークンの更新中のエラーが原因のダウンタイムを防ぐために構成します。 Kubernetes サービス アカウント トークンの有効期限は、Microsoft Entra トークンと関連付けられていません。 Microsoft Entra トークンは、発行されてから 24 時間で有効期限が切れます。 |
3600 (サポートされる範囲は 3600 から 86400 です)。 |
azure.workload.identity/skip-containers |
投影されたサービス アカウント トークン ボリュームの追加をスキップする、セミコロンで区切られたコンテナーの一覧を表します。 (例: container1;container2 )。 |
既定では、ポッドに azure.workload.identity/use: true というラベルが付いている場合、投影されたサービス アカウント トークン ボリュームはすべてのコンテナーに追加されます。 |
Kubernetes クラスターのワークロード ID 設定を構成する
Kubernetes クラスターの API サーバーは、一般にアクセスできる OIDC 発行者 URL を含むサービス アカウント トークンを発行するように構成する必要があります (Entra でトークンを検証するための公開キーの場所を把握するため)。
K3s を使用した Ubuntu Linux でワークロード ID 設定を構成するには、以下の手順に従って構成を完了します。
K3s 構成ファイルを作成します。
/etc/rancher/k3s/config.yaml
を編集して以下の設定を追加します。`kube-apiserver-arg: - 'service-account-issuer=${OIDC_ISSUER}' - 'service-account-max-token-expiration=24h'`
config.yaml を保存します。
コマンド
systemctl restart k3s
を使用して k3s API サーバーを再起動します。サービス アカウント キーは頻繁にローテーションすることをお勧めします。 詳細については、「サービス アカウントの発行者キーのローテーション」を参照してください。
ワークロード ID を無効にする
Azure Arc 対応 Kubernetes クラスターでワークロード ID 機能を無効にするには、次のコマンドを実行します。
az connectedk8s update
--resource-group "${RESOURCE_GROUP}"
--name "${CLUSTER_NAME}"
--disable-workload-identity
次のステップ
- ワークロード ID を使用するためのアプリケーションの構成のサンプルに関する記事を参照してください。