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ı 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.
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 update
enable-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 update
disable-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 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ö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.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 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 nodes
kü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: