Kubernetes Yetkilendirmesi için Azure rol tabanlı erişim denetimini kullanma
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.
Not
Microsoft Entra Kimliği ile AKS arasında tümleşik kimlik doğrulaması kullanırken, 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 sayesinde Kubernetes için kullanıcı kimliklerini ve kimlik bilgilerini ayrı ayrı yönetmeniz gerekmez. Ancak Yine de Azure RBAC ve Kubernetes RBAC'yi ayrı ayrı ayarlamanız ve yönetmeniz gerekir.
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ı gerekir
kubectl
. - 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 gibiMicrosoft.ContainerService/apps/deployments/read
belirli 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.export RESOURCE_GROUP=<resource-group-name> export LOCATION=<azure-region> az group create --name $RESOURCE_GROUP --location $LOCATION
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.export CLUSTER_NAME=<cluster-name> az aks create \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --enable-aad \ --enable-azure-rbac \ --generate-ssh-keys
Çıkışınız aşağıdaki örnek çıkışa benzer olmalıdı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 mevcut bir AKS kümesinde Kubernetes için Azure RBAC Yetkilendirmesini
az aks update
--enable-azure-rbac
etkinleştirin.az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --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 update
--disable-azure-rbac
kaldırın.az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --disable-azure-rbac
AKS yerleşik rolleri
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 Secrets vermez 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öneticisi | 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öneticisi | 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. |
Küme erişimi için rol atamaları oluşturma
komutunu kullanarak
az aks show
AKS kaynak kimliğinizi alın.AKS_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query id --output 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. Aşağıdaki örnek, Azure Kubernetes Service RBAC Yönetici rolü için bir rol ataması oluşturur.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>
Ö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 olarakdeploy-view.json
kaydedin.{ "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 dosyayadeploy-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 --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
Artık kümenizi yönetmek için kullanabilirsiniz
kubectl
. Örneğin, kullanarakkubectl get nodes
kümenizdeki düğümleri listeleyebilirsiniz.kubectl get nodes
Örnek çıkış:
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 senaryoların engelini kaldırmaya yardımcı olmak için eklentiyi oluşturmuşturkubelogin
.
kubelogin
Aşağıdaki komutu çalıştırarak eklentiyi kullanın:export KUBECONFIG=/path/to/kubeconfig kubelogin convert-kubeconfig
Artık kümenizi yönetmek için kullanabilirsiniz
kubectl
. Örneğin, kullanarakkubectl get nodes
kümenizdeki düğümleri listeleyebilirsiniz.kubectl get nodes
Örnek çıkış:
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
komutunu kullanarak rol atamalarını listeleyin
az role assignment list
.az role assignment list --scope $AKS_ID --query [].id --output tsv
komutunu kullanarak
az role assignment delete
rol atamalarını silin.az role assignment delete --ids <LIST OF ASSIGNMENT IDS>
Rol tanımını silme
komutunu kullanarak
az role definition delete
özel rol tanımını silin.az role definition delete --name "AKS Deployment Reader"
Kaynak grubunu ve AKS kümesini silme
komutunu kullanarak
az group delete
kaynak grubunu ve AKS kümesini silin.az group delete --name $RESOURCE_GROUP --yes --no-wait
Sonraki adımlar
AKS kimlik doğrulaması, yetkilendirme, Kubernetes RBAC ve Azure RBAC hakkında daha fazla bilgi edinmek için bkz:
Azure Kubernetes Service