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 리소스 그룹을 만듭니다.
az group create --name myResourceGroup --location westus2
az aks create
명령을 사용하여 관리형 Microsoft Entra 통합 및 Kubernetes 권한 부여를 위한 Azure RBAC를 통해 AKS 클러스터를 만듭니다.
az aks create \
--resource-group myResourceGroup \
--name myManagedCluster \
--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
명령을 사용하여 Kubernetes 권한 부여를 위한 Azure RBAC를 기존 AKS 클러스터에 추가합니다.
az aks update --resource-group myResourceGroup --name myAKSCluster --enable-azure-rbac
AKS 클러스터에서 Kubernetes 권한 부여를 위한 Azure RBAC 사용 안 함
disable-azure-rbac
플래그와 함께 az aks update
명령을 사용하여 Kubernetes 권한 부여를 위한 Azure RBAC를 기존 AKS 클러스터에서 제거합니다.
az aks update --resource-group myResourceGroup --name myAKSCluster --disable-azure-rbac
사용자가 클러스터에 액세스하기 위한 역할 할당 만들기
AKS는 다음 기본 제공 역할을 제공합니다.
역할 | 설명 |
---|---|
Azure Kubernetes Service RBAC 읽기 권한자 | 네임스페이스에 있는 대부분의 개체를 볼 수 있는 읽기 전용 권한을 허용합니다. 역할 또는 역할 바인딩 조회는 할 수 없습니다. 이 역할은 Secrets 를 볼 수 없습니다. 비밀의 콘텐츠를 읽을 수 있으면 네임스페이스의 서비스 계정 자격 증명에 액세스할 수 있으므로 네임스페이스의 서비스 계정으로 API 액세스가 허용될 수 있기 때문입니다(일종의 권한 상승). |
Azure Kubernetes Service RBAC 쓰기 권한자 | 네임스페이스에 있는 대부분의 개체에 대해 읽기/쓰기 액세스 권한을 허용합니다. 이 역할은 역할 또는 역할 바인딩을 보거나 수정할 수 없습니다. 그러나 이 역할을 통해 Secrets 과 네임스페이스의 ServiceAccount로 실행 중인 Pod에 엑세스할 수 있으므로, 네임스페이스에 있는 모든 ServiceAccount의 API 액세스 수준을 얻는 데 사용할 수 있습니다. |
Azure Kubernetes Service RBAC 관리자 | 네임 스페이스 내에서 부여되는 관리자 액세스를 허용합니다. 네임스페이스(또는 클러스터 범위)에 있는 대부분의 리소스에 대한 읽기/쓰기 권한을 허용하며, 여기에는 네임스페이스 내에서 역할 및 역할 바인딩을 만들 수 있는 권한이 포함됩니다. 이 역할은 리소스 할당량 혹은 네임스페이스 자체에 대한 쓰기 권한을 허용하지 않습니다. |
Azure Kubernetes Service RBAC 클러스터 관리자 | 슈퍼 사용자 액세스를 허용하여 모든 리소스에 대한 모든 작업을 수행할 수 있습니다. 클러스터 및 모든 네임스페이스의 모든 리소스를 완전히 제어할 수 있습니다. |
전체 AKS 클러스터로 범위가 지정된 역할 할당은 Azure Portal에 있는 클러스터 리소스의 액세스 제어(IAM) 블레이드에서 또는 다음 Azure CLI 명령을 사용하여 수행할 수 있습니다.
az aks show
명령을 사용하여 AKS 리소스 ID를 가져옵니다.
AKS_ID=$(az aks show --resource-group myResourceGroup --name 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 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>
참고 항목
Azure Portal에서 원하는 네임스페이스로 범위가 지정된 역할 할당을 만든 후에는 범위에서 네임스페이스에 대한 "역할 할당"을 볼 수 없습니다. 명령을 사용하거나 역할을 할당한 az role assignment list
사용자 또는 그룹에 대한 역할 할당을 나열하여 찾을 수 있습니다.
az role assignment list --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 myResourceGroup --name 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
kubelogin
을 사용하여 Kubernetes 권한 부여에 Azure RBAC 사용
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 --name "AKS Deployment Reader"
리소스 그룹 및 AKS 클러스터 삭제
az group delete --name myResourceGroup
다음 단계
AKS 인증, 권한 부여, Kubernetes RBAC 및 Azure RBAC에 대한 자세한 내용은 다음을 참조하세요.
Azure Kubernetes Service
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기