Aracılığıyla paylaş


Windows Server için Microsoft Entra Id ve Kubernetes RBAC kullanarak erişimi denetleme

Şunlar için geçerlidir: Azure Yerel 22H2'de AKS, Windows Server'da AKS

Azure Kubernetes Service (AKS), kullanıcı kimlik doğrulaması için Microsoft Entra Id kullanacak şekilde yapılandırılabilir. Bu yapılandırmada, Microsoft Entra kimlik doğrulama belirtecini kullanarak kubernetes kümesinde oturum açarsınız. Kimlik doğrulamasından 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, AKS Arc'ta Microsoft Entra grup üyeliğini temel alan bir Kubernetes kümesinde Kubernetes RBAC kullanarak erişimin nasıl denetlendiği açıklanır. Microsoft Entra Id'de bir tanıtım grubu ve kullanıcılar oluşturursunuz. Ardından, kaynakları oluşturmak ve görüntülemek için uygun izinleri vermek için kümede roller ve rol bağlamaları oluşturursunuz.

Önkoşullar

Microsoft Entra Id kullanarak Kubernetes RBAC'yi ayarlamadan önce aşağıdaki önkoşullara ihtiyacınız vardır:

  • AKS Arc'ta oluşturulan bir Kubernetes kümesi. Kümenizi ayarlamanız gerekiyorsa AKS dağıtmak için Windows Admin Center veya PowerShell kullanma yönergelerine bakın.
  • Azure Arc bağlantısı. Kubernetes kümenize bir Azure Arc bağlantınız olmalıdır. Azure Arc'ı etkinleştirme hakkında bilgi için bkz . Azure Yerel kümesinde Azure Kubernetes Hizmetini Azure Arc özellikli Kubernetes'e bağlama.
  • Aşağıdaki komut satırı araçlarına erişmeniz gerekir:
    • Azure CLI ve connectedk8s uzantısı. Azure CLI, Azure kaynaklarını oluşturmak ve yönetmek için kullanılan bir komut kümesidir. Azure CLI'nız olup olmadığını denetlemek için bir komut satırı aracı açın ve şunu yazın: az -v. Ayrıca, Kubernetes kümenize bir kanal açmak için connectedk8s uzantısını yükleyin. Yükleme yönergeleri için bkz . Azure CLI'yı yükleme.
    • Kubectl. Bu Kubernetes komut satırı aracı, Kubernetes kümelerinizi hedefleyen komutları çalıştırmanıza olanak tanır. kubectl yükleyip yüklemediğinizden denetlemek için bir komut istemi açın ve şunu yazın: kubectl version --client. Kubectl istemci sürümünüzün en az v1.24.0 sürümü olduğundan emin olun. Yükleme yönergeleri için bkz . kubectl.
    • PowerShell ve AksHci PowerShell modülü. PowerShell, komut satırı kabuğu, betik dili ve yapılandırma yönetimi çerçevesinden oluşan platformlar arası bir görev otomasyonu çözümüdür. AKS Arc'ı yüklediyseniz AksHci PowerShell modülüne erişebilirsiniz.
    • 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. Bu arada, aracıların ve ekleme işlemini gerçekleştiren makinenin Azure Arc özellikli Kubernetes ağ gereksinimlerindeki ağ gereksinimlerini karşılayıp karşılamadığını doğrulamanız gerekir.

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

Üye içeren bir Microsoft Entra grubunuz yoksa, bu makaledeki yönergeleri izleyebilmek için bir grup oluşturup bazı üyeler eklemek isteyebilirsiniz.

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

Microsoft Entra Id'de tanıtım grubu oluşturma

İlk olarak, komutunu kullanarak az ad group create uygulama geliştiricileri için kiracınızda Microsoft Entra Id'de grubu oluşturun. Aşağıdaki örnek, Azure kiracınızda oturum açmanızı ister ve ardından appdev adlı bir grup oluşturur:

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

Grubunuza kullanıcı ekleme

Uygulama geliştiricileri için Microsoft Entra Id'de oluşturulan örnek grupla, gruba bir kullanıcı appdev ekleyin. AKS kümesinde oturum açmak ve Kubernetes RBAC tümleştirmesini test etmek için bu kullanıcı hesabını kullanırsınız.

komutunu kullanarak önceki bölümde oluşturulan appdevaz ad group member addekleyin. Oturumunuzdan çıkarsanız kullanarak az loginAzure'a yeniden bağlanabilirsiniz.

$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

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

