次の方法で共有


Privileged Identity Management (PIM) を使用して Azure Kubernetes Service (AKS) クラスターへのアクセスを制御する

さまざまなチームのアクセス許可を設定する場合は、指定したチームに既定のアクセス許可を設定し、必要に応じて特定のユーザーに特権アクセスを付与することができます。 Microsoft Entra ID で Azure Kubernetes Service (AKS) を使用すると、Just-In-Time (JIT) 要求用に Privileged Identity Management (PIM) を設定できます。

この記事では、次のことについて説明します。

  • たとえば、Microsoft Entra グループ メンバーシップに基づいて AKS クラスターにアクセスしたり操作を実行したりする、グループの既定のロールを設定します。
  • AKS クラスターにアクセスするための基本的なロールを構成します。
  • 自分でロールをアクティブにして、AKS クラスターへの Just-In-Time アクセスを取得します。
  • Just-In-Time アクセスの承認要求を承認または拒否するように承認者を設定します。

Note

Microsoft Entra Privileged Identity Management (PIM) には、Premium P2 SKU を必要とする Microsoft Entra ID P2 または Microsoft Entra ID Governance 機能があります。 詳細については、「Microsoft Entra ID ガバナンス ライセンスの基礎」と価格ガイドに関する記事を参照してください。

前提条件

この記事では、Microsoft Entra ID 統合を使用する既存の AKS クラスターがあることを前提としています。 お持ちでない場合は、Microsoft Entra ID 統合を使用して AKS クラスターを作成するに関する記事を参照してください。

Microsoft Entra ID でデモ グループを作成する

このセクションでは、Microsoft Entra ID に 3 つのグループを作成します。

  • default: このグループには、AKS クラスター内のリソースへの "読み取り専用" アクセス (Azure Kubernetes Service RBAC Reader) があります。
  • admin: このグループには、AKS クラスター内のリソースへの "管理者" アクセス (Azure Kubernetes Service RBAC Admin) があります。
  • approver: このグループには、AKS クラスターへの Just-In-Time アクセスの "要求を承認または拒否する" ためのアクセス許可があります。

別の approver グループを作成する代わりに、default および admin グループのみを使用できます。 ただし、admin グループに承認アクセス許可を含める場合、Just-In-Time アクセスを取得するメンバーは、自分の要求と他のユーザーの要求を承認できます。 運用環境ではこの構成を使用しないことをお勧めしますが、テスト目的には役立ちます。

default グループを作成する

  1. az aks show コマンドを使用して、AKS クラスターの "リソース ID" を取得します。

    AKS_ID=$(az aks show \
        --resource-group <resource-group-name> \
        --name <cluster-name> \
        --query id \
        --output tsv)
    
  2. az group show コマンドを使用して、AKS クラスターの "リソース グループ ID" を取得します。

    RG_ID=$(az group show \
        --resource-group <resource-group-name> \
        --query id \
        --output tsv)
    
  3. az ad group create コマンドを使用して、default グループを作成します。

    DEFAULT_ID=$(az ad group create \
        --display-name default \
        --mail-nickname default \
        --query id \
        --output tsv)
    
  4. az role assignment create コマンドを使って、default グループに Azure ロールの割り当てを作成します。

    特定の要件に応じて、default グループに割り当てることができる "3 つ" のロールがあります。

    • Azure Kubernetes Service RBAC Reader: AKS クラスターのスコープで割り当てられ、クラスター内のほとんどのリソースへの基本的な読み取り専用アクセスが提供されます。
    • Reader: リソース グループのスコープで割り当てられ、リソース グループ内のリソースへの読み取り専用アクセスが提供されます。
    • Azure Kubernetes Service Cluster User Role: AKS クラスターのスコープで割り当てられ、AKS クラスターの kubeconfig コンテキストを取得するためのアクセスが付与されます。
    # Assign the Azure Kubernetes Service RBAC Reader role to the default group
    az role assignment create \
        --role "Azure Kubernetes Service RBAC Reader" \
        --assignee $DEFAULT_ID \
        --scope $AKS_ID
    
    # Assign the Reader role to the default group
    az role assignment create \
        --role "Reader" \
        --assignee $DEFAULT_ID \
        --scope $RG_ID
    
    # Assign the Azure Kubernetes Service Cluster User Role to the default group
    az role assignment create \
        --role "Azure Kubernetes Service Cluster User Role" \
        --assignee $DEFAULT_ID \
        --scope $AKS_ID
    

admin グループを作成する

  1. az ad group create コマンドを使用して、admin グループを作成します。

    ADMIN_ID=$(az ad group create \
        --display-name admin \
        --mail-nickname admin \
        --query id \
        --output tsv)
    
  2. az role assignment create コマンドを使用して、Azure Kubernetes Service RBAC Admin ロールを admin グループに割り当てます。

    az role assignment create \
        --role "Azure Kubernetes Service RBAC Admin" \
        --assignee $ADMIN_ID \
        --scope $AKS_ID
    

Note

手動スケーリングなど、admin グループのユーザーにノード プール設定の変更を許可する場合は、次のコマンドを使用して、クラスター ノード プールに Contributor ロールの割り当てを作成する必要があります。

az role assignment create \
   --role "Contributor" \
   --assignee $ADMIN_ID \
   --scope $AKS_ID/nodepools/<node-pool-name>

これにより、AKS リソースのスケールインまたはアウトを行うためのアクセス許可のみが付与されることに注意してください。 仮想マシン スケール セット リソースでのスケールインまたはアウトを許可する場合は、仮想マシン スケール セット レベルで割り当てを作成する必要があります。

approver グループを作成する

  • az ad group create コマンドを使用して、approver グループを作成します。

    APPROVER_ID=$(az ad group create \
        --display-name approver \
        --mail-nickname approver \
        --query id \
        --output tsv)
    

Microsoft Entra ID でデモ ユーザーを作成する

このセクションでは、既定のロールのみを持つ通常のユーザーと、"通常" のユーザーからの Just-In-Time 要求を承認または拒否できる特権ユーザーの 2 人のユーザーを Microsoft Entra ID に作成します。

  1. az ad user create コマンドを使用して、通常のユーザーを作成します。

    DOMAIN=contoso.com
    PASSWORD=Password1
    
    NUSER_ID=$(az ad user create \
        --display-name n01 \
        --password ${PASSWORD} \
        --user-principal-name n01@${DOMAIN} \
        --query id \
        --output tsv)
    
  2. az ad group member add コマンドを使用して、通常のユーザーを default グループに追加します。

    az ad group member add \
        --group $DEFAULT_ID \
        --member-id $NUSER_ID
    
  3. az ad user create コマンドを使用して、特権ユーザーを作成します。

    PUSER_ID=$(az ad user create \
        --display-name p01 \
        --password ${PASSWORD} \
        --user-principal-name p01@${DOMAIN} \
        --query id \
        --output tsv)
    
  4. az ad group member add コマンドを使用して、特権ユーザーを approver グループに追加します。

    az ad group member add \
        --group $APPROVER_ID \
        --member-id $PUSER_ID
    

admin グループの Privileged Identity Management (PIM) を有効にする

  1. Azure portal のホーム ページで、[Microsoft Entra ID] を選択します。
  2. サービス メニューの [管理][グループ] を選択し、次に admin グループを選択します。
  3. サービス メニューの [アクティビティ][Privileged Identity Management] を選択し、次に [このグループの PIM を有効にする] を選択します。

admin グループの承認者を設定する

  1. Azure portal のホーム ページで、[Privileged Identity Management] を検索して選択します。

  2. サービス メニューの [管理][グループ] を選択し、次に admin グループを選択します。

  3. サービス メニューの [管理][割り当て]>[割り当ての追加] を選択します。

  4. [割り当ての追加] ページの [メンバーシップ] タブで、選択したロールとして [メンバー] を選択し、選択したメンバーとして [既定] を選択し、次に [次へ] を選択します。

  5. [設定] タブで、割り当ての種類として [資格あり] を選択し、次に [割り当てる] を選択します。

  6. サービス メニューの [管理][設定]>[メンバー]>[編集] を選択します。

  7. [ロール設定の編集 - メンバー] ページで、[アクティブにするには承認が必要です] チェック ボックスをオンにし、選択した承認者として approver グループを追加します。

    Note

    [アクティブにするには承認が必要です] チェック ボックスをオンにしない場合、default グループのユーザーは自分でロールをアクティブにして、承認なしで AKS クラスターへの Just-In-Time アクセスを取得できます。 approver グループのユーザーは、グループのメンバーである必要があります。 ユーザーを [所有者] として設定した場合でも、グループ所有者にはロールの割り当てではなく、グループに対する管理者権限しかないため、Just-In-Time 要求を確認することはできません。 競合することなく、同じグループのメンバーと所有者としてユーザーを設定できます。

  8. その他の必要な変更を行ってから、[更新] を選択します。

PIM 構成の詳細については、グループの PIM の構成に関する記事を参照してください。

既定のロールを使用してクラスター リソースを操作する

次に、default グループのメンバーである通常のユーザーを使用して、AKS クラスターへのアクセスを試みることができます。

  1. az login コマンドを使用して、通常のユーザーとして Azure portal にログインします。

    az login --username n01@$DOMAIN --password ${PASSWORD}
    
  2. az aks get-credentials コマンドを使用して、クラスターにアクセスするためのユーザー資格情報を取得します。

    az aks get-credentials --resource-group <resource-group-name> --name <cluster-name>
    
  3. kubectl get コマンドを使用して、クラスター ポッドにアクセスしてみてください。

    kubectl get pods --namespace kube-system
    

    出力は次の出力例のようになります。これは、kube-system 名前空間のポッドを示しています。

    NAME                                   READY   STATUS    RESTARTS   AGE
    azure-ip-masq-agent-2rdd9              1/1     Running   0          30h
    azure-policy-767c9d9d9d-886rf          1/1     Running   0          31h
    cloud-node-manager-92t6h               1/1     Running   0          30h
    coredns-789789675-b2dhg                1/1     Running   0          31h
    coredns-autoscaler-77bbc46446-pgt92    1/1     Running   0          31h
    csi-azuredisk-node-lnzrf               3/3     Running   0          30h
    csi-azurefile-node-lhbxr               3/3     Running   0          31h
    konnectivity-agent-7645d94b-9wqct      1/1     Running   0          30h
    kube-proxy-lkx4w                       1/1     Running   0          31h
    metrics-server-5955767688-lpbjb        2/2     Running   0          30h
    
  4. kubectl get コマンドを使用して、クラスター シークレットにアクセスしてみてください。

    kubectl get secrets --namespace kube-system
    

    出力は次の出力例のようになります。これは、ユーザーがシークレットにアクセスするためのアクセス許可を持っていないため、エラー メッセージを示しています。

    Error from server (Forbidden): secrets is forbidden: User "[email protected]" cannot list resource "secrets" in API group "" in the namespace "kube-system": User does not have access to the resource in Azure. Update role assignment to allow access.
    

    Azure Kubernetes Service RBAC Reader ロールにはシークレットにアクセスするためのアクセス許可がないため、このエラーが予想されます。

AKS クラスターへの Just-In-Time アクセスを要求する

今回は、「Privileged Identity Management でグループのメンバーシップまたは所有権をアクティブにする」の手順を使用して、Just-In-Time アクセスを一時的な Azure Kubernetes Service RBAC Admin として要求できます。 承認者として要求を承認または拒否する方法については、「グループのメンバーと所有者のアクティブ化要求を承認する」を参照してください。

管理者ロールを使用してクラスター リソースを操作する

Azure Kubernetes Service RBAC Admin ロールを一時的に追加した後、管理者のアクセス許可を必要とするクラスター リソースにアクセスできます。

  1. 次の kubelogin コマンドを使用して、既存の保存されているトークンを削除します。

    kubelogin remove-tokens
    

    Note

    アクセス許可がないためにエラーが発生した場合は、ログインして、az login コマンドを使用してアクセス許可を更新します。

  2. kubectl get secrets コマンドを使用して、クラスター シークレットにもう一度アクセスしてみてください。

    kubectl get secrets --namespace kube-system
    

    出力は、kube-system 名前空間のシークレットを示す次の出力例のようになります。

    NAME                     TYPE                            DATA   AGE
    bootstrap-token-sw3rck   bootstrap.kubernetes.io/token   4      35h
    konnectivity-certs       Opaque                          3      35h
    

    ユーザーは Azure Kubernetes Service RBAC Admin ロールを持っているため、シークレットにアクセスできるようになりました。

トークンの有効期間に関する考慮事項

トークンの有効期間の設計により、kubectlkubelogin などの CLI ツールを使用するユーザーにロールを付与する場合、アクティブ化期間は厳密には "60 分" 未満にすることはできません。 期間が 60 分未満に設定されている場合でも、実際の有効期間は 60 から 75 分のままになります。

kubeloginMicrosoft ID プラットフォームからトークンを取得しようとすると、access_tokenrefresh_token が今後の使用のために返されます。 access_token は API に要求を行い、refresh_token は、現在の access_token の有効期限が切れたときに新しいものを取得するために使用されます。 生成された access_token は取り消すことはできませんが、refresh_token は取り消すことができます。 refresh_token が取り消された場合、ユーザーは新しい refresh_token を取得するために再認証する必要があります。 refresh_token を手動で取り消すには、Revoke-AzureADUserAllRefreshToken を使用できます。

次のステップ

詳細については、次の記事を参照してください。