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/*/read sağ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.