Kubernetes Yetkilendirmesi için Azure rol tabanlı erişim denetimini kullanma

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.

Not

Microsoft Entra Kimliği ile AKS arasında tümleşik kimlik doğrulaması kullanırken, 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 sayesinde Kubernetes için kullanıcı kimliklerini ve kimlik bilgilerini ayrı ayrı yönetmeniz gerekmez. Ancak Yine de Azure RBAC ve Kubernetes RBAC'yi ayrı ayrı ayarlamanız ve yönetmeniz gerekir.

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ı gerekirkubectl.
  • 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 gibi Microsoft.ContainerService/apps/deployments/readbelirli 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

  1. komutunu kullanarak az group create bir Azure kaynak grubu oluşturun.

    export RESOURCE_GROUP=<resource-group-name>
    export LOCATION=<azure-region>
    
    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  2. 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.

    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 Azure RBAC'yi etkinleştirme

  • bayrağıyla komutunu kullanarak mevcut bir AKS kümesinde Kubernetes için Azure RBAC Yetkilendirmesini az aks update --enable-azure-rbac etkinleştirin.

    az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --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 --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --disable-azure-rbac
    

AKS yerleşik rolleri

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 Secretsvermez 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öneticisi 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öneticisi 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.

Küme erişimi için rol atamaları oluşturma

  1. komutunu kullanarak az aks show AKS kaynak kimliğinizi alın.

    AKS_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query id --output tsv)
    
  2. 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. Aşağıdaki örnek, Azure Kubernetes Service RBAC Yönetici rolü için bir rol ataması oluşturur.

    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>
    

Ö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.

  1. 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.jsonkaydedin.

    {
        "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>"
        ]
    }
    
  2. 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 
    
  3. 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

  1. 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 --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
    
  2. Artık kümenizi yönetmek için kullanabilirsiniz kubectl . Örneğin, kullanarak kubectl get nodeskümenizdeki düğümleri listeleyebilirsiniz.

    kubectl get nodes
    

    Örnek çıkış:

    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 senaryoların engelini kaldırmaya yardımcı olmak için eklentiyi oluşturmuşturkubelogin.

  1. kubelogin Aşağıdaki komutu çalıştırarak eklentiyi kullanın:

    export KUBECONFIG=/path/to/kubeconfig
    kubelogin convert-kubeconfig
    
  2. Artık kümenizi yönetmek için kullanabilirsiniz kubectl . Örneğin, kullanarak kubectl get nodeskümenizdeki düğümleri listeleyebilirsiniz.

    kubectl get nodes
    

    Örnek çıkış:

    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

  1. komutunu kullanarak rol atamalarını listeleyin az role assignment list .

    az role assignment list --scope $AKS_ID --query [].id --output tsv
    
  2. komutunu kullanarak az role assignment delete rol atamalarını silin.

    az role assignment delete --ids <LIST OF ASSIGNMENT IDS>
    

Rol tanımını silme

  • komutunu kullanarak az role definition delete özel 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 AKS kümesini silin.

    az group delete --name $RESOURCE_GROUP --yes --no-wait
    

Sonraki adımlar

AKS kimlik doğrulaması, yetkilendirme, Kubernetes RBAC ve Azure RBAC hakkında daha fazla bilgi edinmek için bkz: