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.3인
kubectl
이 필요합니다. - 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 클러스터 만들기
az group create
명령을 사용하여 Azure 리소스 그룹을 만듭니다.export RESOURCE_GROUP=<resource-group-name> export LOCATION=<azure-region> az group create --name $RESOURCE_GROUP --location $LOCATION
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 클러스터 관리자 | 슈퍼 사용자 액세스를 허용하여 모든 리소스에 대한 모든 작업을 수행할 수 있습니다. 클러스터 및 모든 네임스페이스의 모든 리소스를 완전히 제어할 수 있습니다. |
클러스터 액세스에 대한 역할 할당 만들기
az aks show
명령을 사용하여 AKS 리소스 ID를 가져옵니다.AKS_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query id --output tsv)
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 Reader 및 Azure 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 작업을 참조하세요.
고유한 사용자 지정 역할 정의를 만들려면 다음 파일을 복사하여
<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>" ] }
az role definition create
명령을 사용하여 역할 정의를 만들고--role-definition
을 이전 단계에서 만든deploy-view.json
파일로 설정합니다.az role definition create --role-definition @deploy-view.json
az role assignment create
명령을 사용하여 사용자 또는 다른 ID에 역할 정의를 할당합니다.az role assignment create --role "AKS Deployment Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID
kubectl
을 사용하여 Kubernetes 권한 부여에 Azure RBAC 사용
Azure Kubernetes Service 클러스터 사용자 기본 제공 역할이 있는지 확인한 다음,
az aks get-credentials
명령을 사용하여 AKS 클러스터의 kubeconfig를 가져옵니다.az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
이제
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
플러그 인을 만들었습니다.
다음 명령을 실행하여
kubelogin
플러그 인을 사용할 수 있습니다.export KUBECONFIG=/path/to/kubeconfig kubelogin convert-kubeconfig
이제
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
리소스 정리
역할 할당 삭제
az role assignment list
명령을 사용하여 역할 할당을 나열합니다.az role assignment list --scope $AKS_ID --query [].id --output tsv
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에 대한 자세한 내용은 다음을 참조하세요.
Azure Kubernetes Service