Azure ロールベースのアクセス制御を使用して、Azure Kubernetes Service (AKS) 内の Kubernetes 構成ファイルへのアクセス権を定義する
kubectl
ツールを使用すると、Kubernetes クラスターを操作できます。 Azure CLI には、kubectl
を使って AKS クラスターに接続するためのアクセス資格情報と kubeconfig 構成ファイルを簡単に取得できる手段が用意されています。 Azure ロールベースのアクセス制御 (Azure RBAC) を使用して、kubeconfig ファイルにアクセスできる人物と、その人物が保有するアクセス許可を制限できます。
この記事では、AKS クラスターの構成情報を取得できるユーザーを制限する Azure ロールを割り当てる方法について説明します。
開始する前に
- この記事は、AKS クラスターがすでに存在していることを前提としています。 AKS クラスターが必要な場合は、Azure CLI、Azure PowerShell、または Azure portal を使用して作成します。
- この記事では、Azure CLI バージョン 2.0.65 以降を実行していることも必要です。 バージョンを確認するには、
az --version
を実行します。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。
クラスター ロールで利用可能なアクセス許可
kubectl
ツールを使って AKS クラスターを操作するときは、kubeconfig という名前の構成ファイルで、クラスターの接続情報を定義します。 この構成ファイルは通常、 ~/.kube/config にあります。この kubeconfig ファイルでは、複数のクラスターを定義できます。 kubectl config use-context
コマンドを使用して、クラスターを切り替えることができます。
az aks get-credentials
コマンドを実行すると、任意の AKS クラスターのアクセス資格情報を取得し、これらの資格情報を kubeconfig ファイルにマージすることができます。 これらの資格情報へのアクセスを制御するには、Azure RBAC を使用できます。 Azure ロールを使えば、kubeconfig ファイルを取得できる人物と、その人物がクラスター内で保有するアクセス許可を定義できます。
Microsoft Entra のユーザーまたはグループに適用できる Azure ロールは以下の 2 種類です。
Azure Kubernetes Service クラスター管理者ロール
Microsoft.ContainerService/managedClusters/listClusterAdminCredential/action
API 呼び出しにアクセスできます。 この API 呼び出しは、クラスター管理者の資格情報を一覧表示するものです。- clusterAdmin ロール用の kubeconfig をダウンロードできます。
Azure Kubernetes Service クラスター ユーザー ロール
Microsoft.ContainerService/managedClusters/listClusterUserCredential/action
API 呼び出しにアクセスできます。 この API 呼び出しは、クラスター ユーザーの資格情報を一覧表示するものです。- clusterUser ロール用の kubeconfig をダウンロードできます。
Note
Microsoft Entra ID を使用するクラスターの場合、clusterUser ロールを割り当てたユーザーには空の kubeconfig ファイルが設定されており、ログインが要求されます。 ログインすると、Microsoft Entra のユーザーまたはグループ設定に基づくアクセスが可能になります。 clusterAdmin ロールのユーザーは管理者アクセス権を持ちます。
Microsoft Entra ID を使用しないクラスターの場合、clusterUser ロールの効果は clusterAdmin ロールと同じです。
ロールのアクセス許可をユーザーまたはグループに割り当てる
使用可能なロールのいずれかを割り当てるには、以下の手順に従って、AKS クラスターのリソース ID と、Microsoft Entra ユーザー アカウントまたはグループの ID を取得する必要があります。
az aks show
コマンドを使用して、myResourceGroup リソース グループに存在する myAKSCluster という名前のクラスターのリソース ID を取得します。 必要に応じて、独自のクラスター名とリソース グループ名を指定してください。az account show
コマンドとaz ad user show
コマンドを使用して、ユーザー ID を取得します。az role assignment create
コマンドを使用して、ロールを割り当てます。
次の例では、"Azure Kubernetes Service クラスター管理者ロール" を個々のユーザー アカウントに割り当てます。
# Get the resource ID of your AKS cluster
AKS_CLUSTER=$(az aks show --resource-group myResourceGroup --name myAKSCluster --query id -o tsv)
# Get the account credentials for the logged in user
ACCOUNT_UPN=$(az account show --query user.name -o tsv)
ACCOUNT_ID=$(az ad user show --id $ACCOUNT_UPN --query objectId -o tsv)
# Assign the 'Cluster Admin' role to the user
az role assignment create \
--assignee $ACCOUNT_ID \
--scope $AKS_CLUSTER \
--role "Azure Kubernetes Service Cluster Admin Role"
Microsoft Entra グループにアクセス許可を割り当てる場合は、"ユーザー" ではなく "グループ" のオブジェクト ID を使用して、上の例のように --assignee
パラメーターを更新します。
グループのオブジェクト ID を取得するには、az ad group show
コマンドを使用します。 次のコマンドは、appdev という名前の Microsoft Entra グループのオブジェクト ID を取得します。
az ad group show --group appdev --query objectId -o tsv
重要
Microsoft Entra ゲスト ユーザーを使用する場合など、状況によっては、アカウントの user.name と userPrincipalName が同じでないことがあります。
$ az account show --query user.name -o tsv
user@contoso.com
$ az ad user list --query "[?contains(otherMails,'user@contoso.com')].{UPN:userPrincipalName}" -o tsv
user_contoso.com#EXT#@contoso.onmicrosoft.com
この場合は、ACCOUNT_UPN に Microsoft Entra ユーザーの userPrincipalName の値を設定します。 たとえば、アカウント user.name が user@contoso.com である場合、このアクションは次の例のようになります。
ACCOUNT_UPN=$(az ad user list --query "[?contains(otherMails,'user@contoso.com')].{UPN:userPrincipalName}" -o tsv)
構成情報を取得および確認する
ロールが割り当てられたら、az aks get-credentials
コマンドを使用して AKS クラスターの kubeconfig 定義を取得します。 次の例は --admin 資格情報を取得するもので、ユーザーに "クラスター管理者ロール" が付与されていれば正常に動作します。
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster --admin
その後 kubectl config view
コマンドを使うと、クラスターの "コンテキスト" のところで管理者の構成情報が適用されていることを確認できます。
$ kubectl config view
出力は次の出力例のようになります。
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: DATA+OMITTED
server: https://myaksclust-myresourcegroup-19da35-4839be06.hcp.eastus.azmk8s.io:443
name: myAKSCluster
contexts:
- context:
cluster: myAKSCluster
user: clusterAdmin_myResourceGroup_myAKSCluster
name: myAKSCluster-admin
current-context: myAKSCluster-admin
kind: Config
preferences: {}
users:
- name: clusterAdmin_myResourceGroup_myAKSCluster
user:
client-certificate-data: REDACTED
client-key-data: REDACTED
token: e9f2f819a4496538b02cefff94e61d35
ロールのアクセス許可を削除する
ロールの割り当てを削除するには、az role assignment delete
コマンドを使用します。 上の手順で取得したアカウント ID とクラスターのリソース ID を指定します。 ユーザーではなくグループにロールを割り当てた場合は、--assignee
パラメーターに対して、アカウント オブジェクト ID ではなく、適切なグループ オブジェクト ID を指定します。
az role assignment delete --assignee $ACCOUNT_ID --scope $AKS_CLUSTER
次のステップ
AKS クラスターへのアクセスに強力なセキュリティを適用するには、Microsoft Entra 認証を統合します。
Azure Kubernetes Service