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

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

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

시작하기 전에

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

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

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

az group create --name myResourceGroup --location westus2

명령을 사용하여 관리되는 Microsoft Entra 통합 및 Kubernetes 권한 부여용 Azure RBAC를 사용하여 AKS 클러스터를 az aks create 만듭니다.

az aks create -g myResourceGroup -n myManagedCluster --enable-aad --enable-azure-rbac

출력은 다음 예제 출력과 유사합니다.

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

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

플래그가 있는 명령을 사용하여 기존 AKS 클러스터에 Kubernetes 권한 부여용 az aks update Azure RBAC를 enable-azure-rbac 추가합니다.

az aks update -g myResourceGroup -n myAKSCluster --enable-azure-rbac

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

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

az aks update -g myResourceGroup -n myAKSCluster --disable-azure-rbac

사용자가 클러스터에 액세스하기 위한 역할 할당 만들기

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

역할 설명
Azure Kubernetes Service RBAC 읽기 권한자 네임스페이스에 있는 대부분의 개체를 볼 수 있는 읽기 전용 권한을 허용합니다. 역할 또는 역할 바인딩을 볼 수 없습니다. 비밀의 내용을 읽으면 네임스페이스의 ServiceAccount 자격 증명에 액세스할 수 있으므로 이 역할은 보기를 Secrets허용하지 않습니다. 이 경우 네임스페이스의 모든 ServiceAccount로 API 액세스를 허용합니다(권한 상승의 한 형태).
Azure Kubernetes Service RBAC 쓰기 권한자 네임스페이스의 대부분의 개체에 대한 읽기/쓰기 액세스를 허용합니다. 이 역할은 역할 또는 역할 바인딩을 보거나 수정할 수 없습니다. 그러나 이 역할을 사용하면 네임스페이스의 모든 ServiceAccount로 Pod에 액세스 Secrets 하고 실행할 수 있으므로 네임스페이스에서 모든 ServiceAccount의 API 액세스 수준을 얻는 데 사용할 수 있습니다.
Azure Kubernetes Service RBAC 관리자 네임스페이스 내에서 부여할 관리자 액세스를 허용합니다. 네임스페이스(또는 클러스터 범위)에 있는 대부분의 리소스에 대한 읽기/쓰기 권한을 허용하며, 여기에는 네임스페이스 내에서 역할 및 역할 바인딩을 만들 수 있는 권한이 포함됩니다. 이 역할은 리소스 할당량 또는 네임스페이스 자체에 대한 쓰기 액세스를 허용하지 않습니다.
Azure Kubernetes Service RBAC 클러스터 관리자 슈퍼 사용자 액세스가 모든 리소스에 대한 모든 작업을 수행할 수 있도록 허용합니다. 클러스터 및 모든 네임스페이스의 모든 리소스를 완전히 제어할 수 있습니다.

전체 AKS 클러스터로 범위가 지정된 역할 할당은 Azure Portal에서 클러스터 리소스의 IAM(액세스 제어) 블레이드에서 수행하거나 다음 Azure CLI 명령을 사용하여 수행할 수 있습니다.

명령을 사용하여 AKS 리소스 ID를 가져옵니다 az aks show .

AKS_ID=$(az aks show -g myResourceGroup -n myManagedCluster --query id -o tsv)

명령을 사용하여 역할 할당을 만듭니다 az role assignment create . <AAD-ENTITY-ID> 는 서비스 주체의 사용자 이름 또는 클라이언트 ID일 수 있습니다.

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 판독기 및 Azure Kubernetes Service RBAC 기록기 역할 할당을 만들고 범위를 원하는 네임스페이스로 설정할 수 있습니다.

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

참고 항목

Azure Portal에서 원하는 네임스페이스로 범위가 지정된 역할 할당을 만든 후에는 범위에서 네임스페이스에 대한 "역할 할당"을 볼 수 없습니다. 명령을 사용하거나 역할을 할당한 az role assignment list 사용자 또는 그룹에 대한 역할 할당을 나열하여 찾을 수 있습니다.

az role assignment list --scope $AKS_ID/namespaces/<namespace-name>

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

다음 예제 사용자 지정 역할 정의에서는 사용자가 배포만 읽을 수 있으며 그 외에는 아무것도 읽을 수 없습니다. 가능한 작업의 전체 목록은 Microsoft.ContainerService 작업을 참조 하세요.

사용자 고유의 사용자 지정 역할 정의를 만들려면 다음 파일을 복사하여 사용자 고유의 구독 ID로 바꾼 <YOUR SUBSCRIPTION 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>"
    ]
}

명령을 사용하여 az role definition create 역할 정의를 만들고 이전 단계에서 만든 파일로 설정합니다 --role-definitiondeploy-view.json .

az role definition create --role-definition @deploy-view.json 

명령을 사용하여 사용자 또는 다른 ID에 역할 정의를 할당합니다 az role assignment create .

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

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

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

az aks get-credentials -g myResourceGroup -n myManagedCluster

이제 클러스터 관리를 사용할 kubectl 수 있습니다. 예를 들어 을 사용하여 kubectl get nodes클러스터의 노드를 나열할 수 있습니다. 처음 실행할 때는 다음 예제와 같이 로그인해야 합니다.

kubectl get nodes
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AAAAAAAAA to authenticate.

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

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

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

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

export KUBECONFIG=/path/to/kubeconfig
kubelogin convert-kubeconfig

kubectl마찬가지로, 다음 예제와 같이 처음 실행할 때 로그인해야 합니다.

kubectl get nodes
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AAAAAAAAA to authenticate.

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

리소스 정리

역할 할당 삭제

# List role assignments
az role assignment list --scope $AKS_ID --query [].id -o tsv

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

역할 정의 삭제

az role definition delete -n "AKS Deployment Reader"

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

az group delete -n myResourceGroup

다음 단계

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