Kubernetes Yetkilendirmesi için Azure RBAC kullanma
Bugün Azure Active Directory (Azure AD) ile AKS arasında tümleşik kimlik doğrulaması kullanabilirsiniz. Bu tümleştirme etkinleştirildiğinde müşterilerin Kubernetes RBAC'de konu olarak Azure AD kullanıcılarını, gruplarını veya hizmet sorumlularını kullanmalarını sağlar. Burada daha fazla bilgi edinebilirsiniz. Bu özellik, Kubernetes için kullanıcı kimliklerini ve kimlik bilgilerini ayrı ayrı yönetmek zorunda kalmamanizi sağlar. Ancak Yine de Azure RBAC ve Kubernetes RBAC'yi ayrı ayrı ayarp yönetmeniz gerekir. AKS üzerinde RBAC ile kimlik doğrulaması ve yetkilendirme hakkında daha fazla bilgi için buraya bakın.
Bu belge, Azure Kaynakları, AKS ve Kubernetes kaynakları arasında birleşik yönetim ve erişim denetimi sağlayan yeni bir yaklaşımı kapsar.
Başlamadan önce
Azure'dan Kubernetes kaynakları için RBAC'yi yönetebilme özelliği, Azure veya yerel Kubernetes mekanizmalarını kullanarak küme kaynakları için RBAC'yi yönetme seçeneği sunar. Etkinleştirildiğinde Azure AD sorumluları yalnızca Azure RBAC tarafından doğrulanırken, normal Kubernetes kullanıcıları ve hizmet hesapları yalnızca Kubernetes RBAC tarafından doğrulanır. AKS üzerinde RBAC ile kimlik doğrulaması ve yetkilendirme hakkında daha fazla bilgi için buraya bakın.
Önkoşullar
- Azure CLI 2.24.0 veya sonraki bir sürümüne sahip olduğundan emin olun
- kubectl v1.18.3+yüklü olduğundan emin olmak.
Sınırlamalar
- Yönetilen Azure AD tümleştirmesi gerektirir.
- kubectl v1.18.3+ kullanın.
- CRD'lere sahip ve özel rol tanımları yapıyorsanız, CRD'leri bugün kapsayacak tek yol
Microsoft.ContainerService/managedClusters/*/readsağlamaktır. AKS, CRD'ler için daha ayrıntılı izinler sağlamak için çalışıyor. Kalan nesneler için belirli API Gruplarını kullanabilirsiniz, örneğin:Microsoft.ContainerService/apps/deployments/read. - Yeni rol atamaların yayılması 5 dakika kadar zaman alır ve yetkilendirme sunucusu tarafından güncelleştirilebilir.
- Kimlik doğrulaması için yapılandırılan Azure AD kiracısını, AKS kümesine sahip aboneliğin kiracısı ile aynı olması gerekir.
Azure RBAC ve yönetilen Azure AD tümleştirmesi kullanarak yeni küme oluşturma
Aşağıdaki CLI komutlarını kullanarak bir AKS kümesi oluşturun.
Azure kaynak grubu oluşturma:
# Create an Azure resource group
az group create --name myResourceGroup --location westus2
Yönetilen Azure AD tümleştirmesi ve Kubernetes Yetkilendirmesi için Azure RBAC ile AKS kümesi oluşturun.
# Create an AKS-managed Azure AD cluster
az aks create -g MyResourceGroup -n MyManagedCluster --enable-aad --enable-azure-rbac
Azure AD tümleştirmesi ve Kubernetes Yetkilendirmesi için Azure RBAC ile başarılı bir küme oluşturma işlemi yanıt gövdesinde aşağıdaki bölümü içerir:
"AADProfile": {
"adminGroupObjectIds": null,
"clientAppId": null,
"enableAzureRbac": true,
"managed": true,
"serverAppId": null,
"serverAppSecret": null,
"tenantId": "****-****-****-****-****"
}
Azure RBAC'yi mevcut kümeyle tümleştirin
Not
Kubernetes Yetkilendirmesi için Azure RBAC'yi kullanmak Azure Active Directory tümleştirmenin kümeniz üzerinde etkinleştirilmesi gerekir. Daha fazla bilgi için bkz. Azure Active Directory tümleştirmesi.
Kubernetes Yetkilendirmesi için Azure RBAC'yi mevcut bir AKS kümesine eklemek üzere az aks update komutunu bayrağıyla enable-azure-rbac kullanın.
az aks update -g myResourceGroup -n myAKSCluster --enable-azure-rbac
Kubernetes Yetkilendirmesi için Azure RBAC'yi var olan bir AKS kümesinden kaldırmak için az aks update komutunu bayrağıyla disable-azure-rbac kullanın.
az aks update -g myResourceGroup -n myAKSCluster --disable-azure-rbac
Kullanıcıların kümeye erişmesi için rol atamaları oluşturma
AKS aşağıdaki dört yerleşik rol sağlar:
| Rol | Açıklama |
|---|---|
| Azure Kubernetes Service RBAC Okuyucusu | Bir ad alanı içinde çoğu nesne 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ğini okumak ad alanı içindeki ServiceAccount kimlik bilgilerine erişime olanak sağlar ve bu da ad alanı içindeki herhangi bir ServiceAccount olarak API erişimine izin verir (ayrıcalık yükseltme Secrets biçimi) |
| Azure Kubernetes Service RBAC Yazıcı | Bir ad alanı içinde çoğu nesne için okuma/yazma erişimine izin verir. Bu rol, rolleri veya rol bağlamalarını görüntülemeye veya değiştirmeye izin vermez. Ancak, bu rol podlara ad alanı içinde herhangi bir ServiceAccount olarak erişmeye ve çalıştırmaya olanak sağlar, bu nedenle ad alanı içinde herhangi bir ServiceAccount'ın API erişim düzeylerini elde etmek Secrets 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ğlaması oluşturma olanağı da dahil olmak üzere bir ad alanı (veya küme kapsamı) 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 Kubernetes Service RBAC Kümesi Yöneticisi | Herhangi bir kaynak üzerinde herhangi bir eylem gerçekleştirmek için süper kullanıcı erişimine izin verir. Kümede ve tüm ad alanlarındaki tüm kaynaklar üzerinde tam denetim sağlar. |
AKS kümesi kapsamındaki rol atamaları, Azure portal'de küme kaynağının Access Control (IAM) dikey penceresinde veya aşağıda gösterildiği gibi Azure CLI komutları kullanılarak yapılabilir:
# Get your AKS Resource ID
AKS_ID=$(az aks show -g MyResourceGroup -n MyManagedCluster --query id -o tsv)
az role assignment create --role "Azure Kubernetes Service RBAC Admin" --assignee <AAD-ENTITY-ID> --scope $AKS_ID
burada <AAD-ENTITY-ID> bir kullanıcı adı (örneğin, ) veya bir hizmet user@contoso.com sorumlusuna yönelik ClientID olabilir.
Ayrıca küme içinde belirli bir ad alanı kapsamına sahip rol atamaları da oluşturabilirsiniz:
az role assignment create --role "Azure Kubernetes Service RBAC Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID/namespaces/<namespace-name>
Günümüzde ad alanları kapsamındaki rol atamaları Azure CLI aracılığıyla yapılandırıldı.
Özel rol tanımları oluşturma
İsteğe bağlı olarak, kendi rol tanımınızı oluşturma ve ardından yukarıdaki gibi atamayı seçebilirsiniz.
Aşağıda, bir kullanıcının yalnızca dağıtımları okuması ve başka bir şey okuması için izin veren bir rol tanımı örneği verilmiştir. Olası eylemlerin tam listesini burada kontrol edin.
Aşağıdaki json dosyasını adlı bir dosyaya deploy-view.json kopyalayın.
{
"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>"
]
}
yerine <YOUR SUBSCRIPTION ID> aşağıdakini çalıştırarak aboneliğinizin kimliğini girin:
az account show --query id -o tsv
Şimdi, aşağıdaki komutu kaydettiyebilirsiniz klasöründen çalıştırarak rol tanımını deploy-view.json oluşturabiliriz:
az role definition create --role-definition @deploy-view.json
Artık rol tanımınıza sahip olduğunuza göre, şu çalıştırarak bunu bir kullanıcıya veya başka bir kimliğe at attırarak:
az role assignment create --role "AKS Deployment Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID
Kubernetes Yetkilendirmesi için Azure RBAC'yi ile kullanma kubectl
Not
Aşağıdaki komutu çalıştırarak en son kubectl sürümüne sahip olduğundan emin olun:
az aks install-cli
Bunu ayrıcalıklarla çalıştırmaya ihtiyacınız sudo olabilir.
Artık istediğiniz rolü ve izinleri atadığınıza göre. Kubernetes API'sini çağırmaya başlayabilirsiniz, örneğin , kubectl .
Bu amaçla, önce aşağıdaki komutu kullanarak kümenin kubeconfig'ini alasınız:
az aks get-credentials -g MyResourceGroup -n MyManagedCluster
Önemli
Yukarıdaki adımı gerçekleştirmek Azure Kubernetes Service Küme Kullanıcısı yerleşik rolüne ihtiyacınız vardır.
Şimdi kubectl'i kullanarak kümedeki düğümleri liste gibi bir şekilde listeleyebilirsiniz. İlk kez çalıştıracak olurken oturum açmanız gerekir ve sonraki komutlar ilgili erişim belirteci kullanır.
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
Kubernetes Yetkilendirmesi için Azure RBAC'yi ile kullanma kubelogin
Etkileşimli olmayan oturum açma bilgileri, eski sürümler veya yeni kümede oturum açmak zorunda kalmadan birden çok kümede SSO'dan yararlanarak belirtecinin hala geçerli olduğu gibi ek senaryoların engelini kaldırmak için AKS adlı bir exec eklentisi kubectl kubelogin oluşturdu.
Aşağıdakini çalıştırarak kullanabilirsiniz:
export KUBECONFIG=/path/to/kubeconfig
kubelogin convert-kubeconfig
İlk kez, normal kubectl ile olduğu gibi etkileşimli olarak oturum açmanız gerekir, ancak daha sonra yeni Azure AD kümeleri için bile (belirteciniz hala geçerli olduğu sürece) artık oturum açmanız gerekmeyecektir.
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
Temizleme
Rol atamayı temizleme
az role assignment list --scope $AKS_ID --query [].id -o tsv
Tüm atamaların kimliğini veya kimliklerini kopyalayın ve ardından.
az role assignment delete --ids <LIST OF ASSIGNMENT IDS>
Rol tanımını temizleme
az role definition delete -n "AKS Deployment Reader"
Kümeyi ve kaynak grubunu silme
az group delete -n MyResourceGroup
Sonraki adımlar
- AKS Kimlik Doğrulaması, Yetkilendirme, Kubernetes RBAC ve Azure RBAC hakkında daha fazla bilgi için buraya bakabilirsiniz.
- Azure RBAC hakkında daha fazla bilgi için buraya bakabilirsiniz.
- Kubernetes yetkilendirmesi için özel Azure rollerini ayrıntılı olarak tanımlamak üzere kullanabileceğiniz tüm eylemler hakkında daha fazla bilgi için buraya bakabilirsiniz.