Aracılığıyla paylaş


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

Şunlar için geçerlidir: Azure Stack HCI 22H2 üzerinde 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ı yaptıktan 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 Stack HCI kümesinde Azure Kubernetes Service'i 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ızı sağlar. 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ğundan, betik dilinden ve yapılandırma yönetim ç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.

İ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 amacıyla, Kubernetes RBAC ve Microsoft Entra ID'nin küme kaynaklarına erişimi nasıl denetlediğini göstermek için kullanılabilecek bir 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 uygulamayı geliştirenler için kiracınızdaki 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 appdev grubuna az ad group member add bir kullanıcı ekleyin. 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 kubectl create namespace Kubernetes kümesinde bir ad alanı 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 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ına 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 az ad group showappdev 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
    

    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ıp 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 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

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

  7. komutunu kullanarak RoleBinding'ikubectl 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 Description
cluster-admin 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ındaki her kaynak üzerinde tam denetim sağlar. RoleBinding içinde kullanıldığında, rol bağlamasının ad alanı dahil olmak üzere ad alanı içindeki her kaynak ü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ıyorsa, 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ına 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, ad alanında herhangi bir ServiceAccount olarak gizli dizilere erişmeye ve pod çalıştırmaya izin verir, 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üntüle Hiçbiri 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. Bu rol gizli dizilerin görüntülenmesine izin vermez, çünkü gizli dizilerin içeriğini okumak ad alanında ServiceAccount kimlik bilgilerine erişim sağlar ve bu da ad alanında herhangi bir ServiceAccount (ayrıcalık yükseltme biçimi) olarak API erişimine izin verir.

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. Proxy kanalı oluşturulduktan sonra başka bir oturum açın ve geliştirme ad alanındaki komutunu kullanarak kubectl run bir NGINX pod 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ö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 bayrağıyla kubectl get pods komutunu --all-namespaces 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