Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir: ✔️ AKS Otomatik ✔️ AKS Standart
Bu makalede, Microsoft Entra ID kimliklerini kullanarak Azure Kubernetes Service (AKS)'da Kubernetes API'sine çağrıları yetkilendirme gösterilmektedir. Kubernetes API'sine yönelik Microsoft Entra ID yetkilendirme, Kubernetes kaynaklarına erişim vermek için Azure RBAC rol atamalarını kullanır. Yerleşik Kubernetes kaynakları için küme veya ad alanı kapsamında AKS yerleşik rollerinden birini (Azure Kubernetes Service RBAC Okuyucusu gibi) atayın. Özel kaynaklar (CRD) için, atananın erişebileceği CRD gruplarını veya türlerini belirten Azure ABAC koşullarıyla özel bir rol atayın. İki rol ataması oluşturur: biri standart Kubernetes kaynaklarına erişim, diğeri ise belirli özel kaynaklara koşullu erişim verir.
Çoğu üretim iş yükü için AKS Otomatik, AKS için önerilen üretime hazır varsayılan değerdir. AKS Otomatik kümeleri Kubernetes yetkilendirmesi için Azure RBAC ile önceden yapılandırılmıştır, böylece kullanıcılara, gruplara ve hizmet sorumlularına doğru Microsoft Entra rol atamalarını atamaya odaklanabilirsiniz.
AKS'de kullanılabilir Kubernetes API yetkilendirme seçeneklerine kavramsal genel bakış için bkz. Küme yetkilendirme kavramları.
Note
Microsoft Entra Id 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. Microsoft Entra ID yetkilendirmesini kullanarak Kubernetes için kullanıcı kimliklerini ve kimlik bilgilerini ayrı ayrı yönetmeniz gerekmez. Ancak yine de Microsoft Entra ID rol atamalarını ve tüm Kubernetes RBAC bağlamalarını ayrı olarak ayarlamanız ve yönetmeniz gerekir.
Note
AKS Otomatik kümeleri, Kubernetes yetkilendirmesi için Azure RBAC kullanacak şekilde önceden yapılandırılmıştır. AKS Automatic kümelerinde --enable-azure-rbac etkinleştirmeniz gerekmez. AKS Standard'da, küme yapılandırmanıza bağlı olarak Azure RBAC'yi etkinleştirebilir veya devre dışı bırakabilirsiniz.
Prerequisites
- 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 --versionkomutunu çalıştırın. Yüklemeniz veya yükseltmeniz gerekiyorsa bkz. Azure CLI'yı yükleme. sürümünün, en az 1.18.3 olması gerekiyor.>- Kubernetes API'sine Microsoft Entra ID yetkilendirme ekleyebilmeniz için önce kümenizde yönetilen Microsoft Entra tümleştirmesinin etkinleştirilmesi gerekir. Yönetilen Microsoft Entra tümleştirmesini etkinleştirmeniz gerekiyorsa bkz. AKS'de Microsoft Entra Kimliğini kullanma.
- Yeni rol atamalarının yayılması beş dakika kadar sürebilir ve yetkilendirme sunucusu tarafından güncelleştirilebilir.
- Kubernetes API'sinin Microsoft Entra ID 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.
AKS küme modu davranışı
| Küme modu | Kubernetes yetkilendirmesi için RBAC Azure |
|---|---|
| AKS Otomatik | Önceden yapılandırılmış (varsayılan olarak etkin) |
| AKS Standard | İsteğe bağlı (ile --enable-azure-rbacetkinleştir ) |
Yönetilen Microsoft Entra tümleştirmesi ve Microsoft Entra ID yetkilendirmesi ile yeni bir AKS kümesi oluşturma
AKS Otomatik (üretim iş yükleri için önerilir)
Yeni üretim iş yükleri için AKS Otomatik'i kullanın. Kubernetes yetkilendirmesi için Azure RBAC, AKS Otomatik kümelerinde önceden yapılandırılmıştır.
Azure Kubernetes Service (AKS) Automatic kümesi oluşturma başlıklı makaledeki adımları izleyerek bir AKS Automatic kümesi oluşturun.
İsteğe bağlı: komutunu kullanarak kümenizde Kubernetes yetkilendirmesi için Azure RBAC'nin
az aks showetkinleştirildiğini doğrulayın.# Set environment variables export RESOURCE_GROUP=<resource-group-name> export CLUSTER_NAME=<cluster-name> az aks show \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --query "aadProfile.enableAzureRbac" \ --output tsv
AKS Standard
az group createkomutunu kullanarak bir Azure kaynak grubu oluşturun.export RESOURCE_GROUP=<resource-group-name> export LOCATION=<azure-region> az group create --name $RESOURCE_GROUP --location $LOCATIONaz aks createkomutunu kullanarak, yönetilen Microsoft Entra tümleştirmesi ve Microsoft Entra ID yetkilendirmesi ile bir Standart 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 Microsoft Entra ID yetkilendirmeyi etkinleştirme
Mevcut AKS Standard kümeleri için, --enable-azure-rbac bayrağıyla birlikte az aks update komutunu kullanarak Kubernetes API'si için Microsoft Entra ID yetkilendirmesini etkinleştirin.
# Set environment variables
export RESOURCE_GROUP=<resource-group-name>
export CLUSTER_NAME=<cluster-name>
# Enable Microsoft Entra ID authorization for the Kubernetes API
az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --enable-azure-rbac
AKS Otomatik kümelerinde kubernetes yetkilendirmesi için önceden yapılandırılmış Azure RBAC zaten var. AKS Otomatik için çalıştırmanız --enable-azure-rbac gerekmez.
AKS yerleşik rolleri
AKS aşağıdaki yerleşik rolleri sağlar:
| Rol | Description |
|---|---|
| Azure Kubernetes Service RBAC Okuyucusu | İsim alanındaki ç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. Bu rol, Sırların içeriğini okumanın ad alanında ServiceAccount kimlik bilgilerine erişim sağlayarak API'ye herhangi bir ServiceAccount olarak erişim verilmesine yol açabileceği için, Secrets görüntülemeye izin vermez (bir tür ayrıcalık yükseltimi). |
| 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 | Yönetici erişimine izin verir, bir ad alanı içinde verilmesi amaçlanmıştır. Ad alanındaki (veya küme kapsamındaki) çoğu kaynağa okuma/yazma erişimi sağlar ve ad alanı içinde roller ve rol bağlamaları oluşturma yeteneği dahil. 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ıya herhangi bir kaynaktaki tüm işlemleri yapabilme izni 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 showAKS kaynak kimliğinizi alın.# Set environment variables export RESOURCE_GROUP=<resource-group-name> export CLUSTER_NAME=<cluster-name> # Get the AKS resource ID AKS_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query id --output tsv)az role assignment createkomutunu kullanarak bir rol ataması 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.# Set environment variables export RESOURCE_GROUP=<resource-group-name> export CLUSTER_NAME=<cluster-name> # Get the AKS resource ID AKS_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query id --output tsv) # Create a role assignment for the Azure Kubernetes Service RBAC Admin role az role assignment create --role "Azure Kubernetes Service RBAC Admin" --assignee <AAD-ENTITY-ID> --scope $AKS_IDNote
komutunu kullanarak
az role assignment createAzure Kubernetes Service RBAC Okuyucusu ve Azure Kubernetes Service RBAC Yazıcısı rol atamalarını küme içindeki belirli bir ad alanına göre oluşturabilir ve kapsamı istenen ad alanına ayarlayabilirsiniz.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
Yerleşik Kubernetes kaynakları için özel rol tanımlamaları, ilgili API grubu işlemi kapsamında Microsoft.ContainerService/managedClusters/'e başvurur. Aşağıdaki örnek, kullanıcının yalnızca dağıtımları okumasına izin verir ve başka bir şey okumaz. Olası eylemlerin tam listesi için bkz. Microsoft.ContainerService işlemleri. Belirli özel kaynak (CRD) gruplarına veya türlerine erişimi filtrelemek için bu makalenin devamında yer alan ABAC koşullarını kullanarak özel kaynak erişimini kısıtlama konusuna bakın.
Kendi özel rol tanımlarınızı oluşturmak için aşağıdaki dosyayı kopyalayın,
<YOUR-SUBSCRIPTION-ID>öğesini kendi abonelik kimliğinizle değiştirin ve ardından dosyayıdeploy-view.jsonolarak 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
az role definition createkullanarak rol tanımını oluşturun ve--role-definitionöğesini, önceki adımda oluşturduğunuzdeploy-view.jsondosyasına ayarlayın.az role definition create --role-definition @deploy-view.jsonkomutunu kullanarak rol tanımını bir kullanıcıya veya başka bir kimliğe atayın
az role assignment create.# Set environment variables export RESOURCE_GROUP=<resource-group-name> export CLUSTER_NAME=<cluster-name> # Get the AKS resource ID AKS_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query id --output tsv) # Create a role assignment for the AKS Deployment Reader role az role assignment create --role "AKS Deployment Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID
ABAC koşullarını kullanarak özel kaynak erişimini kısıtlama (önizleme)
Important
AKS önizleme özellikleri self servis ve kabul temelinde kullanılabilir. Önizlemeler "olduğu gibi" ve "mevcut olduğu şekilde" sağlanmakta olup, hizmet seviyesi anlaşmalarına ve sınırlı garantilere dahil edilmemektedir. AKS önizlemeleri, müşteri desteği ekibi tarafından maksimum çaba gösterilerek kısmen ele alınmaktadır. Bu nedenle, bu özellikler üretim kullanımı için tasarlanmamıştır. Daha fazla bilgi için aşağıdaki destek makalelerine bakın:
ABAC koşulları, küme başına Kubernetes RBAC Role ve RoleBinding bildirimleri yazmadan, Microsoft Entra ID’den merkezi olarak Microsoft Entra ID rol atamalarını belirli özel kaynak (CRD) grupları ve türleriyle filtrelemenizi sağlar. Azure ABAC'de arka plan için bkz. Azure rol atama koşulları nelerdir?
ABAC koşulları ne zaman kullanılır?
Şunları yapmak istediğinizde bu özelliği kullanın:
- Atananların listeleyebileceği veya alabildiği CRD gruplarını veya türlerini kısıtlayın.
- Kubernetes RBAC'yi
RoleveRoleBindingher kümedeki nesneleri yönetmeden Microsoft Entra ID'den özel kaynak erişim sınırlarını merkezi olarak zorunlu tutma. - Farklı operatörler tarafından yayımlanan CRD'leri birbirinden ayırt edin (örneğin,
secrets-store.csi.x-k8s.ioizin verin sırasındasecurity.istio.ioengelleyin).
Kullanılabilir koşul öznitelikleri
Aks kümesinde Kubernetes API'sine yönelik koşullar yazarken aşağıdaki istek öznitelikleri kullanılabilir:
| Özellik | Description |
|---|---|
Microsoft.ContainerService/managedClusters/customResources:group |
Erişilmekte olan özel kaynağın API grubu (örneğin, secrets-store.csi.x-k8s.io). |
Microsoft.ContainerService/managedClusters/customResources:kind |
Erişilen özel kaynağın türü (örneğin, secretproviderclasses). |
Rol atamasına ABAC koşulu ekleme
Aşağıdaki örnek, özel kaynaklara okuma erişimi veren bir AKS CRD Okuyucusu özel rolü oluşturur. Ardından, rolü secrets-store.csi.x-k8s.io grubundaki secretproviderclasses öğesine erişime yalnızca izin veren bir koşulla atar (Secrets Store CSI Driver için Azure Key Vault sağlayıcısının kullandığı CRD).
Aşağıdaki rol tanımını
crd-reader.jsonadlı bir dosyaya kaydedin ve<YOUR-SUBSCRIPTION-ID>öğesini kendi abonelik kimliğinizle değiştirin.{ "Name": "AKS CRD Reader", "Description": "Lets you read custom resources in the cluster.", "Actions": [], "NotActions": [], "DataActions": [ "Microsoft.ContainerService/managedClusters/customresources/read" ], "NotDataActions": [], "assignableScopes": [ "/subscriptions/<YOUR-SUBSCRIPTION-ID>" ] }komutunu kullanarak
az role definition createrol tanımını oluşturun.az role definition create --role-definition @crd-reader.jsonAşağıdaki koşulu adlı
abac-condition.txtbir dosyaya kaydedin. Koşul, özel olmayan kaynak okumalarının değişmeden geçmesine olanak tanır ve özel kaynak okumalarını belirli bir grup ve türle kısıtlar.( ( !(ActionMatches{'Microsoft.ContainerService/managedClusters/customresources/read'}) ) OR ( @Request[Microsoft.ContainerService/managedClusters/customResources:group] StringEqualsIgnoreCase 'secrets-store.csi.x-k8s.io' AND @Request[Microsoft.ContainerService/managedClusters/customResources:kind] StringEqualsIgnoreCase 'secretproviderclasses' ) )Koşulu olan rol atamasını
az role assignment createkomutunu kullanarak oluşturun.# Set environment variables export RESOURCE_GROUP=<resource-group-name> export CLUSTER_NAME=<cluster-name> # Get the AKS resource ID AKS_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query id --output tsv) # Create a role assignment for the AKS CRD Reader role with an ABAC condition az role assignment create \ --role "AKS CRD Reader" \ --assignee <AAD-ENTITY-ID> \ --scope $AKS_ID \ --condition "$(cat abac-condition.txt)" \ --condition-version "2.0" \ --description "Allow reads on SecretProviderClass resources only"
Azure portalı aracılığıyla bir koşul da ekleyebilirsiniz. Rol ataması ekle sayfasında Koşullar sekmesini seçin, ardından Koşul ekle'yi seçin ve ifadeyi oluşturmak için görsel düzenleyiciyi kullanın.
Koşulu doğrula
Rol ataması yayıldıktan sonra (beş dakikaya kadar sürebilir), atanan olarak oturum açın ve yalnızca izin verilen CRD'leri okuyabildiğini, diğer CRD'leri ise okuyamadığını onaylayın.
komutunu kullanarak
az aks get-credentialsküme kimlik bilgilerini alın.# Set environment variables export RESOURCE_GROUP=<resource-group-name> export CLUSTER_NAME=<cluster-name> # Get the cluster credentials az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAMEsecretproviderclassesgrubundan koşulun izin verdiği şekilde listeleyinsecrets-store.csi.x-k8s.io. Komutun başarılı olması ve mevcut kaynakları veya boş bir listeyi (veya CRD kümede yüklü değilse bulunamadı hatasını) döndürmesi gerekir.kubectl get secretproviderclasses.secrets-store.csi.x-k8s.io --all-namespacesKoşulun engellediği Istio
authorizationpoliciesgrubundan listeleyinsecurity.istio.io. Komut, Microsoft Entra ID yetkilendirme web kancasından birForbiddenhatayla başarısız olmalıdır (Istio CRD'nin kümede yüklü olduğu varsayılır; aksi takdirdekubectlAPI sunucusu yetkilendirme web kancası'na ulaşmadan önce bulunamadı hatası döndürür).kubectl get authorizationpolicies.security.istio.io --all-namespaces
Kaynakları temizle
Microsoft Entra ID yetkilendirmesini devre dışı bırakma
az aks update komutunu --disable-azure-rbac bayrağıyla kullanarak Microsoft Entra ID yetkilendirmesini kaldırın.
# Set environment variables
export RESOURCE_GROUP=<resource-group-name>
export CLUSTER_NAME=<cluster-name>
# Disable Microsoft Entra ID authorization for the Kubernetes API
az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --disable-azure-rbac
Rol atamasını sil
komutunu kullanarak rol atamalarını listeleyin
az role assignment list.# Set environment variables export RESOURCE_GROUP=<resource-group-name> export CLUSTER_NAME=<cluster-name> # Get the AKS resource ID AKS_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query id --output tsv) # List role assignments for the AKS cluster az role assignment list --scope $AKS_ID --query [].id --output tsvkomutunu kullanarak
az role assignment deleterol atamalarını silin.az role assignment delete --ids <LIST OF ASSIGNMENT IDS>
Rol tanımını silme
komutunu kullanarak az role definition delete özel bir 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 içerdiği AKS kümesini) silin.
# Set environment variables
export RESOURCE_GROUP=<resource-group-name>
# Delete the resource group and all resources in it
az group delete --name $RESOURCE_GROUP --yes --no-wait
İlgili içerik
AKS hakkında daha fazla bilgi edinmek için aşağıdaki makalelere bakın: