Azure ロールベースのアクセス制御を使用して、Azure Kubernetes Service (AKS) 内の Kubernetes 構成ファイルへのアクセス権を定義する

kubectl ツールを使用すると、Kubernetes クラスターを操作できます。 Azure CLI には、kubectl を使って AKS クラスターに接続するためのアクセス資格情報と kubeconfig 構成ファイルを簡単に取得できる手段が用意されています。 Azure ロールベースのアクセス制御 (Azure RBAC) を使用して、kubeconfig ファイルにアクセスできる人物と、その人物が保有するアクセス許可を制限できます。

この記事では、AKS クラスターの構成情報を取得できるユーザーを制限する Azure ロールを割り当てる方法について説明します。

開始する前に

  • この記事は、AKS クラスターがすでに存在していることを前提としています。 AKS クラスターが必要な場合は、Azure CLIAzure 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 を取得する必要があります。

  1. az aks show コマンドを使用して、myResourceGroup リソース グループに存在する myAKSCluster という名前のクラスターのリソース ID を取得します。 必要に応じて、独自のクラスター名とリソース グループ名を指定してください。
  2. az account show コマンドと az ad user show コマンドを使用して、ユーザー ID を取得します。
  3. 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.nameuserPrincipalName が同じでないことがあります。

$ 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.nameuser@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 認証を統合します。