다음을 통해 공유


Kubernetes 권한 부여에 Azure 역할 기반 액세스 제어 사용

이 문서에서는 Azure 리소스, AKS 및 Kubernetes 리소스에서 통합 관리 및 액세스 제어를 허용하는 Kubernetes 권한 부여를 위한 Azure RBAC를 사용하는 방법을 설명합니다. 자세한 내용은 Kubernetes 권한 부여를 위한 Azure RBAC를 참조하세요.

참고 항목

Microsoft Entra ID와 AKS 간 통합 인증을 사용하는 경우 Microsoft Entra 사용자, 그룹 또는 서비스 주체를 Kubernetes RBAC(Kubernetes 역할 기반 액세스 제어)의 주체로 사용할 수 있습니다. 이 기능을 사용하면 Kubernetes에 대한 사용자 ID 및 자격 증명을 별도로 관리할 필요가 없습니다. 단, Azure RBAC와 Kubernetes RBAC는 여전히 별도로 설정하고 관리해야 합니다.

시작하기 전에

  • Azure CLI 2.24.0 이상 버전을 설치하고 구성해야 합니다. az --version을 실행하여 버전을 찾습니다. 설치 또는 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요.
  • 최소 버전이 1.18.3kubectl이 필요합니다.
  • Kubernetes 권한 부여를 위한 Azure RBAC를 추가하려면 먼저 클러스터에서 관리형 Microsoft Entra 통합을 사용하도록 설정해야 합니다. 관리형 Microsoft Entra 통합을 사용하도록 설정해야 하는 경우 AKS에서 Microsoft Entra ID 사용을 참조하세요.
  • CRD가 있고 사용자 지정 역할을 정의하는 경우 현재 CRD를 처리하는 유일한 방법은 Microsoft.ContainerService/managedClusters/*/read를 사용하는 것입니다. 나머지 개체의 경우 특정 API 그룹을 사용할 수 있습니다(예: Microsoft.ContainerService/apps/deployments/read).
  • 새 역할 할당은 전파하고 권한 부여 서버에서 업데이트하는 데 최대 5분이 소요될 수 있습니다.
  • Kubernetes 권한 부여용 Azure RBAC를 사용하려면 인증을 위해 구성된 Microsoft Entra 테넌트가 AKS 클러스터를 보유하는 구독의 테넌트와 동일해야 합니다.

관리형 Microsoft Entra 통합 및 Kubernetes 권한 부여용 Azure RBAC를 사용하여 새 AKS 클러스터 만들기

  1. az group create 명령을 사용하여 Azure 리소스 그룹을 만듭니다.

    export RESOURCE_GROUP=<resource-group-name>
    export LOCATION=<azure-region>
    
    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  2. az aks create 명령을 사용하여 관리형 Microsoft Entra 통합 및 Kubernetes 권한 부여를 위한 Azure RBAC를 통해 AKS 클러스터를 만듭니다.

    export CLUSTER_NAME=<cluster-name>
    
    az aks create \
        --resource-group $RESOURCE_GROUP \
        --name $CLUSTER_NAME \
        --enable-aad \
        --enable-azure-rbac \
        --generate-ssh-keys
    

    출력은 다음 예제 출력과 비슷하게 됩니다.

    "AADProfile": {
        "adminGroupObjectIds": null,
        "clientAppId": null,
        "enableAzureRbac": true,
        "managed": true,
        "serverAppId": null,
        "serverAppSecret": null,
        "tenantId": "****-****-****-****-****"
    }
    

기존 AKS 클러스터에서 Azure RBAC 사용

  • --enable-azure-rbac 플래그와 함께 az aks update 명령을 사용하여 기존 AKS 클러스터에서 Kubernetes 권한 부여를 위한 Azure RBAC를 활성화합니다.

    az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --enable-azure-rbac
    

AKS 클러스터에서 Kubernetes 권한 부여를 위한 Azure RBAC 사용 안 함

  • --disable-azure-rbac 플래그와 함께 az aks update 명령을 사용하여 Kubernetes 권한 부여를 위한 Azure RBAC를 기존 AKS 클러스터에서 제거합니다.

    az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --disable-azure-rbac
    

AKS 기본 제공 역할

AKS는 다음 기본 제공 역할을 제공합니다.

역할 설명
Azure Kubernetes Service RBAC 읽기 권한자 네임스페이스에 있는 대부분의 개체를 볼 수 있는 읽기 전용 권한을 허용합니다. 역할 또는 역할 바인딩 조회는 할 수 없습니다. 이 역할은 Secrets를 볼 수 없습니다. 비밀의 콘텐츠를 읽을 수 있으면 네임스페이스의 서비스 계정 자격 증명에 액세스할 수 있으므로 네임스페이스의 서비스 계정으로 API 액세스가 허용될 수 있기 때문입니다(일종의 권한 상승).
Azure Kubernetes Service RBAC 쓰기 권한자 네임스페이스에 있는 대부분의 개체에 대해 읽기/쓰기 액세스 권한을 허용합니다. 이 역할은 역할 또는 역할 바인딩을 보거나 수정할 수 없습니다. 그러나 이 역할을 통해 Secrets과 네임스페이스의 ServiceAccount로 실행 중인 Pod에 엑세스할 수 있으므로, 네임스페이스에 있는 모든 ServiceAccount의 API 액세스 수준을 얻는 데 사용할 수 있습니다.
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 명령을 사용하여 역할 할당을 만듭니다. <AAD-ENTITY-ID>는 서비스 주체의 사용자 이름 또는 클라이언트 ID일 수 있습니다. 다음 예제에서는 Azure Kubernetes Service RBAC 관리자 역할에 대한 역할 할당을 만듭니다.

    az role assignment create --role "Azure Kubernetes Service RBAC Admin" --assignee <AAD-ENTITY-ID> --scope $AKS_ID
    

    참고 항목

    az role assignment create 명령을 사용하고 원하는 네임스페이스로 범위를 설정하여 클러스터 내의 특정 네임스페이스로 범위가 지정된 Azure Kubernetes Service RBAC ReaderAzure Kubernetes Service RBAC Writer 역할 할당을 만들 수 있습니다.

    az role assignment create --role "Azure Kubernetes Service RBAC Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID/namespaces/<namespace-name>
    

사용자 지정 역할 정의 만들기

다음 예제 사용자 지정 역할 정의를 사용하면 사용자가 배포만 읽을 수 있고 다른 것은 읽을 수 없습니다. 가능한 작업의 전체 목록은 Microsoft.ContainerService 작업을 참조하세요.

  1. 고유한 사용자 지정 역할 정의를 만들려면 다음 파일을 복사하여 <YOUR SUBSCRIPTION ID>를 고유한 구독 ID로 바꾼 다음, deploy-view.json으로 저장합니다.

    {
        "Name": "AKS Deployment Reader",
        "Description": "Lets you view all deployments in cluster/namespace.",
        "Actions": [],
        "NotActions": [],
        "DataActions": [
            "Microsoft.ContainerService/managedClusters/apps/deployments/read"
        ],
        "NotDataActions": [],
        "assignableScopes": [
            "/subscriptions/<YOUR SUBSCRIPTION ID>"
        ]
    }
    
  2. az role definition create 명령을 사용하여 역할 정의를 만들고 --role-definition을 이전 단계에서 만든 deploy-view.json 파일로 설정합니다.

    az role definition create --role-definition @deploy-view.json 
    
  3. az role assignment create 명령을 사용하여 사용자 또는 다른 ID에 역할 정의를 할당합니다.

    az role assignment create --role "AKS Deployment Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID
    

kubectl을 사용하여 Kubernetes 권한 부여에 Azure RBAC 사용

  1. Azure Kubernetes Service 클러스터 사용자 기본 제공 역할이 있는지 확인한 다음, az aks get-credentials 명령을 사용하여 AKS 클러스터의 kubeconfig를 가져옵니다.

    az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
    
  2. 이제 kubectl을 사용하여 클러스터를 관리할 수 있습니다. 예를 들어 kubectl get nodes를 사용하여 클러스터의 노드를 나열할 수 있습니다.

    kubectl get nodes
    

    예제 출력:

    NAME                                STATUS   ROLES   AGE    VERSION
    aks-nodepool1-93451573-vmss000000   Ready    agent   3h6m   v1.15.11
    aks-nodepool1-93451573-vmss000001   Ready    agent   3h6m   v1.15.11
    aks-nodepool1-93451573-vmss000002   Ready    agent   3h6m   v1.15.11
    

kubelogin을 사용하여 Kubernetes 권한 부여에 Azure RBAC 사용

AKS는 비대화형 로그인, 이전 kubectl 버전 또는 새 클러스터에 로그인할 필요 없이 여러 클러스터에서 SSO를 활용하는 것과 같이 시나리오를 차단 해제하는 데 도움이 되는 kubelogin 플러그 인을 만들었습니다.

  1. 다음 명령을 실행하여 kubelogin 플러그 인을 사용할 수 있습니다.

    export KUBECONFIG=/path/to/kubeconfig
    kubelogin convert-kubeconfig
    
  2. 이제 kubectl을 사용하여 클러스터를 관리할 수 있습니다. 예를 들어 kubectl get nodes를 사용하여 클러스터의 노드를 나열할 수 있습니다.

    kubectl get nodes
    

    예제 출력:

    NAME                                STATUS   ROLES   AGE    VERSION
    aks-nodepool1-93451573-vmss000000   Ready    agent   3h6m   v1.15.11
    aks-nodepool1-93451573-vmss000001   Ready    agent   3h6m   v1.15.11
    aks-nodepool1-93451573-vmss000002   Ready    agent   3h6m   v1.15.11
    

리소스 정리

역할 할당 삭제

  1. az role assignment list 명령을 사용하여 역할 할당을 나열합니다.

    az role assignment list --scope $AKS_ID --query [].id --output tsv
    
  2. az role assignment delete 명령을 사용하여 역할 할당을 삭제합니다.

    az role assignment delete --ids <LIST OF ASSIGNMENT IDS>
    

역할 정의 삭제

  • az role definition delete 명령을 사용하여 사용자 지정 역할 정의를 삭제합니다.

    az role definition delete --name "AKS Deployment Reader"
    

리소스 그룹 및 AKS 클러스터 삭제

  • az group delete 명령을 사용하여 리소스 그룹 및 AKS 클러스터를 삭제합니다.

    az group delete --name $RESOURCE_GROUP --yes --no-wait
    

다음 단계

AKS 인증, 권한 부여, Kubernetes RBAC 및 Azure RBAC에 대한 자세한 내용은 다음을 참조하세요.