PIM(Privileged Identity Management)을 사용하여 AKS(Azure Kubernetes Service) 클러스터 및 노드에 대한 액세스를 제어합니다.

서로 다른 팀의 권한을 설정할 때는 지정한 팀의 기본 권한을 설정한 다음, 필요할 때 특정 사용자에게 권한 있는 액세스를 부여하고 싶을 수 있습니다. AKS(Azure Kubernetes Service)를 Microsoft Entra ID와 함께 사용하면 클러스터 제어 평면 액세스 및 노드에 대한 SSH 액세스 모두에 대한 JIT(Just-In-Time) 요청에 대해 PIM(Privileged Identity Management)을 설정할 수 있습니다.

이 문서에서는 다음 방법을 설명합니다.

  • Microsoft Entra 그룹 멤버 자격을 기반으로 AKS 클러스터 및 클러스터 노드에 액세스하거나 작업을 수행하도록 예제 그룹에 대한 기본 역할을 설정합니다.
  • AKS 클러스터에 액세스하기 위한 기본 역할 및 노드에 대한 SSH 액세스를 구성합니다.
  • 역할을 자체 활성화하여 AKS 클러스터 및 노드에 즉시 액세스합니다.
  • Just-In-Time 액세스에 대한 승인 요청을 승인하거나 거부할 승인자를 설정하세요.

참고

Microsoft Entra Privileged Identity Management(PIM)에는 Premium P2 SKU가 필요한 Microsoft Entra ID P2 또는 Microsoft Entra ID Governance 기능이 포함되어 있습니다. 자세한 내용은 Microsoft Entra ID Governance 라이선싱 기본 사항가격 책정 가이드를 참조하세요.

필수 구성 요소

이 문서는 Microsoft Entra ID 통합이 구성된 기존 AKS 클러스터가 있다고 가정합니다. 없다면 Microsoft Entra ID 통합이 포함된 AKS 클러스터 만들기를 참조하세요.

노드에 대한 SSH 액세스의 경우 이 문서에서는 Entra ID 기반 SSH를 사용하여 AKS 클러스터를 구성한 것으로 가정합니다. 그렇지 않은 경우 AKS(Azure Kubernetes Service) 노드에 대한 보안 액세스에 대한 SSH 관리를 참조하세요.

Microsoft Entra ID에서 데모 그룹 만들기

이 섹션에서는 Microsoft Entra ID로 4개의 그룹을 만듭니다.

  • 기본: 이 그룹은 AKS 클러스터의 리소스에 대해 읽기 전용 액세스(Azure Kubernetes Service RBAC Reader)를 가집니다.
  • 관리자: 이 그룹은 AKS 클러스터의 리소스에 대해 관리자 액세스(Azure Kubernetes Service RBAC Admin)를 가집니다.
  • 노드 액세스: 이 그룹에는 Entra ID 인증(Virtual Machine User Login)을 사용하여 클러스터 노드에 SSH할 수 있는 권한이 있습니다.
  • 승인자: 이 그룹에는 AKS 클러스터 및 노드에 대한 Just-In-Time 액세스 에 대한 요청을 승인하거나 거부할 수 있는 권한이 있습니다.

별도의 승인자 그룹을 만드는 대신 기본관리자 그룹만 사용할 수 있습니다. 그러나 관리자 그룹에 승인 권한을 포함하면 just-in-time 액세스를 얻은 멤버가 자신의 요청과 다른 사용자의 요청을 승인할 수 있습니다. 프로덕션 환경에서는 이 구성을 사용하는 것을 권장하지 않지만, 테스트 목적에는 유용합니다.

기본 그룹 만들기

  1. 명령을 사용하여 AKS 클러스터의 az aks show를 가져오세요.

    AKS_ID=$(az aks show \
        --resource-group <resource-group-name> \
        --name <cluster-name> \
        --query id \
        --output tsv)
    
  2. 명령을 사용하여 AKS 클러스터의 az group show를 가져오세요.

    RG_ID=$(az group show \
        --resource-group <resource-group-name> \
        --query id \
        --output tsv)
    
  3. 명령을 사용하여 az ad group create 그룹을 만드세요.

    DEFAULT_ID=$(az ad group create \
        --display-name default \
        --mail-nickname default \
        --query id \
        --output tsv)
    
  4. 명령을 사용하여 az role assignment create 그룹에 대한 Azure 역할 할당을 만드세요.

    특정 요구 사항에 따라 기본 그룹에 할당할 수 있는 역할은 세 가지가 있습니다:

    • 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
    