AKS kümesini, Microsoft Entra grubunuzun kümeye erişmesine izin verecek şekilde yapılandırın. Grup ve kullanıcı eklemek istiyorsanız bkz . Microsoft Entra Id'de tanıtım grupları oluşturma.

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

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

    kubectl create namespace dev
    

    Kubernetes'te Roller, verilmesi gereken izinleri tanımlar ve RoleBindings 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. role-dev-namespace.yaml adlı bir dosya oluşturun ve aşağıdaki YAML bildirimini kopyalayıp 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. komutunu kullanarak kubectl apply rolü oluşturun ve YAML bildiriminizin dosya adını belirtin:

    kubectl apply -f role-dev-namespace.yaml
    
  5. komutunu kullanarak appdevaz ad group showalın. Bu grup, bir sonraki adımda RoleBinding'in konusu olarak ayarlanır:

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

    komutu az ad group show , olarak groupObjectIdkullandığınız değeri döndürür:

    38E5FA30-XXXX-4895-9A00-050712E3673A
    
  6. rolebinding-dev-namespace.yaml adlı bir dosya oluşturun ve aşağıdaki YAML bildirimini kopyalayın/yapıştırın. Appdev grubunun ad alanı erişimi için rolü kullanmasını sağlayan rol bağlamasını role-dev-namespace oluşturursunuz. Son satırda öğesini komutu tarafından groupObjectId oluşturulan grup nesnesi kimliğiyle değiştirinaz ad group show:

    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

    Tek bir kullanıcı için RoleBinding oluşturmak groupObjectId

  7. kubectl apply 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 ayrıca 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 için bkz . Kubernetes RBAC kullanıcıya yönelik roller.

Kullanıcıya yönelik roller

Varsayılan ClusterRole Varsayılan ClusterRoleBinding Açıklama
küme yöneticisi system:masters grubu Herhangi bir kaynak üzerinde herhangi bir eylem gerçekleştirmek için süper kullanıcı erişimine izin verir. Bir ClusterRoleBinding içinde kullanıldığında, bu rol kümedeki ve tüm ad alanları içindeki her kaynak üzerinde tam denetim sağlar. RoleBinding içinde kullanıldığında, rol bağlamasının ad alanında ad alanının kendisi de dahil olmak üzere tüm kaynaklar üzerinde tam denetim sağlar.
yönetici Hiçbiri Rol bağlaması kullanılarak ad alanı içinde verilmesi amaçlanan yönetici erişimine izin verir. Rol bağlamasında kullanılırsa, ad alanında rol ve rol bağlamaları oluşturma özelliği de dahil olmak üzere ad alanı içindeki 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ümelerdeki uç noktalara yazma erişimine de izin vermez. Daha fazla bilgi için bkz . Uç Noktalar için Yazma Erişimi.
Düzenle… Hiçbiri 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 gizli dizilere erişmeye ve podları ad alanında herhangi bir ServiceAccount olarak çalıştırmaya olanak tanır, bu nedenle ad alanında herhangi bir ServiceAccount'ın API erişim düzeylerini kazanmak için kullanılabilir. Bu rol, Kubernetes v1.22+ kullanılarak oluşturulan kümelerdeki uç noktalara yazma erişimine de izin vermez. Daha fazla bilgi için bkz . Uç Noktalar için Yazma Erişimi.
görünüm Hiçbiri 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 gizli dizileri görüntülemeye izin vermez ve bu da ad alanında herhangi bir ServiceAccount olarak API erişimine izin verir (ayrıcalık yükseltme biçimi).

Microsoft Entra Id ile yerleşik kubernetes RBAC rolü kullanma

Microsoft Entra Id ile yerleşik bir Kubernetes RBAC rolü kullanmak için şu adımları izleyin:

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

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

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

Microsoft Entra Kimliklerini kullanarak küme kaynaklarıyla çalışma

Şimdi bir Kubernetes kümesinde kaynak oluşturup yönetirken beklenen izinleri test edin. Bu örneklerde, kullanıcının atanan ad alanında podları zamanlar ve görüntülersiniz. Ardından, atanan ad alanının dışındaki podları zamanlamayı ve görüntülemeyi denersiniz.

  1. Komutuna $AKSDEV_ID giriş olarak belirttiğiniz kullanıcı hesabını kullanarak Azure'da az ad group member add oturum açın. Kümeye 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 komutunu kullanarak bir NGINX pod'unu kubectl runzamanlayı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örmeniz gerekir:

    pod/nginx-dev created
    
  3. Şimdi komutunu kullanarak kubectl get pods ad alanında dev podları görüntüleyin:

    kubectl get pods --namespace dev
    

    NGINX başarıyla çalıştırıldığında aşağıdaki çıkışı görmeniz gerekir:

    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ülemeye çalışmak için komutunu bayrağıyla kubectl get pods birlikte kullanın--all-namespaces:

kubectl get pods --all-namespaces

Kullanıcının grup üyeliği, bu eyleme izin veren bir Kubernetes rolüne sahip değildir. İ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