Kubernetes yetkilendirmesi için Azure rol tabanlı erişim denetimini (RBAC) kullanma
Şunlar için geçerlidir: Azure Yerel'de AKS, sürüm 23H2
Altyapı yöneticileri kubeconfig dosyasına ve sahip oldukları izinlere kimlerin erişebileceğini denetlemek için Azure rol tabanlı erişim denetimini (Azure RBAC) kullanabilir. Kubernetes işleçleri, verilen izinlere göre kubectl aracını kullanarak Kubernetes kümeleriyle etkileşimde bulunabilir. Azure CLI, kubectl kullanarak AKS kümelerinize bağlanmak için erişim kimlik bilgilerini ve kubeconfig yapılandırma dosyasını almak için kolay bir yol sağlar.
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. 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, Microsoft Entra Kimliği ve Azure rol atamalarıyla Kubernetes küme yetkilendirmesi için Azure RBAC'nin nasıl kullanılacağı açıklanmaktadır.
Kavramsal genel bakış için bkz . Azure Arc tarafından etkinleştirilen AKS için Kubernetes için Azure RBAC Yetkilendirmesi .
Başlamadan önce
Başlamadan önce aşağıdaki önkoşullara sahip olduğunuzdan emin olun:
Azure Yerel'de AKS, sürüm 23H2 şu anda yalnızca Kubernetes kümesi oluşturma sırasında Azure RBAC'nin etkinleştirilmesini desteklemektedir. Kubernetes kümesi oluşturulduktan sonra Azure RBAC'yi etkinleştiremezsiniz.
aksarc ve connectedk8s Azure CLI uzantılarının en son sürümünü yükleyin. Azure RBAC'yi etkinleştirmek için aksarc uzantısı sürüm 1.1.1 veya üzerini çalıştırmanız gerektiğini unutmayın. Geçerli sürümü bulmak için komutunu çalıştırın
az --version
. Azure CLI'yı yüklemeniz veya yükseltmeniz gerekiyorsa bkz . Azure CLI'yı yükleme.az extension add --name aksarc az extension add --name connectedk8s
Uzantıyı
aksarc
zaten yüklediyseniz uzantıyı en son sürüme güncelleştirin:az extension update --name aksarc az extension update --name connectedk8s
Kubernetes kümeleriyle etkileşim kurmak için kubectl ve kubelogin yüklemeniz gerekir.
Kubernetes kümesi oluştururken Azure RBAC'yi etkinleştirmek için aşağıdaki izinlere ihtiyacınız vardır:
- Kubernetes kümesi oluşturmak için Azure Kubernetes Service Arc Katkıda Bulunanı rolüne sahip olmanız gerekir.
- parametresini
--enable-azure-rbac
kullanmak için, Microsoft.Authorization/roleAssignments/write iznine erişim için Rol Tabanlı Erişim Denetimi Yöneticisi rolüne sahip olmanız gerekir. Daha fazla bilgi için bkz. Azure yerleşik rolleri. - Yeni rol atamalarının yayılması beş dakika kadar sürebilir ve yetkilendirme sunucusu tarafından güncelleştirilebilir.
Azure RBAC etkinleştirildikten sonra, doğrudan modu veya ara sunucu modunu kullanarak verilen izinlerle Kubernetes kümenize erişebilirsiniz.
- Kubernetes kümesine
az aksarc get-credentials
doğrudan komutunu kullanarak erişmek için Azure Kubernetes Service Arc Kümesi Kullanıcı rolü iznine dahil edilen Microsoft.HybridContainerService/provisionedClusterInstances/listUserKubeconfig/action gereklidir. - Kubernetes kümesine komutunu kullanarak
az connectedk8s proxy
ara sunucu moduyla veya Azure portalından her yerden erişmek için Azure Arc özellikli Kubernetes Kümesi Kullanıcı rolü iznine dahil edilen Microsoft.Kubernetes/connectedClusters/listClusterUserCredential/action eylemine ihtiyacınız vardır. Bu arada, aracıların ve ekleme işlemini gerçekleştiren makinenin Azure Arc özellikli Kubernetes ağ gereksinimlerinde belirtilen ağ gereksinimlerini karşıladığını doğrulamanız gerekir.
- Kubernetes kümesine
Kubectl'yi kullanmak için Azure RBAC veya AAD Yönetici Grubu'nı kullanarak erişebilirsiniz.
- Azure RBAC ile kubectl kullanmak için Azure Arc Kubernetes Viewer rolünün kapsamı bağlı küme kaynağı olarak belirlenmiş olmalıdır.
- Kubectl'yi AAD Yönetici Grubu ile kullanmak için belirli bir role ihtiyacınız yoktur, ancak bağlı küme kaynağının add-admin-group listesindeki gruplardan birinde olduğunuzdan emin olmanız gerekir.
1. Adım: Azure RBAC özellikli Kubernetes kümesi oluşturma
Yetkilendirme için Azure RBAC özellikli bir Kubernetes kümesi ve kimlik doğrulaması için Microsoft Entra Id oluşturabilirsiniz.
az aksarc create -n $aks_cluster_name -g $resource_group_name --custom-location $customlocation_ID --vnet-ids $logicnet_Id --generate-ssh-keys --enable-azure-rbac
Birkaç dakika sonra komut tamamlanıp kümeyle ilgili JSON biçimli bilgileri döndürür.
2. Adım: Kullanıcıların kümeye erişmesi için rol atamaları oluşturma
Arc tarafından etkinleştirilen AKS, aşağıdaki beş yerleşik rolü sağlar. Bunlar, CRD'leri destekleme gibi birkaç farklılığı olan Kubernetes yerleşik rollerine benzer. Her Azure yerleşik rolünün izin verdiği eylemlerin tam listesine bakın.
Rol | Açıklama |
---|---|
Azure Arc özellikli Kubernetes Kümesi Kullanıcısı | Kümeleri her yerden yönetmek için Küme Bağlantısı tabanlı kubeconfig dosyasını almanıza olanak tanır. |
Azure Arc Kubernetes Viewer | Ad alanında çoğu nesneyi görmek için salt okunur erişime izin verir. Gizli diziler üzerinde okuma izni ad alanında ServiceAccount kimlik bilgilerine erişim sağladığından gizli dizileri görüntülemeye izin vermez. Bu kimlik bilgileri de bu ServiceAccount değeri (ayrıcalık yükseltme biçimi) üzerinden API erişimine izin verir. |
Azure Arc Kubernetes Yazıcı | Ad alanı içindeki çoğu nesneye okuma/yazma erişimine izin verir. Rollerin veya rol bağlamalarının görüntülenmesine veya değiştirilmesine izin vermez. Ancak, bu rol gizli dizilere erişmeye ve podları ad alanında herhangi bir ServiceAccount değeri olarak çalıştırmaya olanak tanır, bu nedenle ad alanında bu tür ServiceAccount değerlerinin API erişim düzeylerini kazanmak için kullanılabilir. |
Azure Arc Kubernetes Yöneticisi | Yönetici erişimine izin verir. RoleBinding aracılığıyla bir ad alanı içinde verilmesi amaçlanmıştır. RoleBinding'de kullanırsanız, ad alanı içinde rol ve rol bağlamaları oluşturma özelliği de dahil olmak üzere ad alanı içindeki kaynakların çoğuna okuma/yazma erişimi sağlar. Bu rol, kaynak kotasına veya ad alanının kendisine yazma erişimine izin vermez. |
Azure Arc Kubernetes Küme Yöneticisi | "Süper kullanıcı" erişiminin herhangi bir kaynakta herhangi bir eylemi yürütmesine izin verir. ClusterRoleBinding'de kullandığınızda, kümedeki ve tüm ad alanları içindeki her kaynak üzerinde tam denetim sağlar. RoleBinding'de kullandığınızda, ad alanının kendisi de dahil olmak üzere rol bağlama ad alanında yer alan tüm kaynaklar üzerinde tam denetim sağlar. |
Rol atamaları oluşturmak için komutunu kullanabilirsiniz az role assignment create
.
İlk olarak, rol atamak istediğiniz hedef küme için öğesini alın $ARM-ID
.
$ARM_ID = (az connectedk8s show -g "$resource_group_name" -n $aks_cluster_name --query id -o tsv)
Ardından Kubernetes kümenize rol atamak için komutunu kullanın az role assignment create
. İlk adımda ve bu adım için öğesini assignee-object-id
sağlamanız $ARM_ID
gerekir. Bir assignee-object-id
Microsoft Entra Kimliği veya hizmet sorumlusu istemci kimliği olabilir.
Aşağıdaki örnek, Kubernetes kümesine Azure Arc Kubernetes Viewer rolünü atar:
az role assignment create --role "Azure Arc Kubernetes Viewer" --assignee <assignee-object-id> --scope $ARM_ID
Bu örnekte kapsam, kümenin Azure Resource Manager kimliğidir. Kubernetes kümesini içeren kaynak grubu da olabilir.
Özel rol tanımları oluşturma
Rol atamalarında kullanmak üzere kendi rol tanımınızı oluşturmayı seçebilirsiniz.
Aşağıdaki örnekte, kullanıcının yalnızca dağıtımları okumasına izin veren bir rol tanımı gösterilmektedir. Daha fazla bilgi için rol tanımı oluşturmak için kullanabileceğiniz veri eylemlerinin tam listesine bakın. Özel rol oluşturma hakkında daha fazla bilgi için bkz. Özel rol oluşturma adımları
Kendi özel rol tanımlarınızı oluşturmak için aşağıdaki JSON nesnesini custom-role.json adlı bir dosyaya kopyalayın. Yer tutucuyu <subscription-id>
gerçek abonelik kimliğiyle değiştirin. Özel rol, veri eylemlerinden birini kullanır ve rol atamasının oluşturulduğu kapsamdaki (küme veya ad alanı) tüm dağıtımları görüntülemenizi sağlar.
{
"Name": "AKS Arc Deployment Reader",
"Description": "Lets you view all deployments in cluster/namespace.",
"Actions": [],
"NotActions": [],
"DataActions": [
"Microsoft.Kubernetes/connectedClusters/apps/deployments/read"
],
"NotDataActions": [],
"assignableScopes": [
"/subscriptions/<YOUR SUBSCRIPTION ID>"
]
}
Özel roller ve bunları yazma hakkında bilgi için bkz . Azure özel rolleri.
komutunu kullanarak az role definition create
rol tanımını oluşturun ve parametresini --role-definition
önceki adımda oluşturduğunuz deploy-view.json dosyasına ayarlayın:
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 Arc Deployment Reader" --assignee <assignee-object-id> --scope $ARM_ID
3. Adım: Kubernetes kümesine erişme
Artık kubernetes kümenize doğrudan modu veya ara sunucu modunu kullanarak verilen izinlerle erişebilirsiniz.
Kubectl (doğrudan mod) ile kümenize erişme
Verilen izinlerle Kubernetes kümesine erişmek için Kubernetes işlecinin komutunu kullanarak az aksarc get-credentials
edinebileceğiniz Microsoft Entra kubeconfig'e ihtiyacı vardır. Bu komut, yönetici tabanlı kubeconfig'e ve kullanıcı tabanlı kubeconfig'e erişim sağlar. Yönetici tabanlı kubeconfig dosyası gizli diziler içerir ve düzenli aralıklarla güvenli bir şekilde depolanması ve döndürülmesi gerekir. Öte yandan kullanıcı tabanlı Microsoft Entra ID kubeconfig gizli diziler içermez ve istemci makinelerinden bağlanan kullanıcılara dağıtılabilir.
Bu Azure CLI komutunu çalıştırmak için, Azure Kubernetes Service Arc Kümesi Kullanıcı rolü iznine dahil edilen Microsoft.HybridContainerService/provisionedClusterInstances/listUserKubeconfig/action gereklidir:
az aksarc get-credentials -g "$resource_group_name" -n $aks_cluster_name --file <file-name>
Artık kubectl kullanarak kümenizi yönetebilirsiniz. Ö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
Kümenize bir istemci cihazından (proxy modu) erişme
Komutunu kullanarak az connectedk8s proxy
ara sunucu moduyla Kubernetes kümesine her yerden erişmek için Azure Arc özellikli Kubernetes Kümesi Kullanıcı rolü iznine dahil edilen Microsoft.Kubernetes/connectedClusters/listClusterUserCredential/action gereklidir.
Aşağıdaki adımları başka bir istemci cihazında çalıştırın:
Microsoft Entra kimlik doğrulamasını kullanarak oturum açma
Kümeyle her yerden (kümeyi çevreleyen güvenlik duvarının dışından bile) iletişim kurmak için gereken küme bağlantısı kubeconfig'i edinin:
az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP
Not
Bu komut proxy'yi açar ve geçerli kabuğu engeller.
Farklı bir kabuk oturumunda, kümeye istek göndermek için kullanın
kubectl
:kubectl get pods -A
Şimdi kümeden ad alanı altındaki default
tüm podların listesini içeren bir yanıt görmeniz gerekir.
Daha fazla bilgi için bkz . İstemci cihazından kümenize erişme.
Kaynakları temizleme
Rol atamasını sil
# List role assignments
az role assignment list --scope $ARM_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 Arc Deployment Reader"