Azure Stack HCI ve Windows Server'da Azure AD ve Kubernetes RBAC Azure Kubernetes Service kullanarak erişimi denetleme

Şunlar için geçerlidir: Azure Stack HCI ve Windows Server üzerinde AKS

Azure Stack HCI ve Windows Server'da Azure Kubernetes Service (AKS), kullanıcı kimlik doğrulaması için Azure Active Directory (Azure AD) kullanacak şekilde yapılandırılabilir. Bu yapılandırmada, Azure AD kimlik doğrulama belirteci kullanarak aks kümesinde oturum açarsınız. Kimlik doğrulamasından geçtikten sonra, kullanıcının kimliğine veya grup üyeliğine göre ad alanlarına ve küme kaynaklarına erişimi yönetmek için yerleşik Kubernetes rol tabanlı erişim denetimini (Kubernetes RBAC) kullanabilirsiniz.

Bu makalede, Azure AD grup üyeliğine bağlı olarak aks kümesinde Kubernetes RBAC kullanarak erişimi denetleme gösterilmektedir. Azure AD'da bir tanıtım grubu ve kullanıcılar oluşturacaksınız. Ardından AKS kümesinde rolleri ve RoleBinding'leri oluşturarak kaynakları oluşturmak ve görüntülemek için uygun izinleri verirsiniz.

Önkoşullar

Azure AD kimliği kullanarak Kubernetes RBAC'yi ayarlamadan önce şunları yapmanız gerekir:

  • Azure Stack HCI ve Windows Server üzerinde AKS içeren bir AKS kümesi

    Azure Stack HCI ve Windows Server üzerinde AKS içeren bir AKS kümesine ihtiyacınız olacaktır. Kümenizi ayarlamanız gerekiyorsa Azure Stack HCI ve Windows Server'da AKS dağıtmak için Windows Admin Center veya PowerShell kullanma yönergelerini bulabilirsiniz.

  • Azure Arc bağlantısı

    Azure Stack HCI ve Windows Server'da AKS kümenize bir Azure Arc bağlantınız olmalıdır. Azure Arc'ı etkinleştirme yönergeleri için bkz. Azure Stack HCI kümesindeki bir Azure Kubernetes Service Azure Arc özellikli Kubernetes'e bağlama.

  • Aşağıdaki komut satırı araçlarına erişmeniz gerekir:

    • Azure CLI

      Azure komut satırı arabirimi (Azure CLI), Azure kaynakları oluşturup yönetmek için kullanılan komutlardır. Azure CLI'nız olup olmadığını denetlemek için bir komut satırı aracı açın ve şunu yazın: az -v.

      Yükleme yönergeleri için bkz. Azure CLI'yi yükleme.

    • Kubectl

      Kubernetes komut satırı aracı kubectl, Kubernetes kümelerinizi hedefleyen komutları çalıştırmanıza olanak tanır. kubectl'ye sahip olup olmadığınızı denetlemek için bir komut satırı aracı açın ve şunu yazın: kubectl version --client. kubectl istemci sürümünüzün en az v1.24.0olduğundan emin olun.

      Yönergeler için bkz. kubectl.

    • PowerShell ve AksHci PowerShell modülü

      PowerShell, komut satırı kabuğundan, betik dilinden ve yapılandırma yönetim çerçevesinden oluşan platformlar arası bir görev otomasyonu çözümüdür. Azure Stack HCI ve Windows Server'a AKS yüklediyseniz AksHci PowerShell modülüne erişebilirsiniz.

İsteğe bağlı ilk adımlar

Üyeleri içeren bir Azure AD grubunuz yoksa, bu makaledeki yönergeleri izlemek için bir grup oluşturmak ve bazı üyeler eklemek isteyebilirsiniz.

Azure AD ve Kubernetes RBAC ile çalışmayı göstermek için, Uygulama geliştiricileri için Kubernetes RBAC ve Azure AD küme kaynaklarına erişimi nasıl denetlediğini göstermek için kullanılabilecek bir Azure AD grubu oluşturabilirsiniz. Üretim ortamlarında, Azure AD kiracı içindeki mevcut kullanıcıları ve grupları kullanabilirsiniz.

Azure AD'de tanıtım grubu oluşturma

İlk olarak, az ad group create komutunu kullanarak uygulama geliştiricileri için kiracınızdaki Azure AD grubu oluşturun. Aşağıdaki örnekte Azure kiracınızda oturum açmanız ve ardından appdev adlı bir grup oluşturmanız gerekir:

az login
az ad group create --display-name appdev --mail-nickname appdev

Grubunuza kullanıcı ekleme

Uygulama geliştiricilerimiz için Azure AD'de oluşturulan örnek grupla birlikte, gruba bir kullanıcı appdev ekleyelim. Makalenin sonunda Kubernetes RBAC tümleştirmesini test etmek için aks kümesinde bu kullanıcı hesabıyla oturum açarsınız.

az ad group member add komutunu kullanarak önceki bölümde oluşturulan appdev grubuna bir kullanıcı ekleyin. Oturumunuzdan ayrıldıysanız kullanarak az loginAzure'a yeniden bağlanmanız gerekir.

$AKSDEV_ID = az ad user create --display-name <name> --password <strongpassword> --user-principal-name <name>@contoso.onmicrosoft.com
az ad group member add --group appdev --member-id $AKSDEV_ID

Azure AD grubu için AKS kümesi kaynağında özel bir Kubernetes RBAC rol bağlaması oluşturma

AKS kümesini, Azure AD grubunuzun AKS kümesine erişmesine izin verecek şekilde yapılandırın. Bu kılavuzdaki adımları izlemek üzere bir grup ve kullanıcı eklemek isterseniz bkz. Azure AD'de tanıtım grupları oluşturma.

  1. Get-AksHciCredential komutunu kullanarak küme yöneticisi kimlik bilgilerini alın.

    Get-AksHciCredential -name <name-of-your-cluster>
    
  2. kubectl create namespace komutunu kullanarak AKS kümesinde bir ad alanı oluşturun . Aşağıdaki örnek bir ad alanı adı geliştirmesi oluşturur:

    kubectl create namespace dev
    

    Kubernetes'te Roller , verilmesi gereken izinleri tanımlar ve RoleBinding'ler izinleri istenen kullanıcılara veya gruplara uygular. Bu atamalar belirli bir ad alanına veya kümenin tamamına uygulanabilir. Daha fazla bilgi için bkz. Kubernetes RBAC yetkilendirmesini kullanma.

    Geliştirme ad alanı için bir Rol oluşturun. Bu rol ad alanı için tam izinler verir. Üretim ortamlarında, farklı kullanıcılar veya gruplar için daha ayrıntılı izinler belirtmek isteyebilirsiniz.

  3. adlı role-dev-namespace.yaml bir dosya oluşturun ve aşağıdaki YAML bildirimini yapıştırın:

    kind: Role
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: dev-user-full-access
      namespace: dev
    rules:
    - apiGroups: ["", "extensions", "apps"]
      resources: ["*"]
      verbs: ["*"]
    - apiGroups: ["batch"]
      resources:
      - jobs
      - cronjobs
      verbs: ["*"]
    
  4. kubectl apply komutunu kullanarak Rolü oluşturun ve YAML bildiriminizin dosya adını belirtin:

    kubectl apply -f role-dev-namespace.yaml
    
  5. az ad group show komutunu kullanarak appdev grubunun kaynak kimliğini alın. Bu grup, bir sonraki adımda RoleBinding'in konusu olarak ayarlanır.

    az ad group show --group appdev --query objectId -o tsv
    

    Az ad group, olarak groupObjectIdkullanacağınız değeri döndürür.

    38E5FA30-XXXX-4895-9A00-050712E3673A
    
  6. adlı rolebinding-dev-namespace.yaml bir dosya oluşturun ve aşağıdaki YAML bildirimini yapıştırın. Ad alanı erişiminde rolü kullanmak role-dev-namespace üzere appdev grubu için RoleBinding'i kuruyorsunuz. Son satırda öğesini komutu tarafından az ad group show oluşturulan grup nesnesi kimliğiyle değiştiringroupObjectId:

    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: dev-user-access
      namespace: dev
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: Role
      name: dev-user-full-access
    subjects:
    - kind: Group
      namespace: dev
      name: groupObjectId
    

    İpucu

    RoleBinding'i tek bir kullanıcı için oluşturmak istiyorsanız belirtin kind: User ve değerini örnekteki kullanıcı asıl adı (UPN) ile değiştiringroupObjectId.

  7. kubectl apply komutunu kullanarak RoleBinding'i oluşturun ve YAML bildiriminizin dosya adını belirtin:

    kubectl apply -f rolebinding-dev-namespace.yaml
    
    rolebinding.rbac.authorization.k8s.io/dev-user-access created
    

AKS küme kaynağınız için yerleşik Kubernetes RBAC rollerini kullanma

Kubernetes, kullanıcıya yönelik yerleşik roller de sağlar. Bu yerleşik roller şunlardır:

  • Süper kullanıcı rolleri (küme yöneticisi)
  • ClusterRoleBindings kullanılarak küme genelinde verilmesi amaçlanan roller
  • RoleBindings kullanılarak belirli ad alanları içinde verilmesi amaçlanan roller (yönetici, düzenleme, görüntüleme)

Yerleşik Kubernetes RBAC rolleri hakkında daha fazla bilgi edinmek için Kubernetes RBAC kullanıcısına yönelik roller adresini ziyaret edin

Kullanıcıya yönelik roller

