信頼されたアクセスを使って Azure Kubernetes Service の Azure リソースに対するセキュリティで保護されたアクセスを取得する

Azure Kubernetes Service (AKS) と統合される多くの Azure サービスでは、Kubernetes API サーバーにアクセスする必要があります。 ネットワーク アクセスのためにこれらのサービスに管理者アクセス権を付与することや AKS クラスターをパブリックにすることを回避するために、AKS の信頼されたアクセス機能を使用できます。

この機能により、プライベート エンドポイントを必要とせずに、サービスは Azure バックエンドを使って AKS API サーバーに安全にアクセスできます。 この機能では、Microsoft Entra アクセス許可を持つ ID に依存するのではなく、自分のシステム割り当てマネージド ID を使って、AKS クラスターで使う管理サービスとアプリケーションの認証を受けることができます。

この記事では、信頼されたアクセスを使って、Azure サービスから AKS の Kubernetes API サーバーに安全にアクセスできるようにする方法について説明します。

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 クラスターにアクセスできます。

前提条件

AKS クラスターを作成する

クラスターにアクセスする Azure リソースと同じサブスクリプションに AKS クラスターを作成します。

必要な信頼されたアクセス ロールを選ぶ

選ぶロールは、AKS クラスターにアクセスする Azure サービスによって異なります。 Azure サービスは、Azure サービスから AKS への接続を構築するロールとロール バインディングの作成に役立ちます。

信頼されたアクセス ロール バインディングを作成する

使うロールを確認した後、Azure CLI を使って、AKS クラスターに信頼されたアクセス ロール バインディングを作成します。 ロール バインディングにより、選んだロールと Azure サービスが関連付けられます。

# Create a Trusted Access role binding in an AKS cluster

az aks trustedaccess rolebinding create  --resource-group <AKS resource group> --cluster-name <AKS cluster name> -n <role binding name> -s <connected service resource ID> --roles <roleName1, roleName2>

次に例を示します。

# Sample command

az aks trustedaccess rolebinding create \
-g myResourceGroup \
--cluster-name myAKSCluster -n test-binding \
--source-resource-id /subscriptions/000-000-000-000-000/resourceGroups/myResourceGroup/providers/Microsoft.MachineLearningServices/workspaces/MyMachineLearning \
--roles Microsoft.Compute/virtualMachineScaleSets/test-node-reader,Microsoft.Compute/virtualMachineScaleSets/test-admin

既存の信頼されたアクセス ロール バインディングを更新する

ソース サービスが関連付けられている既存のロール バインディングの場合は、ロール バインディングを新しいロールで更新できます。

Note

アドオン マネージャーは 5 分ごとにクラスターを更新するため、新しいロール バインディングが有効になるまでに最長 5 分かかる場合があります。 新しいロール バインディングが有効になる前は、既存のロール バインディングが引き続き機能します。

az aks trusted access rolebinding list --name <role binding name> --resource-group <resource group> を使って、現在のロール バインディングを確認できます。

# Update the RoleBinding command

az aks trustedaccess rolebinding update --resource-group <AKS resource group> --cluster-name <AKS cluster name> -n <existing role binding name>  --roles <newRoleName1, newRoleName2>

次に例を示します。

# Update the RoleBinding command with sample resource group, cluster, and roles

az aks trustedaccess rolebinding update \
--resource-group myResourceGroup \
--cluster-name myAKSCluster -n test-binding \
--roles Microsoft.Compute/virtualMachineScaleSets/test-node-reader,Microsoft.Compute/virtualMachineScaleSets/test-admin

信頼されたアクセス ロール バインディングを表示する

特定の信頼されたアクセス ロール バインディングを表示するには、az aks trustedaccess rolebinding show コマンドを使います。

az aks trustedaccess rolebinding show --name <role binding name> --resource-group <AKS resource group> --cluster-name <AKS cluster name>

クラスターに対するすべての信頼されたアクセス ロール バインディングを一覧表示する

クラスターの信頼されたアクセス ロール バインディングをすべて一覧表示するには、az aks trustedaccess rolebinding list コマンドを使います。

az aks trustedaccess rolebinding list --resource-group <AKS resource group> --cluster-name <AKS cluster name>

クラスターの信頼されたアクセス ロール バインディングを削除する

警告

既存の信頼されたアクセス ロール バインディングを削除すると、Azure サービスは AKS クラスターから切断されます。

az aks trustedaccess rolebinding delete コマンドを使って、既存の信頼されたアクセス ロール バインディングを削除します。

az aks trustedaccess rolebinding delete --name <role binding name> --resource-group <AKS resource group> --cluster-name <AKS cluster name>