AKS デスクトップでアクセス許可とロールベースのアクセス制御 (RBAC) を設定する

クラスター オペレーターロールと開発者ロールの AKS デスクトップ RBAC ロールの割り当てを示す図のスクリーンショット

クラスター オペレーターまたは開発者としての役割に応じて、開発者がアプリケーションをデプロイ、移行、または管理するための環境 (Project) を AKS デスクトップに提供したり、専用 AKS クラスターでのアプリケーションのデプロイと管理をセルフサービスで行ったりすることができます。 または、より多くの開発者にアプリケーションの管理、観察、トラブルシューティングを行うアクセス権を付与することもできます。

既定では、AKS デスクトップでプロジェクトを作成するときに、これを組織内の他のユーザーと共有でき、アクセス許可が設定されます。 ただし、時間の経過と同時にアクセス許可を維持したり、それらを自動化したり、適切なアクセス許可を設定して運用モデルを定義したりする必要がある場合があります。

この記事では、チーム メンバーが AKS デスクトップを操作できるように RBAC アクセス許可を管理する方法について説明します。

AKS デスクトップでは、現在、作成後にプロジェクトのアクセス許可を変更するための UI オプションは提供されていません。 プロジェクトの作成後にアクセス許可を更新したり、追加のユーザーにアクセス権を付与したりするには、この記事の説明に従って Azure portal または Azure CLI を使用します。

AKS デスクトップでプロジェクトを作成すると、 AKS マネージド名前空間 がクラスターと同じリソース グループに作成されます。

[前提条件]

  • Azure サブスクリプション。 Azure サブスクリプションをお持ちでない場合は、無料の Azure アカウントを作成できます。
  • Azure CLI バージョン 2.64.0 以降がインストールおよび構成されています。 az --version コマンドを使用してバージョンを確認します。 インストールまたはアップグレードする必要には、「Azure CLI のインストール」をご覧ください。
  • aks-preview Azure CLI 拡張機能。 az extension add --name aks-preview コマンドを使用してインストールします。
  • Azure ロールベースのアクセス制御 (RBAC) の基本的な理解については、「 Azure RBAC とは」「Azure 組み込みロール」を参照してください。
  • AKS クラスターと、AKS デスクトップを介して作成された AKS マネージド プロジェクトを含む Azure リソース グループ。
  • AKS デスクトップ要件を満たす AKS Standard クラスター 、またはアプリケーションが実行される Kubernetes クラスターである AKS 自動クラスター。
  • デプロイ用のコンテナー イメージを格納するための Azure Container Registry (ACR)

クラスター オペレーターの責任

クラスター オペレーターは、開発チームがアプリケーションをビルドしてデプロイできるようにする基本インフラストラクチャのプロビジョニングと構成を担当します。 貴社の責務:

  • 必要な Azure インフラストラクチャ (リソース グループ、AKS クラスター、ACR) の作成。
  • AKS クラスターとの ACR 統合の構成。
  • ユーザーがプロジェクトを作成するためのアクセス許可を割り当てる。
  • 必要に応じて、プロジェクト作成者にアクセス許可管理を委任します。

インフラストラクチャ リソースを作成する

インフラストラクチャ リソースを作成するには、Azure でリソースを作成するためのアクセス許可が必要です。 所有者 RBAC ロールが割り当てられていない場合は、リソースを作成するための共同作成者ロールと、他のユーザーにアクセス許可を割り当てるためのユーザー アクセス管理者ロールが必要です。 次の手順を使用してリソース グループにリソースを作成できるように、ユーザーにアクセス許可を割り当てます。

  1. リソース グループとクラスター名の環境変数を設定します。 プレースホルダーは、実際のリソース グループとクラスター名に置き換えてください。

    export RESOURCE_GROUP=<infra-resource-group>
    export CLUSTER_NAME=<cluster-name>
    export SUBSCRIPTION_ID=$(az account show --query id --output tsv)
    export ACR_NAME=<acr-name>
    
  2. az role assignment create コマンドを使用して、リソース グループにリソースを作成するために必要なロールを割り当てます。 <user-id>は、必ず適切なユーザーまたはサービス プリンシパル ID に置き換えてください。

    az role assignment create --role "Contributor" \
        --assignee <user-id> \
        --scope /subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP
    