관리자 그룹 만들기

  1. 명령을 사용하여 az ad group create 그룹을 만드세요.

    ADMIN_ID=$(az ad group create \
        --display-name admin \
        --mail-nickname admin \
        --query id \
        --output tsv)
    
  2. Azure Kubernetes Service RBAC Admin 명령을 사용하여 관리자 그룹에 az role assignment create 역할을 할당하세요.

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

참고

수동 스케일링과 같은 노드 풀 설정을 관리자 그룹의 사용자가 변경하도록 하려면, 다음 명령을 사용하여 클러스터 노드 풀에 Contributor 역할 할당을 만들어야 합니다:

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

이렇게 하면 AKS 리소스에서 스케일 인 또는 스케일 아웃할 수 있는 권한만 부여된다는 점에 유의하세요. Virtual Machine Scale Set 리소스에서 스케일 인 또는 스케일 아웃을 허용하려면 Virtual Machine Scale Set 수준에서 할당을 만들어야 합니다.

승인자 그룹 만들기

  • 명령을 사용하여 az ad group create 그룹을 만드세요.

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

노드 액세스 그룹 만들기

  1. 명령을 사용하여 노드 액세스 그룹을 만듭니다 az ad group create .

    NODEACCESS_ID=$(az ad group create \
        --display-name node-access \
        --mail-nickname node-access \
        --query id \
        --output tsv)
    
  2. 명령을 사용하여 노드 리소스 그룹(인프라 리소스 그룹이라고도 함)의 리소스 ID를 az aks show 가져옵니다.

    NODE_RG_ID=$(az aks show \
        --resource-group <resource-group-name> \
        --name <cluster-name> \
        --query nodeResourceGroup \
        --output tsv)
    
    NODE_RG_SCOPE=$(az group show \
        --name $NODE_RG_ID \
        --query id \
        --output tsv)
    
  3. Virtual Machine User Login 명령을 사용하여 노드 액세스 그룹에 역할을 할당합니다az role assignment create.

    az role assignment create \
        --role "Virtual Machine User Login" \
        --assignee $NODEACCESS_ID \
        --scope $NODE_RG_SCOPE
    

    참고

    대신 노드에 대한 관리자 액세스 권한을 부여하려면 역할을 Virtual Machine Administrator Login 사용합니다.

Microsoft Entra ID에서 데모 사용자 만들기

이 섹션에서는 Microsoft Entra ID에서 다음 두 사용자를 만듭니다: 기본 역할만 가진 일반 사용자와, 일반 사용자의 just-in-time 요청을 승인하거나 거부할 수 있는 권한 있는 사용자입니다.

  1. 명령을 사용하여 az ad user create 사용자를 만드세요. 암호 변수 명령의 경우 값이 숨겨지므로 콘솔에 표시되지 않습니다.

    DOMAIN=contoso.com
    read -sp 'Enter password for NUSER_ID: ' NUSERPASSWORD
    read -sp 'Enter password for PUSER_ID: ' PUSERPASSWORD
    
    NUSER_ID=$(az ad user create \
        --display-name n01 \
        --password ${NUSERPASSWORD} \
        --user-principal-name n01@${DOMAIN} \
        --query id \
        --output tsv)
    
  2. 명령을 사용하여 az ad group member add 사용자를 기본 그룹에 추가하세요.

    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 ${PUSERPASSWORD} \
        --user-principal-name p01@${DOMAIN} \
        --query id \
        --output tsv)
    
  4. 명령을 사용하여 az ad group member add 사용자를 승인자 그룹에 추가하세요.

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

관리자 그룹에 Privileged Identity Management(PIM) 활성화

이 섹션에서는 관리 그룹에 대해 PIM을 사용하도록 설정하여 AKS 클러스터 제어 평면에 대한 Just-In-Time 액세스를 제공하는 방법을 보여 줍니다.

  1. Azure Portal 홈페이지에서 Microsoft Entra ID를 선택하세요.
  2. 서비스 메뉴에서 관리 아래의 그룹을 선택한 다음 관리자 그룹을 선택하세요.
  3. 서비스 메뉴에서 작업 아래의 Privileged Identity Management를 선택한 다음 이 그룹에 대해 PIM 활성화를 선택하세요.

