次の方法で共有


Azure Kubernetes Service (AKS) でマネージド ID を使用する

この記事では、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 バージョンの最小要件

制限事項

  • マネージド 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-keys
    

    kubelet マネージド 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 クラスターのノード プールがアップグレードされます。これを実行する前に、ワークロードの中断を回避したり、メンテナンス期間中にこれを実行したりするために、ポッド中断予算などの適切な可用性構成が構成されていることを確認します。

  1. コマンドを使用して、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"
    }
    
  2. クラスターでマネージド 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>"
    },
    
  3. コマンドを使用して、既存の 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 を使用する方法について説明します。