Varsayılan ClusterRole Varsayılan ClusterRoleBinding Description
küme yöneticisi system:masters group Süper kullanıcı erişiminin herhangi bir kaynak üzerinde herhangi bir eylem gerçekleştirmesine izin verir. ClusterRoleBinding içinde kullanıldığında, kümedeki ve tüm ad alanlarındaki her kaynak üzerinde tam denetim sağlar. RoleBinding içinde kullanıldığında, rol bağlamasının ad alanı da dahil olmak üzere ad alanı içindeki her kaynak üzerinde tam denetim sağlar.
yönetici Hiçbiri RoleBinding kullanılarak ad alanı içinde verilmesi amaçlanan yönetici erişimine izin verir. RoleBinding içinde kullanılıyorsa, ad alanında rol ve rol bağlamaları oluşturma özelliği de dahil olmak üzere ad alanında kaynakların çoğuna okuma/yazma erişimine izin verir. Bu rol, kaynak kotasına veya ad alanının kendisine yazma erişimine izin vermez. Bu rol, Kubernetes v1.22+ kullanılarak oluşturulan kümelerde Uç Noktalara yazma erişimine de izin vermez. Uç Noktalar için Yazma Erişimi bölümünde daha fazla bilgi bulabilirsiniz.
düzenle Hiçbiri Bir ad alanında ç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 Gizli Dizilere erişmeye ve podları ad alanında herhangi bir ServiceAccount olarak çalıştırmaya izin verir, böylece ad alanında herhangi bir ServiceAccount'ın API erişim düzeylerini elde etmek için kullanılabilir. Bu rol, Kubernetes v1.22+ kullanılarak oluşturulan kümelerde Uç Noktalara yazma erişimine de izin vermez. Uç Noktalar için Yazma Erişimi bölümünde daha fazla bilgi bulabilirsiniz.
görüntüle Hiçbiri Bir ad alanında çoğu nesneyi görmek için salt okunur erişime izin verir. Rollerin veya rol bağlamalarının görüntülenmesine izin vermez. Gizli Dizilerin içeriğinin okunması ad alanında ServiceAccount kimlik bilgilerine erişim sağladığından, bu rol, ad alanında herhangi bir ServiceAccount (ayrıcalık yükseltme biçimi) olarak API erişimine izin vereceğinden Gizli Dizileri görüntülemeye izin vermez.

Azure AD ile yerleşik Kubernetes RBAC rolü kullanma

  1. Yerleşik view Kubernetes RBAC rolünü Azure AD grubunuz için uygulayın:

    kubectl create clusterrolebinding <name of your cluster role binding> --clusterrole=view --group=<Azure AD group object ID>
    
  2. Yerleşik view Kubernetes RBAC rolünü Azure AD kullanıcılarınızın her birine uygulayın:

    kubectl create clusterrolebinding <name of your cluster role binding> --clusterrole=view --user=<Azure AD user object ID>
    

Azure AD kimlikleri kullanarak küme kaynaklarıyla çalışma

AKS kümesinde kaynak oluştururken ve yönetirken beklenen izinleri test edin. Bu örneklerde, kullanıcının atanan ad alanında podları zamanlayıp görüntüleyebilirsiniz. Ardından, atanan ad alanının dışındaki podları zamanlamayı ve görüntülemeyi deneyeceksiniz.

  1. Komutuna giriş olarak geçirdiğiniz kullanıcı hesabını kullanarak $AKSDEV_ID Azure'da az ad group member add oturum açın. AKS kümesine az connectedk8s proxy bir kanal açmak için komutunu çalıştırın:

    az connectedk8s proxy -n <cluster-name> -g <resource-group>
    
  2. Ara sunucu kanalı oluşturulduktan sonra başka bir oturum açın ve geliştirme ad alanındaki kubectl run komutunu kullanarak bir NGINX pod'u zamanlayın:

    kubectl run nginx-dev --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine --namespace dev
    

    NGINX başarıyla zamanlandığında aşağıdaki çıkışı görürsünüz:

    pod/nginx-dev created
    
  3. Şimdi dev ad alanında podları görüntülemek için kubectl get pods komutunu kullanın.

    kubectl get pods --namespace dev
    

    NGINX başarıyla çalıştırıldığında aşağıdaki çıkışı görürsünüz:

    $ kubectl get pods --namespace dev
    
    NAME        READY   STATUS    RESTARTS   AGE
    nginx-dev   1/1     Running   0          4m
    

Atanan ad alanının dışında küme kaynakları oluşturma ve görüntüleme

Geliştirme ad alanının dışındaki podları görüntülemeyi deneme. bayrağıyla --all-namespaceskubectl get pods komutunu kullanın.

kubectl get pods --all-namespaces

Kullanıcının grup üyeliğinde bu eyleme izin veren bir Kubernetes rolü yoktur. İzin olmadan komut bir hata oluşturur.

Error from server (Forbidden): pods is forbidden: User cannot list resource "pods" in API group "" at the cluster scope

Sonraki adımlar

Azure Stack HCI ve Windows Server'da AKS ile güvenlik hakkında daha fazla bilgi edinmek için bkz. Azure Stack HCI ve Windows Server'da AKS'de güvenlik