次の方法で共有


Azure Kubernetes Service (AKS) クラスターの資格情報を更新またはローテーションする

サービス プリンシパルで作成された AKS クラスターには 1 年間の有効期間があります。 期限が近づいたら、資格情報をリセットしてサービス プリンシパルの期限を延長することができます。 また、定義済みのセキュリティ ポリシーの一環として、資格情報を更新またはローテーションすることもできます。 認証プロバイダーとして Microsoft Entra ID と統合された AKS クラスターには、さらに 2 つの ID (Microsoft Entra サーバー アプリと Microsoft Entra クライアント アプリ) があります。 この記事では、AKS クラスターのサービス プリンシパルと Microsoft Entra の各資格情報を更新する方法について詳しく説明します。

Note

または、サービス プリンシパルの代わりに、マネージド ID をアクセス許可に使用できます。 マネージド ID では、更新やローテーションは必要ありません。 詳細については、マネージド ID の使用に関するページを参照してください。

開始する前に

Azure CLI バージョン 2.0.65 以降がインストールされて構成されている必要があります。 バージョンを確認するには、az --version を実行します。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。

AKS クラスター用の新しいサービス プリンシパルを更新または作成する

AKS クラスターの資格情報を更新するときは、以下のどちらかを選択できます。

  • 既存のサービス プリンシパルの資格情報を更新します。
  • 新しいサービス プリンシパルを作成し、それらの新しい資格情報を使用するようにクラスターを更新します。

警告

"新しい" サービス プリンシパルを作成する場合、サービス プリンシパルの権限がすべてのリージョンに行き渡るまで 30 分程度待ちます。 これらの認証情報を使用するように規模の大きい AKS クラスターを更新する際は、完了までに時間がかかる場合があります。

サービス プリンシパルの有効期限を確認する

サービス プリンシパルの有効期限を確認するには、az ad app credential list コマンドを使用します。 次の例では、az aks show コマンドを使用して、$RESOURCE_GROUP_NAME リソース グループ内の $CLUSTER_NAME クラスターのサービス プリンシパル ID を取得します。 サービス プリンシパル ID は、SP_ID という名前の変数として設定されます。

SP_ID=$(az aks show --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME \
    --query servicePrincipalProfile.clientId -o tsv)
az ad app credential list --id "$SP_ID" --query "[].endDateTime" -o tsv

既存のサービス プリンシパルの資格情報をリセットする

既存のサービス プリンシパルの資格情報を更新するには、az aks show コマンドを使用して、クラスターのサービス プリンシパル ID を取得します。 次の例では、$RESOURCE_GROUP_NAME リソース グループ内の $CLUSTER_NAME クラスターの ID を取得します。 SP_ID という名前の変数には、次の手順で使用するサービス プリンシパル ID が格納されます。 これらのコマンドでは、Bash コマンド言語が使用されます。

警告

Azure Virtual Machine Scale Sets を使用する AKS クラスターでクラスターの資格情報をリセットすると、ノード イメージのアップグレードが実行され、新しい資格情報でノードが更新されます。

SP_ID=$(az aks show --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME \
    --query servicePrincipalProfile.clientId -o tsv)

az ad app credential reset コマンドを使用して資格情報をリセットするには、サービス プリンシパル ID を含む変数 SP_ID を使用します。 次の例では、Azure プラットフォームによってサービス プリンシパルに対して新しいセキュリティで保護されたシークレットが生成され、SP_SECRET という名前の変数として格納できます。

SP_SECRET=$(az ad app credential reset --id "$SP_ID" --query password -o tsv)

次に、サービス プリンシパルの資格情報で AKS クラスターを更新します。 この手順は、AKS クラスターのサービス プリンシパルを更新するために必要です。

新しいサービス プリンシパルを作成する

Note

前のセクションで既存のサービス プリンシパル資格情報を更新した場合は、このセクションをスキップし、代わりにサービス プリンシパルの資格情報で AKS クラスターを更新します。

サービス プリンシパルを作成し、新しい資格情報を使用するように AKS クラスターを更新するには、az ad sp create-for-rbac コマンドを使用します。

az ad sp create-for-rbac --role Contributor --scopes /subscriptions/$SUBSCRIPTION_ID

出力は、次の出力例のようになります。 次の手順で使用するため、自分の appIdpassword を書き留めておきます。

{
  "appId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "name": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "password": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "tenant": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

az ad sp create-for-rbac コマンドの実行結果の出力を使用して、サービス プリンシパル ID とクライアント シークレットの各変数を定義します。 SP_IDappId であり、SP_SECRET はお使いの "パスワード" です。

SP_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
SP_SECRET=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

次に、新しいサービス プリンシパル資格情報で AKS クラスターを更新します。 この手順は、新しいサービス プリンシパル資格情報で AKS クラスターを更新するために必要です。

サービス プリンシパル資格情報で AKS クラスターを更新する

重要

大規模なクラスターでは、新しいサービス プリンシパルによる AKS クラスターの更新が完了するまでに時間がかかることがあります。 更新時の中断を最小限に抑えるために、ノード サージ アップグレード設定を確認してカスタマイズすることを検討してください。 中小規模のクラスターの場合、クラスターで新しい資格情報が更新されるまで数分かかります。

az aks update-credentials コマンドを実行して、新規または既存の資格情報で AKS クラスターを更新します。

az aks update-credentials \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $CLUSTER_NAME \
    --reset-service-principal \
    --service-principal "$SP_ID" \
    --client-secret "${SP_SECRET}"

新しい Microsoft Entra アプリケーション資格情報を使って AKS クラスターを更新する

Microsoft Entra 統合手順に従って Microsoft Entra サーバーおよびクライアントの新しいアプリケーションを作成することや、サービス プリンシパルのリセットと同じ方法に従って既存の Microsoft Entra アプリケーションをリセットすることができます。 その後、--reset-aad 変数を指定した az aks update-credentials コマンドを使用して、クラスターの Microsoft Entra アプリケーション資格情報を更新する必要があります。

az aks update-credentials \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $CLUSTER_NAME \
    --reset-aad \
    --aad-server-app-id $SERVER_APPLICATION_ID \
    --aad-server-app-secret $SERVER_APPLICATION_SECRET \
    --aad-client-app-id $CLIENT_APPLICATION_ID

次のステップ

この記事では、サービス プリンシパルと Microsoft Entra アプリケーションの各資格情報を更新またはローテーションする方法について説明しました。 AKS クラスター内のワークロードにマネージド ID を使用する方法の詳細については、AKS の認証と認可のベスト プラクティスに関する記事を参照してください。