관리자 그룹의 승인자 설정

  1. Azure Portal 홈페이지에서 Privileged Identity Management를 검색한 후 선택하세요.

  2. 서비스 메뉴에서 관리 아래의 그룹을 선택한 다음 관리자 그룹을 선택하세요.

  3. 서비스 메뉴에서 관리 아래의 할당>할당 추가를 선택하세요.

  4. 할당 추가 페이지의 멤버십 탭에서 선택한 역할로 구성원을, 선택한 구성원으로 기본을 선택한 다음 다음을 선택하세요.

  5. 설정 탭에서 할당 유형으로 적격을 선택한 다음 할당을 선택하세요.

  6. 서비스 메뉴에서 관리 아래의 설정>구성원>편집을 선택하세요.

  7. 역할 설정 편집 - 구성원 페이지에서 활성화하려면 승인 필요 확인란을 선택하고, 선택한 승인자로 승인자 그룹을 추가하세요.

    참고

    활성화하려면 승인 필요 확인란을 선택하지 않으면 기본 그룹의 사용자가 역할을 스스로 활성화하여 승인 없이 AKS 클러스터에 just-in-time 액세스를 얻을 수 있습니다. 승인자 그룹의 사용자는 해당 그룹의 구성원이어야 합니다. 사용자를 소유자로 설정하더라도 그룹 소유자는 역할 할당이 아니라 그룹에 대한 관리 권한만 가지므로, 여전히 just-in-time 요청을 검토할 수 없습니다. 충돌 없이 같은 그룹에서 사용자를 구성원 및 소유자로 설정할 수 있습니다.

  8. 필요한 다른 변경 사항을 수행한 다음 업데이트를 선택하세요.

PIM 구성에 대한 자세한 내용은 그룹에 대해 PIM 구성을 참조하세요.

노드 액세스 그룹에 PIM(Privileged Identity Management) 사용

이 섹션에서는 노드 액세스 그룹에 대해 PIM을 사용하도록 설정하여 클러스터 노드에 Just-In-Time SSH 액세스를 제공하는 방법을 보여 줍니다.

  1. Azure Portal 홈페이지에서 Microsoft Entra ID를 선택하세요.
  2. 서비스 메뉴의 관리 아래에서 그룹을 선택한 다음 노드 액세스 그룹을 선택합니다.
  3. 서비스 메뉴에서 작업 아래의 Privileged Identity Management를 선택한 다음 이 그룹에 대해 PIM 활성화를 선택하세요.

노드 액세스 그룹에 대한 승인자 설정

  1. Azure Portal 홈페이지에서 Privileged Identity Management를 검색한 후 선택하세요.
  2. 서비스 메뉴의 관리 아래에서 그룹을 선택한 다음 노드 액세스 그룹을 선택합니다.
  3. 서비스 메뉴에서 관리 아래의 할당>할당 추가를 선택하세요.
  4. 할당 추가 페이지의 멤버십 탭에서 선택한 역할로 구성원을, 선택한 구성원으로 기본을 선택한 다음 다음을 선택하세요.
  5. 설정 탭에서 할당 유형으로 적격을 선택한 다음 할당을 선택하세요.
  6. 서비스 메뉴에서 관리 아래의 설정>구성원>편집을 선택하세요.
  7. 역할 설정 편집 - 구성원 페이지에서 활성화하려면 승인 필요 확인란을 선택하고, 선택한 승인자로 승인자 그룹을 추가하세요.
  8. 필요한 다른 변경 사항을 수행한 다음 업데이트를 선택하세요.

기본 역할을 사용하여 클러스터 리소스와 상호 작용

이제 기본 그룹의 구성원인 일반 사용자를 사용하여 AKS 클러스터에 액세스를 시도할 수 있습니다.

  1. 명령을 사용하여 az login 사용자로 Azure Portal에 로그인하세요.

    az login --username n01@$DOMAIN --password ${NUSERPASSWORD}
    

    Azure에 로그인하는 데 사용할 수 있는 가장 안전한 방법을 사용하는 것이 좋습니다. 자세한 내용은 다음 문서를 참조하세요.

  2. az aks get-credentials 명령을 사용하여 클러스터에 액세스하기 위한 사용자 자격 증명을 가져오세요.

    az aks get-credentials --resource-group <resource-group-name> --name <cluster-name>
    
  3. kubectl get 명령을 사용하여 클러스터 Pod에 액세스를 시도하세요.

    kubectl get pods --namespace kube-system
    

    출력은 다음 예제 출력과 비슷하게 표시되어야 하며, 여기에는 kube-system 네임스페이스의 Pod가 표시됩니다:

    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 액세스 요청

