Kubernetes Yetkilendirmesi için Azure rol tabanlı erişim denetimini kullanma

Microsoft Entra Kimliği ile AKS arasında tümleşik kimlik doğrulaması kullandığınızda, Kubernetes rol tabanlı erişim denetiminde (Kubernetes RBAC) konu olarak Microsoft Entra kullanıcılarını, gruplarını veya hizmet sorumlularını kullanabilirsiniz. Bu özellik, Kubernetes için kullanıcı kimliklerini ve kimlik bilgilerini ayrı ayrı yönetmek zorunda bırakmanızı sağlar. Ancak Yine de Azure RBAC ve Kubernetes RBAC'yi ayrı ayrı ayarlamanız ve yönetmeniz gerekir.

Bu makalede Azure kaynakları, AKS ve Kubernetes kaynakları arasında birleşik yönetim ve erişim denetimi sağlayan Kubernetes Yetkilendirmesi için Azure RBAC'nin nasıl kullanılacağı ele alınır. Daha fazla bilgi için bkz . Kubernetes Için Azure RBAC Yetkilendirmesi.

Başlamadan önce

  • Azure CLI sürüm 2.24.0 veya üzerinin yüklü ve yapılandırılmış olması gerekir. Sürümü bulmak için az --version komutunu çalıştırın. Yüklemeniz veya yükseltmeniz gerekirse, bkz. Azure CLI yükleme.
  • en düşük 1.18.3 sürümüne sahip olması gerekirkubectl.
  • Kubernetes yetkilendirmesi için Azure RBAC ekleyebilmeniz için önce kümenizde yönetilen Microsoft Entra tümleştirmesini etkinleştirmeniz gerekir. Yönetilen Microsoft Entra tümleştirmesini etkinleştirmeniz gerekiyorsa bkz . AKS'de Microsoft Entra Kimliğini kullanma.
  • CRD'leriniz varsa ve özel rol tanımları yapıyorsanız, bugün CRD'leri kapsamanın tek yolu kullanmaktır Microsoft.ContainerService/managedClusters/*/read. Kalan nesneler için gibi Microsoft.ContainerService/apps/deployments/readbelirli API gruplarını kullanabilirsiniz.
  • Yeni rol atamalarının yayılması beş dakika kadar sürebilir ve yetkilendirme sunucusu tarafından güncelleştirilebilir.
  • Kubernetes için Azure RBAC Yetkilendirmesi, kimlik doğrulaması için yapılandırılan Microsoft Entra kiracısının AKS kümenizi barındıran aboneliğin kiracısı ile aynı olmasını gerektirir.

Yönetilen Microsoft Entra tümleştirmesi ve Kubernetes için Azure RBAC Yetkilendirmesi ile yeni bir AKS kümesi oluşturma

komutunu kullanarak az group create bir Azure kaynak grubu oluşturun.

az group create --name myResourceGroup --location westus2

komutunu kullanarak yönetilen Microsoft Entra tümleştirmesi ve Kubernetes için Azure RBAC Yetkilendirmesi az aks create ile bir AKS kümesi oluşturun.

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

Çıkış aşağıdaki örnek çıkışa benzer olacaktır:

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

Mevcut AKS kümesinde Azure RBAC'yi etkinleştirme

bayrağıyla komutunu kullanarak kubernetes için Azure RBAC Yetkilendirmesi'ni mevcut bir AKS kümesine az aks updateenable-azure-rbac ekleyin.

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

AKS kümesinden Kubernetes için Azure RBAC Yetkilendirmesini devre dışı bırakma

bayrağıyla komutunu kullanarak mevcut aks kümesinden Kubernetes için Azure RBAC Yetkilendirmesini az aks updatedisable-azure-rbac kaldırın.

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

Kullanıcıların kümeye erişmesi için rol atamalarını oluşturma

AKS aşağıdaki yerleşik rolleri sağlar:

Rol Açıklama
Azure Kubernetes Service RBAC Okuyucusu Ad alanında çoğu nesneyi görmek için salt okunur erişime izin verir. Rolleri veya rol bağlamalarını görüntülemeye izin vermez. Gizli dizilerin içeriğinin okunması ad alanında ServiceAccount kimlik bilgilerine erişim sağladığından, bu rol görüntülemeye izin Secretsvermez ve bu da ad alanında herhangi bir ServiceAccount olarak API erişimine izin verir (ayrıcalık yükseltme biçimi).
Azure Kubernetes Service RBAC Yazıcısı Ad alanı içindeki çoğu nesneye okuma/yazma erişimine izin verir. Bu rol, rollerin veya rol bağlamalarının görüntülenmesine veya değiştirilmesine izin vermez. Ancak, bu rol podlara ad alanında herhangi bir ServiceAccount olarak erişmeye Secrets ve çalıştırmaya izin verir, bu nedenle ad alanında herhangi bir ServiceAccount'ın API erişim düzeylerini kazanmak için kullanılabilir.
Azure Kubernetes Service RBAC Yönetici Ad alanı içinde verilmesi amaçlanan yönetici erişimine izin verir. Ad alanı içinde rol ve rol bağlamaları oluşturma özelliği de dahil olmak üzere bir ad alanında (veya küme kapsamındaki) çoğu kaynağa okuma/yazma erişimi sağlar. Bu rol, kaynak kotasına veya ad alanının kendisine yazma erişimine izin vermez.
Azure Kubernetes Service RBAC Kümesi Yönetici Süper kullanıcı erişiminin herhangi bir kaynak üzerinde herhangi bir eylem gerçekleştirmesine izin verir. Kümedeki ve tüm ad alanlarındaki her kaynak üzerinde tam denetim sağlar.

AKS kümesinin tamamı kapsamındaki rol atamaları, Azure portalındaki küme kaynağının Erişim Denetimi (IAM) dikey penceresinde veya aşağıdaki Azure CLI komutları kullanılarak yapılabilir:

komutunu kullanarak az aks show AKS kaynak kimliğinizi alın.

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

komutunu kullanarak bir rol ataması az role assignment create oluşturun. <AAD-ENTITY-ID> bir hizmet sorumlusunun kullanıcı adı veya istemci kimliği olabilir.

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

Not

Komutunu kullanarak az role assignment create ve kapsamı istenen ad alanına ayarlayarak küme içindeki belirli bir ad alanı kapsamındaki Azure Kubernetes Service RBAC Okuyucusu ve Azure Kubernetes Service RBAC Yazıcı rol atamalarını oluşturabilirsiniz.

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

Not

Azure portalında, kapsamı istenen ad alanına göre belirlenmiş rol atamaları oluşturduktan sonra, bir kapsamda ad alanı için "rol atamalarını" göremezsiniz. Bu komutu kullanarak az role assignment list bulabilir veya rolü atadığınız kullanıcı veya grup için rol atamalarını listeleyebilirsiniz.

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

Özel rol tanımları oluşturma

Aşağıdaki örnek özel rol tanımı, kullanıcının yalnızca dağıtımları okumasına ve başka hiçbir şey okumasına izin verir. Olası eylemlerin tam listesi için bkz . Microsoft.ContainerService işlemleri.

Kendi özel rol tanımlarınızı oluşturmak için aşağıdaki dosyayı kopyalayın, yerine <YOUR SUBSCRIPTION ID> kendi abonelik kimliğinizi yazın ve olarak deploy-view.jsonkaydedin.

{
    "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>"
    ]
}

komutunu kullanarak az role definition create rol tanımını oluşturun ve öğesini önceki adımda oluşturduğunuz dosyaya deploy-view.json ayarlayın--role-definition.

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

komutunu kullanarak rol tanımını bir kullanıcıya veya başka bir kimliğe atayın az role assignment create .

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

Ile Kubernetes Yetkilendirmesi için Azure RBAC kullanma kubectl

Azure Kubernetes Service Cluster User yerleşik rolüne sahip olduğunuzdan emin olun ve ardından komutunu kullanarak AKS kümenizin kubeconfig değerini az aks get-credentials alın.

az aks get-credentials -g myResourceGroup -n myManagedCluster

Artık kümenizi yönetebilirsiniz kubectl . Örneğin, kullanarak kubectl get nodeskümenizdeki düğümleri listeleyebilirsiniz. İlk kez çalıştırdığınızda, aşağıdaki örnekte gösterildiği gibi oturum açmanız gerekir:

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

Ile Kubernetes Yetkilendirmesi için Azure RBAC kullanma kubelogin

AKS, etkileşimli olmayan oturum açma işlemleri, eski kubectl sürümler veya yeni bir kümede oturum açmaya gerek kalmadan birden çok kümede SSO'dan yararlanma gibi ek senaryoların engelini kaldırmaya yardımcı olmak için eklentiyi oluşturmuşturkubelogin.

Aşağıdaki komutu çalıştırarak eklentiyi kullanabilirsiniz kubelogin :

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

benzer şekilde kubectl, aşağıdaki örnekte gösterildiği gibi ilk kez çalıştırdığınızda oturum açmanız gerekir:

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

Kaynakları temizleme

Rol atamasını sil

# 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>

Rol tanımını silme

az role definition delete -n "AKS Deployment Reader"

Kaynak grubunu ve AKS kümesini silme

az group delete -n myResourceGroup

Sonraki adımlar

AKS kimlik doğrulaması, yetkilendirme, Kubernetes RBAC ve Azure RBAC hakkında daha fazla bilgi edinmek için bkz: