Kubernetes 認可に Azure ロールベースのアクセス制御を使用する
この記事では、Kubernetes 認可に Azure RBAC を使用する方法について説明します。これにより、Azure リソース、AKS、Kubernetes リソース全体で統合された管理とアクセス制御が可能になります。 詳細については、「Kubernetes 認可のための Azure RBAC」を参照してください。
Note
Microsoft Entra ID と AKS の間の統合認証を使っているときは、Kubernetes のロールベースのアクセス制御 (Kubernetes RBAC) の対象として、Microsoft Entra のユーザー、グループ、またはサービス プリンシパルを使用できます。 この機能を使うと、Kubernetes に対するユーザーの ID と資格情報を個別に管理する必要がなくなります。 ただし、それでも Azure RBAC と Kubernetes RBAC は個別に設定して管理する必要があります。
開始する前に
- Azure CLI バージョン 2.24.0 以降がインストールされ、構成されている必要があります。 バージョンを確認するには、
az --version
を実行します。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。 kubectl
バージョン 1.18.3 以降が必要です。- Kubernetes 認可用の Azure RBAC を追加する前に、クラスターでマネージド Microsoft Entra 統合を有効にする必要があります。 マネージド Microsoft Entra 統合を有効にする必要がある場合は、「AKS で Microsoft Entra ID を使用する」を参照してください。
- CRD があり、カスタム ロール定義を作成する場合、現時点で CRD をカバーする唯一の方法は
Microsoft.ContainerService/managedClusters/*/read
を使用することです。 残りのオブジェクトについては、Microsoft.ContainerService/apps/deployments/read
などの特定の API グループを使用できます。 - 新しいロールの割り当てが認可サーバーに伝達されて更新されるまで、"最大で 5 分" かかることがあります。
- Azure RBAC for Kubernetes Authorizationでは、認証用に構成された Microsoft Entra テナントと、AKS クラスターが含まれるサブスクリプションのテナントが同じである必要があります。
マネージド Microsoft Entra 統合と Kubernetes 認可用の Azure RBAC を備えた新しい AKS クラスターを作成する
az group create
コマンドを使用して、Azure リソース グループを作成します。export RESOURCE_GROUP=<resource-group-name> export LOCATION=<azure-region> az group create --name $RESOURCE_GROUP --location $LOCATION
az aks create
コマンドを使用して、マネージド Microsoft Entra 統合と Kubernetes 認可用の Azure RBAC を備えた AKS クラスターを作成します。export CLUSTER_NAME=<cluster-name> az aks create \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --enable-aad \ --enable-azure-rbac \ --generate-ssh-keys
出力は次の出力例のようになります。
"AADProfile": { "adminGroupObjectIds": null, "clientAppId": null, "enableAzureRbac": true, "managed": true, "serverAppId": null, "serverAppSecret": null, "tenantId": "****-****-****-****-****" }
既存の AKS クラスターで Azure RBAC を有効にする
--enable-azure-rbac
フラグを指定したaz aks update
コマンドを使って、既存の AKS クラスターで Kubernetes の認可用に Azure RBAC を有効にします。az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --enable-azure-rbac
AKS クラスターで Kubernetes 認可用の Azure RBAC を無効にする
既存の AKS クラスターから Kubernetes 認可用の Azure RBAC を削除するには、
--disable-azure-rbac
フラグを指定したaz aks update
コマンドを使用します。az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --disable-azure-rbac
AKS の組み込みロール
AKS には、次の組み込みロールがあります。
Role | 説明 |
---|---|
Azure Kubernetes Service RBAC 閲覧者 | 名前空間内のほとんどのオブジェクトを表示するための読み取り専用アクセスが許可されます。 ロールまたはロールのバインドを表示することはできません。 このロールでは、Secrets の表示は許可されません。これは、Secrets の内容を読み取ると、名前空間の ServiceAccount 資格情報にアクセスでき、それにより名前空間の任意の ServiceAccount として API にアクセスできるようになるためです (特権エスカレーションの形式)。 |
Azure Kubernetes Service RBAC ライター | 名前空間内のほとんどのオブジェクトに対する読み取りと書き込みのアクセスが許可されます。 このロールでは、ロールまたはロールのバインドを表示または変更することはできません。 ただし、このロールを使用すると、Secrets にアクセスし、名前空間内の任意の ServiceAccount としてポッドを実行できるので、名前空間内の任意の ServiceAccount の API アクセス レベルを取得するために使用できます。 |
Azure Kubernetes Service RBAC 管理者 | 名前空間内で付与されることが意図された、管理者アクセスが許可されます。 名前空間内でロールおよびロール バインドを作成する能力など、名前空間 (またはクラスター スコープ) 内のほとんどのリソースへの読み取りおよび書き込みアクセスが許可されます。 このロールでは、リソース クォータまたは名前空間自体への書き込みアクセスは許可されません。 |
Azure Kubernetes Service RBAC クラスター管理者 | 任意のリソースに対して任意のアクションを実行できるスーパー ユーザー アクセスが許可されます。 これにより、クラスター内およびすべての名前空間内のすべてのリソースを完全に制御できます。 |
クラスター アクセス用のロールの割り当てを作成する
az aks show
コマンドを使用して AKS リソース ID を取得します。AKS_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query id --output tsv)
az role assignment create
コマンドを使用してロールの割り当てを作成します。<AAD-ENTITY-ID>
には、ユーザー名またはサービス プリンシパルのクライアント ID を指定できます。 次の例では、"Azure Kubernetes Service RBAC 管理者" ロールに対するロールの割り当てを作成します。az role assignment create --role "Azure Kubernetes Service RBAC Admin" --assignee <AAD-ENTITY-ID> --scope $AKS_ID
Note
az role assignment create
コマンドを使用し、スコープを目的の名前空間に設定することで、クラスター内の特定の名前空間を範囲とした Azure Kubernetes Service RBAC 閲覧者ロールと Azure Kubernetes Service RBAC ライター ロールの割り当てを作成できます。az role assignment create --role "Azure Kubernetes Service RBAC Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID/namespaces/<namespace-name>
カスタム ロールの定義を作成する
次のカスタム ロール定義の例では、ユーザーはデプロイの読み取りのみ許可され、それ以外は何も許可されません。 使用可能なアクションの全一覧については、Microsoft.ContainerService 操作に関するページを参照してください。
独自のカスタム ロール定義を作成するには、次のファイルをコピーし、
<YOUR SUBSCRIPTION ID>
を自分のサブスクリプション ID に置き換え、そのファイルをdeploy-view.json
として保存します。{ "Name": "AKS Deployment Reader", "Description": "Lets you view all deployments in cluster/namespace.", "Actions": [], "NotActions": [], "DataActions": [ "Microsoft.ContainerService/managedClusters/apps/deployments/read" ], "NotDataActions": [], "assignableScopes": [ "/subscriptions/<YOUR SUBSCRIPTION ID>" ] }
az role definition create
コマンドを使用し、--role-definition
を前の手順で作成したdeploy-view.json
ファイルに設定して、ロール定義を作成します。az role definition create --role-definition @deploy-view.json
az role assignment create
コマンドを使用して、ロール定義をユーザーまたはその他の ID に割り当てます。az role assignment create --role "AKS Deployment Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID
kubectl
で Kubernetes 認可に Azure RBAC を使用する
Azure Kubernetes Service クラスター ユーザー組み込みロールがあることを確認し、
az aks get-credentials
コマンドを使用して AKS クラスターの kubeconfig を取得します。az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
これで、
kubectl
を使ってクラスターを管理できます。 たとえば、kubectl get nodes
を使用してクラスター内のノードを一覧表示できます。kubectl get nodes
出力例:
NAME STATUS ROLES AGE VERSION aks-nodepool1-93451573-vmss000000 Ready agent 3h6m v1.15.11 aks-nodepool1-93451573-vmss000001 Ready agent 3h6m v1.15.11 aks-nodepool1-93451573-vmss000002 Ready agent 3h6m v1.15.11
kubelogin
で Kubernetes 認可に Azure RBAC を使用する
AKS で kubelogin
プラグインが作成されました。これは、非対話型ログイン、以前の kubectl
バージョン、新しいクラスターにサインインする必要のない複数クラスター間での SSO の利用などのシナリオを実現するのに役立ちます。
kubelogin
プラグインを使うには、次のコマンドを実行します。export KUBECONFIG=/path/to/kubeconfig kubelogin convert-kubeconfig
これで、
kubectl
を使ってクラスターを管理できます。 たとえば、kubectl get nodes
を使用してクラスター内のノードを一覧表示できます。kubectl get nodes
出力例:
NAME STATUS ROLES AGE VERSION aks-nodepool1-93451573-vmss000000 Ready agent 3h6m v1.15.11 aks-nodepool1-93451573-vmss000001 Ready agent 3h6m v1.15.11 aks-nodepool1-93451573-vmss000002 Ready agent 3h6m v1.15.11
リソースをクリーンアップする
ロール割り当ての削除
az role assignment list
コマンドを使って、ロールの割り当ての一覧を表示します。az role assignment list --scope $AKS_ID --query [].id --output tsv
az role assignment delete
コマンドを使って、ロールの割り当てを削除します。az role assignment delete --ids <LIST OF ASSIGNMENT IDS>
ロールの定義の削除
az role definition delete
コマンドを使って、カスタム ロール定義を削除します。az role definition delete --name "AKS Deployment Reader"
リソース グループと AKS クラスターを削除する
az group delete
コマンドを使って、リソース グループと AKS クラスターを削除します。az group delete --name $RESOURCE_GROUP --yes --no-wait
次のステップ
AKS の認証、認可、Kubernetes RBAC、Azure RBAC について詳しくは、以下を参照してください。
Azure Kubernetes Service