이 섹션에서는 클러스터 컨트롤 플레인 액세스를 위해 임시 Azure Kubernetes Service RBAC Admin(으)로서 just-in-time 액세스를 요청하는 방법을 설명합니다. Privileged Identity Management에서 그룹 멤버 자격 또는 소유권 활성화의 단계를 사용합니다. 승인자로서 요청을 승인하거나 거부하는 방법을 알아보려면 그룹 구성원 및 소유자의 활성화 요청 승인을 참조하세요.

클러스터 노드에 대한 Just-In-Time SSH 액세스 요청

이 섹션에서는 노드 액세스 그룹의 멤버 자격을 일시적으로 활성화하여 클러스터 노드에 Just-In-Time SSH 액세스를 요청하는 방법을 보여 줍니다.

  1. Azure Portal 홈페이지에서 Privileged Identity Management를 검색한 후 선택하세요.
  2. 서비스 메뉴에서 내 역할>그룹을 선택합니다.
  3. 적격 할당 목록에서 노드 액세스 그룹을 찾고 활성화를 선택합니다.
  4. 활성화 요청에 대한 근거를 제공하고 활성화를 선택합니다.
  5. 승인이 필요한 경우 승인자가 요청을 승인할 때까지 기다립니다. 요청이 승인되면 알림을 받게 됩니다.
  6. 활성화되면 Entra ID 인증을 사용하여 클러스터 노드로 SSH할 수 있습니다.

즉시 액세스를 활용하여 클러스터 노드에 SSH 접속하기

노드 액세스 그룹에 대한 적시 액세스가 활성화되면 Entra ID 인증을 사용하여 클러스터 노드에 SSH로 접속할 수 있습니다.

  1. Azure CLI용 SSH 확장을 설치합니다.

    az extension add --name ssh
    
  2. 클러스터의 노드 목록을 가져옵니다.

    kubectl get nodes
    
  3. 노드에 SSH로 연결할 때 Entra ID 인증 사용:

    az ssh vm --resource-group <resource-group-name> --name <node-name>
    
  4. 인증 흐름 중에 노드 액세스 그룹에 대한 임시 액세스 권한이 있는 Entra ID 자격 증명으로 로그인합니다.

  5. 인증에 성공하면 역할 할당에서 부여한 사용 권한을 사용하여 노드에 연결됩니다.

참고

노드에 대한 SSH 액세스에 대한 조건부 액세스 정책을 구성한 경우 인증 흐름 중에 이러한 요구 사항을 충족해야 합니다.

관리자 역할을 사용하여 클러스터 리소스와 상호 작용

Azure Kubernetes Service RBAC Admin 역할을 임시로 추가한 후에는 관리자 권한이 필요한 클러스터 리소스에 액세스할 수 있습니다.

  1. 다음 kubelogin 명령을 사용하여 기존에 저장된 토큰을 제거하세요:

    kubelogin remove-tokens
    

    참고

    권한 부족으로 오류가 발생하면 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 역할이 있으므로 시크릿에 액세스할 수 있습니다.

토큰 수명 고려 사항

토큰 수명 설계로 인해 kubectl 또는 kubelogin와(과) 같은 CLI 도구를 사용하는 사용자에게 역할을 부여하는 경우, 활성화 기간은 기술적으로 60분보다 짧을 수 없습니다. 기간을 60분 미만으로 설정하더라도 실제로 유효한 기간은 60~75분 사이로 유지됩니다.

kubelogin이(가) Microsoft ID 플랫폼에서 토큰을 가져오려고 하면, 이후 사용을 위해 access_tokenrefresh_token(이)가 반환됩니다. access_token은(는) API에 요청을 보내며, 현재 토큰이 만료되면 새 refresh_token(을)를 가져오기 위해 access_token(이)가 사용됩니다. access_token은(는) 한 번 생성되면 철회할 수 없지만, refresh_token(은)는 철회할 수 있습니다. refresh_token이(가) 철회되면 사용자는 새 refresh_token(을)를 얻기 위해 재인증해야 합니다. refresh_token을(를) 수동으로 철회하려면 Revoke-AzureADUserAllRefreshToken을(를) 사용할 수 있습니다.

다음 단계

자세한 내용은 다음 문서를 참조하세요.