ACR と AKS クラスターの統合

az aks update コマンドを使用して、AKS クラスターに Azure コンテナー レジストリをアタッチします。

az aks update \
    --resource-group $RESOURCE_GROUP \
    --name $CLUSTER_NAME \
    --attach-acr $ACR_NAME

プロジェクト作成モデルを選択する

クラスター オペレーターとして、開発者が AKS デスクトップでプロジェクトを操作する方法には、次の 2 つのオプションがあります。

  • セルフサービス モデル: 開発者は独自のプロジェクトを作成して管理します。 このアプローチにより、開発者は完全な自律性を得られますが、 Azure Kubernetes Service 名前空間共同作成者 ロールを付与する必要があります。 開発者は、独自のプロジェクトを作成すると、マネージド名前空間の 所有者 ロールを自動的に受け取り、アプリケーションのデプロイをすぐに開始できます。
  • マネージド モデル: 開発者向けにプロジェクトを作成し、アクセス権を付与します。 現時点では、プロジェクトの作成時にこれを構成できます。 この方法では、プロジェクトの作成をより詳細に制御できますが、プロジェクトの作成後にチーム メンバーを割り当てる必要がある場合は、次のセクションで説明するように、Azure portal または Azure CLI を使用して必要なアクセス許可を割り当てる必要があります。

セルフサービス モデル: 開発者が独自のプロジェクトを作成できるようにする

開発者が独自のプロジェクトを作成できるようにするには、AKS クラスターで Azure Kubernetes Service 名前空間共同作成者 ロールを割り当てます。 AKS デスクトップ プロジェクトでは、バックグラウンドで AKS マネージド名前空間 が作成され、このロールによって必要なアクセス許可が付与されます。

コマンドを使用して、az role assignment createロールを割り当てます。 プレースホルダーは、必ず適切なユーザーまたはサービス プリンシパル ID に置き換えてください。

az role assignment create \
    --role "Azure Kubernetes Service Namespace Contributor" \
    --assignee <developer-user-id> \
    --scope /subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.ContainerService/managedClusters/$CLUSTER_NAME

マネージド モデル: 開発者向けのプロジェクトを作成し、アクセス権を割り当てる

開発者に代わってプロジェクトを作成する場合は、3 つの重要なロールを割り当てて、クラスターにアクセスし、割り当てられた名前空間内で作業できるようにする必要があります。

  • Azure Kubernetes Service クラスター ユーザー ロール: 開発者は、 az aks get-credentials コマンドを使用してクラスター資格情報をダウンロードできます。
  • Azure Kubernetes Service 名前空間ユーザー: マネージド名前空間へのアクセスを許可します。
  • いずれかの Kubernetes RBAC ロール (閲覧者ライター、管理者): 名前空間で実行できるアクションを制御します。

開発者が AKS デスクトップでプロジェクトに正常にアクセスして操作するには、3 つのロールすべてが必要です。 Azure Kubernetes Service クラスター ユーザー ロールがないと、開発者はクラスターへの接続に必要な kubeconfig ファイルをダウンロードできません。

クラスター アクセスの割り当て

コマンドを使用して kubeconfig のダウンロードを有効にするには、az role assignment createを割り当てます。 プレースホルダーは、必ず適切なユーザーまたはサービス プリンシパル ID に置き換えてください。

az role assignment create \
    --role "Azure Kubernetes Service Cluster User Role" \
    --assignee <developer-user-id> \
    --scope /subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.ContainerService/managedClusters/$CLUSTER_NAME

名前空間アクセスの割り当て

コマンドを使用して、特定のプロジェクト/az role assignment create ロールを割り当てます。 プレースホルダーは、必ず適切なユーザーまたはサービス プリンシパル ID に置き換えてください。

export NAMESPACE_NAME=<namespace-or-project-name>

az role assignment create \
    --role "Azure Kubernetes Service Namespace User" \
    --assignee <developer-user-id> \
    --scope /subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.ContainerService/managedClusters/$CLUSTER_NAME/namespaces/$NAMESPACE_NAME

Kubernetes RBAC ロールを割り当てる

