信頼されたアクセスを使って Azure Kubernetes Service の Azure リソースに対するセキュリティで保護されたアクセスを取得する
この記事では、信頼されたアクセスを使用して、Azure サービス用に Azure Kubernetes Service (AKS) 内の Kubernetes API サーバーへのセキュリティで保護されたアクセスを取得する方法について説明します。
この信頼されたアクセス機能により、プライベート エンドポイントを必要とせずに、Azure バックエンドを使用して、AKS API サーバーへのセキュリティで保護されたアクセスをサービスに提供します。 この機能では、Microsoft Entra アクセス許可を持つ ID に依存するのではなく、自分のシステム割り当てマネージド ID を使って、AKS クラスターで使う管理サービスとアプリケーションの認証を受けることができます。
Note
信頼されたアクセス API は一般提供されています。 Azure CLI には一般提供 (GA) サポートを提供していますが、まだプレビュー段階であり、aks-preview 拡張機能を使う必要があります。
信頼されたアクセス機能の概要
信頼されたアクセスは、次のシナリオに対応します。
- 認可された IP 範囲が設定されている場合、またはプライベート クラスター内にある場合、プライベート エンドポイント アクセス モデルを実装しない限り、Azure サービスは Kubernetes API サーバーにアクセスできない可能性があります。
- Azure サービス管理者に Kubernetes API へのアクセス権を付与することは、最低特権アクセスのベスト プラクティスに従っていないため、特権のエスカレーションや資格情報漏えいのリスクにつながる恐れがあります。 たとえば、高い特権を持つサービス間アクセス許可を実装する必要があるとしても、監査レビュー中には理想的ではありません。
信頼されたアクセスを使うと、"ロール バインディング" という Azure リソースを使って、AKS クラスターへのアクセスを許可されているリソースのシステム割り当てマネージド ID に明示的に同意することができます。 お使いの Azure リソースは、システム割り当てマネージド ID 認証を使って、AKS リージョン ゲートウェイ経由で AKS クラスターにアクセスします。 適切な Kubernetes アクセス許可は、"ロール" という Azure リソースを介して割り当てられます。 信頼されたアクセスを使うと、プライベート クラスター、ローカル アカウントがオフになっているクラスター、Microsoft Entra クラスター、認可された IP 範囲クラスターなどのさまざまな構成の AKS クラスターにアクセスできます。
前提条件
- アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます。
- システム割り当てマネージド ID をサポートするリソースの種類。
- Azure CLI バージョン 2.53.0 以降。 バージョンを確認するには
az --version
を実行します。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。 - さまざまなシナリオで使うロールについては、以下の記事を参照してください。
- クラスターにアクセスする Azure リソースと同じサブスクリプションに AKS クラスターを作成します。
クラスターへの接続
az aks get-credentials
コマンドを使用して、クラスターに接続するように kubectl
を構成します。
export RESOURCE_GROUP_NAME="myResourceGroup"
export CLUSTER_NAME="myClusterName"
az aks get-credentials --resource-group ${RESOURCE_GROUP_NAME} --name ${CLUSTER_NAME} --overwrite-existing
kubectl get
コマンドを使用して、ご利用のクラスターへの接続を確認します。
kubectl get nodes
必要な信頼されたアクセス ロールを選ぶ
選ぶロールは、AKS クラスターにアクセスする Azure サービスによって異なります。 Azure サービスは、Azure サービスから AKS への接続を構築するロールとロール バインディングの作成に役立ちます。
必要なロールを見つけるには、AKS に接続する Azure サービスのドキュメントを参照してください。 また、Azure CLI を使用し、「az aks trustedaccess role list --location <location>
」コマンドを使用して、Azure サービスで使用可能なロールを一覧表示することもできます。
信頼されたアクセス ロール バインディングを作成する
使うロールを確認した後、Azure CLI を使って、AKS クラスターに信頼されたアクセス ロール バインディングを作成します。 ロール バインディングにより、選んだロールと Azure サービスが関連付けられます。
export ROLE_BINDING_NAME="myRoleBindingName"
export SOURCE_RESOURCE_ID="mySourceResourceID"
export ROLE_NAME_1="myRoleName1"
export ROLE_NAME_2="myRoleName2"
az aks trustedaccess rolebinding create --resource-group ${RESOURCE_GROUP_NAME} --cluster-name ${CLUSTER_NAME} --name ${ROLE_BINDING_NAME} --source-resource-id ${SOURCE_RESOURCE_ID} --roles ${ROLE_NAME_1},${ROLE_NAME_2}
結果:
{
"id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/${RESOURCE_GROUP_NAME}/providers/Microsoft.ContainerService/managedClusters/${CLUSTER_NAME}/trustedAccessRoleBindings/${ROLE_BINDING_NAME}",
"name": "${ROLE_BINDING_NAME}",
"provisioningState": "Succeeded",
"resourceGroup": "${RESOURCE_GROUP_NAME}",
"roles": [
"${ROLE_NAME_1}",
"${ROLE_NAME_2}"
],
"sourceResourceId": "${SOURCE_RESOURCE_ID}",
"systemData": null,
"type": "Microsoft.ContainerService/managedClusters/trustedAccessRoleBindings"
}
既存の信頼されたアクセス ロール バインディングを更新する
ソース サービスが関連付けられている既存のロール バインドの場合は、「az aks trustedaccess rolebinding update --resource-group $RESOURCE_GROUP_NAME --cluster-name $CLUSTER_NAME --name $ROLE_BINDING_NAME --roles $ROLE_NAME_3,$ROLE_NAME_4
」コマンドを使用して、新しいロールでそのロール バインドを更新できます。 このコマンドは、指定した新しいロールでロール バインドを更新します。
Note
アドオン マネージャーは 5 分ごとにクラスターを更新するため、新しいロール バインディングが有効になるまでに最長 5 分かかる場合があります。 新しいロール バインディングが有効になる前は、既存のロール バインディングが引き続き機能します。
az aks trusted access rolebinding list
コマンドを使用して、現在のロール バインドを確認できます。
信頼されたアクセス ロール バインディングを表示する
特定の信頼されたアクセス ロール バインドを表示するには、「az aks trustedaccess rolebinding show --name $ROLE_BINDING_NAME --resource-group $RESOURCE_GROUP_NAME --cluster-name $CLUSTER_NAME
」コマンドを使用します。
クラスターに対するすべての信頼されたアクセス ロール バインディングを一覧表示する
クラスターのすべての信頼されたアクセス ロール バインドを一覧表示するには、「az aks trustedaccess rolebinding list --resource-group $RESOURCE_GROUP_NAME --cluster-name $CLUSTER_NAME
」コマンドを使用します。
関連するコンテンツ
Azure Kubernetes Service