この記事では、Azure Kubernetes Service (AKS) でシステム割り当て、ユーザー割り当て、または事前に作成された kubelet マネージド ID を有効にして使用する手順について説明します。
AKS マネージド ID の前提条件
Azure Kubernetes Service (AKS) AKS で使用できるさまざまな種類のマネージド ID と、それらを使用してAzureリソースに安全にアクセスする方法を理解します。この記事の例を実行する前に、 コマンドを使用して、サブスクリプションを現在のアクティブなサブスクリプションとして設定します。
az account set --subscription <subscription-id>az group createコマンドを呼び出して、まだリソース グループがない場合は、Azureリソース グループを作成します。az group create \ --name <resource-group-name> \ --location <location>
Azure CLI バージョンの最小要件
- バージョン 2.23.0 以降Azure CLIインストールされていることを確認します。 バージョンを確認するには、コマンドを実行してください。 インストールまたはアップグレードする必要がある場合は、「Install Azure CLIを参照してください。
- 作成済みの kubelet マネージド ID を使用するにはバージョン 2.26.0 以降Azure CLIインストールする必要があります。
- システム割り当てマネージド ID または a ユーザー割り当てマネージド ID を使用するように既存のクラスターを更新するには、バージョン 2.49.0 以降をインストールAzure CLI必要があります。
制限事項
マネージド ID を使用してクラスターを作成した後は、サービス プリンシパルの使用に戻すことはできません。
マネージド ID が有効になっているクラスターの別のテナントへの移動または移行はサポートされていません。
クラスターで Microsoft Entra ポッドマネージド ID (
aad-pod-identity) が有効化されている場合、ノード管理ID (NMI) ポッドはノードの iptables を変更して、Azure インスタンス メタデータサービス (IMDS) エンドポイントへの呼び出しをインターセプトします。 この構成は、特定のポッドが を使用しない場合でも、IMDS エンドポイントに対して行われた要求はすべて NMI によってインターセプトされることを意味します。AzurePodIdentityException カスタム リソース定義 (CRD) を構成して、CRD で定義されたラベルに一致するポッドから発信された IMDS エンドポイントへの要求を、NMI で処理せずにプロキシするように指定できます。 AzurePodIdentityException CRD を構成して、kube-system 名前空間のラベル付きシステムポッドを除外します。 詳細については、「Azure Kubernetes Service で Microsoft Entra のポッド管理 ID を使用する」を参照してください。
例外を構成するには、mic-exception YAML をインストールします。
AKS では、カスタム プライベート DNS ゾーンを使用する場合、システム割り当てマネージド ID の使用はサポートされていません。
Azure US Government クラウドの USDOD Central、USDOD East、USGov アイオワ リージョンでは、ユーザー割り当てマネージド ID を持つクラスターの作成はサポートされていません。
事前に作成された kubelet マネージド ID は、ユーザー割り当てマネージド ID である必要があります。
21Vianet が運営Microsoft Azure中国東部および中国北部リージョンはサポートされていません。
Important
すべてのMicrosoft Defender for Cloud機能は、2026 年 8 月 18 日に中国リージョンのAzureで正式に廃止されます。 この今後の提供終了により、中国のお客様のAzureは、新しいサブスクリプションをサービスにオンボードできなくなります。 新しいサブスクリプションとは、提供終了の発表日である 2025 年 8 月 18 日より前に、Microsoft Defender for Cloud サービスにまだオンボードされていないサブスクリプションです。 詳細な提供終了情報については、「
21Vianet によって運営されている Microsoft Azure の Microsoft Defender for Cloud の廃止に関する発表 」を参照してください。 お客様は、21Vianet が運営するMicrosoft Azureのアカウント担当者と協力して、この提供終了が自身の業務に与える影響を評価する必要があります。
クラスターの更新に関する考慮事項
クラスターを更新するときは、次の情報を考慮してください。
- 更新プログラムは、使用する VHD 更新プログラムがある場合にのみ機能します。 最新の VHD を実行している場合は、更新を実行するために、次の VHD が使用可能になるまで待つ必要があります。
- Azure CLIにより、移行後にアドオンのアクセス許可が正しく設定されます。 移行操作を実行するためにAzure CLIを使用していない場合は、アドオン ID のアクセス許可を自分で処理する必要があります。 Azure Resource Manager (ARM) テンプレートの使用例については、「ASsign Azure roles using ARM templatesを参照してください。
- クラスターが Azure Container Registry (ACR) からイメージからプルするために
--attach-acrを使用していた場合は、クラスターを更新した後にaz aks update --resource-group <resource-group-name> --name <aks-cluster-name> --attach-acr <acr-resource-id>コマンドを実行して、マネージド ID に使用される新しく作成された kubelet が ACR からプルするアクセス許可を取得できるようにする必要があります。 そうしないと、更新の後に ACR からプルできなくなります。
AKS クラスターでシステム割り当てマネージド ID を有効にする
新しい AKS クラスターでシステム割り当てマネージド ID を有効にする
新しい AKS クラスターを作成すると、システム割り当てマネージド ID が既定で有効になります。
コマンドを使用して、AKS クラスターを作成します。
az aks create \ --resource-group <resource-group-name> \ --name <aks-cluster-name> \ --generate-ssh-keys
システム割り当てマネージド ID を使用するように既存の AKS クラスターを更新する
パラメーターを使用して、 コマンドを使用して、既存の AKS クラスターをサービス プリンシパルからシステム割り当てマネージド ID に更新します。
az aks update \ --resource-group <resource-group-name> \ --name <aks-cluster-name> \ --enable-managed-identityサービス プリンシパルではなくシステム割り当てマネージド ID を使用するようにクラスターを更新した後、コントロール プレーンとポッドは、Azure内の他のサービスにアクセスするときに、承認のためにシステム割り当てマネージド ID を使用します。 Kubelet は、エージェント プールもアップグレードするまで、サービス プリンシパルの使用を続けます。 ノードで コマンドを使用して、マネージド ID に更新することができます。 ノード プールのアップグレードでは、ノード プール内のノードが切断、ドレイン、再イメージ化されるため、AKS クラスターのダウンタイムが発生します。
システム割り当てマネージド ID のプリンシパル ID を取得する
コマンドを使用して、クラスターのシステム割り当てマネージド ID のプリンシパル ID を取得します。
CLIENT_ID=$(az aks show \ --name <aks-cluster-name> \ --resource-group <resource-group-name> \ --query identity.principalId \ --output tsv)
システムが割り当てたマネージド ID にロールを追加する
az role assignment createコマンドを使用して、Azure RBAC ロールをシステム割り当てマネージド ID に割り当てます。既定のワーカー ノード リソース グループ外にある VNet、Azure 接続のディスク、静的 IP アドレス、またはルート テーブルの場合は、カスタム リソース グループに
Network Contributorロールを割り当てる必要があります。次の例では、システム割り当てマネージド ID に ネットワーク共同作成者 ロールを割り当てます。 ロールの割り当てのスコープは、VNet を含むリソース グループです。
az role assignment create \ --assignee <client-id> \ --role "Network Contributor" \ --scope <custom-resource-group-id>注
クラスターのマネージド ID に付与されたアクセス許可が反映されるまでに、最大 60 分かかる場合があります。
ユーザー割り当てマネージド ID を作成する
ユーザー割り当てマネージド ID リソースがまだない場合は、 コマンドを使用して作成します。
az identity create \ --name <identity-name> \ --resource-group <resource-group-name>出力は、次の出力例のようになります。
{ "clientId": "<client-id>", "clientSecretUrl": "<clientSecretUrl>", "id": "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity-name>", "location": "<location>", "name": "<identity-name>", "principalId": "<principal-id>", "resourceGroup": "<resource-group-name>", "tags": {}, "tenantId": "<tenant-id>", "type": "Microsoft.ManagedIdentity/userAssignedIdentities" }
ユーザー割り当てマネージド ID のプリンシパル ID を取得する
コマンドを使用して、ユーザー割り当てマネージド ID のプリンシパル ID を取得します。
CLIENT_ID=$(az identity show \ --name <identity-name> \ --resource-group <resource-group-name> \ --query principalId \ --output tsv)
ユーザー割り当てマネージド ID のリソース ID を取得する
コマンドを使用して、ユーザー割り当てマネージド ID のリソース ID を取得します。
RESOURCE_ID=$(az identity show \ --name <identity-name> \ --resource-group <resource-group-name> \ --query id \ --output tsv)
ユーザー割り当てマネージド ID に Azure RBAC ロールを割り当てます。
コマンドを使用して、ユーザー割り当てマネージド ID のロールの割り当てを追加します。
次の例では、Key Vault Secrets User ロールをユーザー割り当てマネージド ID に割り当てて、key vault内のシークレットにアクセスするためのアクセス許可を付与します。 ロールの割り当ての範囲はキー ボールト リソースに限定されます。
az role assignment create \ --assignee <client-id> \ --role "Key Vault Secrets User" \ --scope "<keyvault-resource-id>"注
クラスターのマネージド ID に付与されたアクセス許可が反映されるまでに、最大 60 分かかる場合があります。
AKS クラスターでユーザー割り当てマネージド ID を有効にする
新しい AKS クラスターでユーザー割り当てマネージド ID を有効にする
コマンドを使用して、ユーザー割り当てマネージド ID を使用して AKS クラスターを作成します。 パラメーターを含めて、ユーザー割り当てマネージド ID のリソース ID を渡します。
az aks create \ --resource-group <resource-group-name> \ --name <cluster-name> \ --network-plugin azure \ --vnet-subnet-id <vnet-subnet-id> \ --dns-service-ip 10.2.0.10 \ --service-cidr 10.2.0.0/24 \ --assign-identity $RESOURCE_ID \ --generate-ssh-keys
ユーザー割り当てマネージド ID を使用するように既存のクラスターを更新する
コマンドを使用して、ユーザー割り当てマネージド ID を使用するように既存のクラスターを更新します。 パラメーターを含めて、ユーザー割り当てマネージド ID のリソース ID を渡します。
az aks update \ --resource-group <resource-group-name> \ --name <cluster-name> \ --enable-managed-identity \ --assign-identity $RESOURCE_IDユーザー割り当てマネージド ID を使用するようにクラスターを正常に更新した場合の出力は、次の出力例のようになります。
"identity": { "principalId": null, "tenantId": null, "type": "UserAssigned", "userAssignedIdentities": { "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity-name>": { "clientId": "<client-id>", "principalId": "<principal-id>" } } },注
コントロール プレーンのマネージド ID をシステム割り当てからユーザー割り当てに移行しても、コントロール プレーンとエージェント プールにダウンタイムは発生しません。 コントロール プレーン コンポーネントは、次のトークンが更新されるまで、最大数時間、古いシステム割り当て ID が引き続き使用されます。
クラスターが使用しているマネージド ID の種類を確認する
コマンドを使用して、クラスターが使用しているマネージド ID の種類を確認します。
az aks show \ --name <aks-cluster-name> \ --resource-group <resource-group-name> \ --query identity.type \ --output tsvクラスターがマネージド ID を使用している場合、type プロパティの値は SystemAssigned または UserAssigned のいずれかになります。
クラスターがサービス プリンシパルを使用している場合、type プロパティの値は null になります。 マネージド ID を使用するようにクラスターをアップグレードすることを検討してください。
kubelet マネージド ID を作成する
kubelet マネージド ID を持っていない場合は、 コマンドを使用して作成します。
az identity create \ --name <kubelet-identity-name> \ --resource-group <resource-group-name>出力は、次の出力例のようになります。
{ "clientId": "<client-id>", "clientSecretUrl": "<clientSecretUrl>", "id": "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<kubelet-identity-name>", "location": "<location>", "name": "<kubelet-identity-name>", "principalId": "<principal-id>", "resourceGroup": "<resource-group-name>", "tags": {}, "tenantId": "<tenant-id>", "type": "Microsoft.ManagedIdentity/userAssignedIdentities" }
RBAC の役割を kubelet マネージド ID に割り当てる
コマンドを使用して、kubelet マネージド ID に ロールを割り当てます。
az role assignment create \ --assignee <kubelet-client-id> \ --role "acrpull" \ --scope "<acr-registry-id>"
AKS クラスターで kubelet マネージド ID を有効にする
新しい AKS クラスターで kubelet マネージド ID を有効にする
コマンドを使用して、既存の ID で AKS クラスターを作成します。
az aks create \ --resource-group <resource-group-name> \ --name <aks-cluster-name> \ --network-plugin azure \ --vnet-subnet-id <vnet-subnet-id> \ --dns-service-ip 10.2.0.10 \ --service-cidr 10.2.0.0/24 \ --assign-identity <identity-resource-id> \ --assign-kubelet-identity <kubelet-identity-resource-id> \ --generate-ssh-keyskubelet マネージド ID を使用して AKS クラスターを正常に作成すると、次のような出力が得られます。
"identity": { "principalId": null, "tenantId": null, "type": "UserAssigned", "userAssignedIdentities": { "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity-name>": { "clientId": "<client-id>", "principalId": "<principal-id>" } } }, "identityProfile": { "kubeletidentity": { "clientId": "<client-id>", "objectId": "<object-id>", "resourceId": "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<kubelet-identity-name>" } },
kubelet マネージド ID を使用するように既存のクラスターを更新する
kubelet マネージド ID を使用するように既存のクラスターを更新するには、まず AKS クラスターの現在のコントロール プレーンのマネージド ID を取得します。
警告
kubelet マネージド ID を更新すると、AKS クラスターのノード プールがアップグレードされます。これを実行する前に、ワークロードの中断を回避したり、メンテナンス期間中にこれを実行したりするために、ポッド中断予算などの適切な可用性構成が構成されていることを確認します。
コマンドを使用して、AKS クラスターでユーザー割り当てマネージド ID が使用されていることを確認します。
az aks show \ --resource-group <resource-group-name> \ --name <aks-cluster-name> \ --query "servicePrincipalProfile"クラスターが管理対象の ID を使用している場合、その出力は msi という値を示します。 サービス プリンシパルを使用するクラスターに、オブジェクト ID が表示されます。 次に例を示します。
# The cluster is using a managed identity. { "clientId": "msi" }クラスターでマネージド ID が使用されていることを確認したら、 コマンドを使用して、マネージド ID のリソース ID を見つけます。
az aks show --resource-group <resource-group-name> \ --name <aks-cluster-name> \ --query "identity"ユーザー割り当てマネージド ID の場合、出力は次の出力例のようになります。
{ "principalId": null, "tenantId": null, "type": "UserAssigned", "userAssignedIdentities": <identity-resource-id> "clientId": "<client-id>", "principalId": "<principal-id>" },コマンドを使用して、既存の ID でクラスターを更新します。 引数には、コントロール プレーンのユーザー割り当てマネージド ID のリソース ID を指定します。 引数に kubelet マネージド ID のリソース ID を指定します。
az aks update \ --resource-group <resource-group-name> \ --name <aks-cluster-name> \ --enable-managed-identity \ --assign-identity <identity-resource-id> \ --assign-kubelet-identity <kubelet-identity-resource-id>独自の kubelet マネージド ID を使用してクラスターを正常に更新した場合の出力は、次の出力例のようになります。
"identity": { "principalId": null, "tenantId": null, "type": "UserAssigned", "userAssignedIdentities": { "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity-name>": { "clientId": "<client-id>", "principalId": "<principal-id>" } } }, "identityProfile": { "kubeletidentity": { "clientId": "<client-id>", "objectId": "<object-id>", "resourceId": "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<kubelet-identity-name>" } },
kubelet マネージド ID のプロパティを取得する
コマンドを使用して kubelet マネージド ID のプロパティを取得し、 プロパティに対してクエリを実行します。
az aks show \ --name <aks-cluster-name> \ --resource-group <resource-group-name> \ --query "identityProfile.kubeletidentity"
次のステップ
- Azure Resource Manager テンプレートを使用して、マネージド ID 対応クラスターを作成します。
- AKS でサポートされているすべてのMicrosoft Entra認証方法について、kubelogin を
使用する方法について説明します。