開発者が実行する必要がある内容に基づいて、適切な Kubernetes RBAC ロールを割り当てます。

  • 読み取り専用アクセスのためのAzure Kubernetes Service RBAC リーダー
  • アプリケーションをデプロイするための Azure Kubernetes Service RBAC ライター
  • 完全な管理制御を実現するAzure Kubernetes Service RBAC 管理
  1. az aks show コマンドを使用して AKS クラスター ID を取得します。

    AKS_ID=$(az aks show \
        --resource-group $RESOURCE_GROUP \
        --name $CLUSTER_NAME \
        --query id \
        --output tsv)
    
  2. az role assignment create コマンドを使用して、適切な Kubernetes RBAC ロールを割り当てます。 プレースホルダーは、必ず適切なユーザーまたはサービス プリンシパル ID に置き換えてください。 次の例では、 Azure Kubernetes Service RBAC ライター ロールを割り当てます。

    az role assignment create \
        --role "Azure Kubernetes Service RBAC Writer" \
        --assignee <developer-user-id> \
        --scope $AKS_ID/namespaces/$NAMESPACE_NAME
    

プロジェクト作成者にアクセス許可の割り当てを許可する (省略可能)

プロジェクト作成者が他のユーザーにアクセス許可を割り当てることができるようにするには、ユーザー アクセス管理者 ロールを付与します。 このアクセス許可により、ユーザーはインフラストラクチャ リソース グループ内の任意のリソースに対するアクセス許可を設定できます。

コマンドを使用してaz role assignment createロールを割り当てます。 プレースホルダーは、必ず適切なユーザーまたはサービス プリンシパル ID に置き換えてください。

az role assignment create \
    --role "User Access Administrator" \
    --assignee <user-id> \
    --scope /subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP

開発者の責任

開発者は、既存の AKS デスクトップ環境内で作業して、アプリケーションのデプロイ、プロジェクトの管理、ワークロードの監視を行います。 クラスター オペレーターは、これらのタスクを実行するために必要なアクセス許可を付与します。 貴社の責務:

  • プロジェクトへのアプリケーションの配置。
  • デプロイされたアプリケーションの表示と管理。
  • アプリケーションのメトリックとログの監視。
  • Project アクセスの変更 (必要な場合)。

開発者に必要なユーザー ロール

開発者として AKS デスクトップを使用するには、クラスター オペレーターが 3 つの重要なロールを割り当てる必要があります。

  • Azure Kubernetes Service クラスター ユーザー ロール: az aks get-credentials コマンドを使用してクラスター資格情報をダウンロードできます。これは、ローカル コンピューターまたは AKS デスクトップからクラスターに接続するための要件です。

  • Azure Kubernetes Service 名前空間ユーザー: 割り当てられたマネージド名前空間/プロジェクトへのアクセスを許可します。

  • いずれかの Kubernetes RBAC ロール (閲覧者ライター、管理者): 名前空間で実行できるアクションを制御します。

    • 読み取り専用アクセスのためのAzure Kubernetes Service RBAC リーダー
    • アプリケーションをデプロイするための Azure Kubernetes Service RBAC ライター
    • 完全な管理制御を実現するAzure Kubernetes Service RBAC 管理

アクセス許可の割り当て方法

アクセス許可は、AKS デスクトップでのプロジェクトの作成方法に基づいて割り当てられます。

  • プロジェクト作成者: マネージド名前空間の 所有者 ロールと、アプリケーションをデプロイするために必要なすべてのアクセス許可を自動的に受け取ります。

  • その他のユーザー: クラスター オペレーターまたは Project 作成者がアクセス権を付与する必要があります。 次のものを受け取ります。

    • クラスター上の Azure Kubernetes Service クラスター ユーザー ロール
    • 名前空間に対する Azure Kubernetes Service 名前空間ユーザー ロール。
    • Kubernetes RBAC ロールの 1 つ (閲覧者ライター、または 管理者)。

アプリケーションをデプロイするには、 ライター ロールまたは 管理者 ロールが必要です。 詳しくは、「マネージド名前空間の組み込みロール」をご覧ください。

アプリケーション メトリックを表示する

アプリケーションがデプロイされると、メトリックが設定されるまでに最大 10 分かかる場合があります。

Project ホーム画面では、CPU、メモリ、ネットワーク使用量などのアプリケーションのメトリックを表示できます。 これらのメトリックは、Azure Monitor ワークスペースによってサポートされる Managed Prometheus エンドポイントから取得されます。

メトリックを表示するには、Azure Monitor ワークスペースの 監視データ閲覧者 ロールが必要です。 このロールは、特定のプロジェクトだけでなく、クラスターのすべてのメトリックへのアクセスを許可します。

クラスター オペレーターは、次の手順を使用してこのアクセス許可を割り当てることができます。

  1. az alerts-management prometheus-rule-group list コマンドを使用して、クラスターによって使用される Azure Monitor ワークスペースを特定します。

    export WORKSPACE_ACC_FOR_PROM_RULES=$(az alerts-management prometheus-rule-group list \
        --resource-group "$RESOURCE_GROUP" \
        --query "[?clusterName=='$CLUSTER_NAME'] | [0].scopes[0]" \
        --output tsv)
    
  2. コマンドを使用してaz role assignment createロールを割り当てます。 プレースホルダーは、必ず適切なユーザーまたはサービス プリンシパル ID に置き換えてください。

    az role assignment create \
        --role "Monitoring Data Reader" \
        --assignee <user-id> \
        --scope $WORKSPACE_ACC_FOR_PROM_RULES
    

プロジェクトのアクセス許可を変更する

現在、AKS デスクトップでは、作成後にプロジェクトのアクセス許可を変更する UI オプションは提供されていません。 アクセス許可を更新する必要がある場合、または他のユーザーにアクセス権を付与する必要がある場合は、クラスター オペレーターと協力して、Azure portal または Azure CLI を使用してアクセス許可を更新してください。 次の手順では、Azure CLI を使用して必要なロールを割り当てる方法について説明します。

クラスター アクセスの割り当て

コマンドを使用して kubeconfig のダウンロードを有効にするには、az role assignment createを割り当てます。 プレースホルダーは、必ず適切なユーザーまたはサービス プリンシパル ID に置き換えてください。

az role assignment create \
    --role "Azure Kubernetes Service Cluster User Role" \
    --assignee <developer-user-id> \
    --scope /subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.ContainerService/managedClusters/$CLUSTER_NAME

名前空間アクセスの割り当て

コマンドを使用して、特定のプロジェクト/az role assignment create ロールを割り当てます。 プレースホルダーは、必ず適切なユーザーまたはサービス プリンシパル ID に置き換えてください。

export NAMESPACE_NAME=<namespace-or-project-name>

az role assignment create \
    --role "Azure Kubernetes Service Namespace User" \
    --assignee <developer-user-id> \
    --scope /subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.ContainerService/managedClusters/$CLUSTER_NAME/namespaces/$NAMESPACE_NAME

Kubernetes RBAC ロールを割り当てる

開発者が実行する必要がある内容に基づいて、適切な Kubernetes RBAC ロールを割り当てます。

  • 読み取り専用アクセスのためのAzure Kubernetes Service RBAC リーダー
  • アプリケーションをデプロイするための Azure Kubernetes Service RBAC ライター
  • 完全な管理制御を実現するAzure Kubernetes Service RBAC 管理
  1. az aks show コマンドを使用して AKS クラスター ID を取得します。

    AKS_ID=$(az aks show \
        --resource-group $RESOURCE_GROUP \
        --name $CLUSTER_NAME \
        --query id \
        --output tsv)
    
  2. az role assignment create コマンドを使用して、適切な Kubernetes RBAC ロールを割り当てます。 プレースホルダーは、必ず適切なユーザーまたはサービス プリンシパル ID に置き換えてください。 次の例では、 Azure Kubernetes Service RBAC ライター ロールを割り当てます。

    az role assignment create \
        --role "Azure Kubernetes Service RBAC Writer" \
        --assignee <developer-user-id> \
        --scope $AKS_ID/namespaces/$NAMESPACE_NAME
    

メトリックを表示するためのアクセス許可を付与する (省略可能)

メトリックを表示するアクセス許可を付与するには、「 アプリケーション メトリックの表示 」セクションの手順に従います。