Aracılığıyla paylaş


Azure Arc tarafından etkinleştirilen AKS'de Kubernetes API sunucusuna güvenli bağlantı için Active Directory çoklu oturum açma özelliğini kullanma

Şunlar için geçerlidir: Azure Stack HCI 22H2 üzerinde AKS, Windows Server'da AKS

Active Directory (AD) çoklu oturum açma (SSO) kimlik bilgilerini kullanarak Arc tarafından etkinleştirilen AKS'de Kubernetes API sunucunuza güvenli bir bağlantı oluşturabilirsiniz.

Arc tarafından etkinleştirilen AKS'de AD'ye genel bakış

Active Directory kimlik doğrulaması olmadan, komutuyla kubectl API sunucusuna bağlanırken sertifika tabanlı bir kubeconfig dosyasına güvenmeniz gerekir. kubeconfig dosyası, dikkatli bir şekilde dağıtılması gereken özel anahtarlar ve sertifikalar gibi gizli diziler içerir ve bu önemli bir güvenlik riski oluşturabilir.

Sertifika tabanlı kubeconfig kullanmaya alternatif olarak, API sunucusuna bağlanmak için güvenli bir yol olarak AD SSO kimlik bilgilerini kullanabilirsiniz. AKS Arc ile AD tümleştirmesi, Windows etki alanına katılmış bir makinedeki kullanıcıların SSO kimlik bilgilerini kullanarak API sunucusuna kubectl bağlanmasına olanak tanır. Bu, özel anahtarlar içeren sertifika tabanlı kubeconfig dosyalarını yönetme ve dağıtma gereksinimini ortadan kaldırır.

AD tümleştirmesi, sertifika tabanlı kubeconfig dosyalarından ayrı olan ve gizli dizi içermeyen AD kubeconfig kullanır. Ancak, Active Directory kimlik bilgilerini kullanarak bağlanmayla ilgili sorunlar varsa sertifika tabanlı kubeconfig dosyası, sorun giderme gibi yedekleme amacıyla kullanılabilir.

AD tümleştirmesinin bir diğer güvenlik avantajı, kullanıcıların ve grupların güvenlik tanımlayıcıları (SID) olarak depolanmasıdır. Grup adlarından farklı olarak, SID'ler sabit ve benzersizdir ve bu nedenle adlandırma çakışması sunmaz.

Not

AD SSO bağlantısı yalnızca iş yükü kümeleri için desteklenir.

Not

İç içe AD gruplarının (başka bir AD grubunda ad grubu oluşturma) kullanımı desteklenmez.

Bu makale, kimlik sağlayıcısı olarak Active Directory'yi ayarlama ve aracılığıyla kubectlSSO'nun etkinleştirilmesi adımlarında size yol gösterir:

  • API sunucusu için AD hesabını oluşturun ve ardından hesapla ilişkilendirilmiş anahtar sekmesi dosyasını oluşturun. Ad hesabını oluşturmak ve anahtar sekmesi dosyasını oluşturmak için bkz . Anahtar sekmesi dosyasını kullanarak AD Kimlik Doğrulaması oluşturma.
  • Kubernetes kümesine AD Kimlik Doğrulaması yüklemek için tuş sekmesi dosyasını kullanın. Bu adımın bir parçası olarak, varsayılan rol tabanlı erişim denetimi (RBAC) yapılandırması otomatik olarak oluşturulur.
  • RBAC yapılandırmalarını oluştururken veya düzenlerken grup adlarını SID'lere dönüştürün. Yönergeler için bkz . AD grubu rol bağlamasını oluşturma ve güncelleştirme.

Başlamadan önce

Active Directory SSO kimlik bilgilerini yapılandırma işlemine başlamadan önce aşağıdaki öğelerin kullanılabilir olduğundan emin olmanız gerekir:

  • En son Aks-Hci PowerShell modülü yüklenir. Yüklemeniz gerekiyorsa bkz . AksHci PowerShell modülünü indirme ve yükleme.

  • AKS konağı yüklenir ve yapılandırılır. Konağı yüklemeniz gerekiyorsa, dağıtımınızı yapılandırmak için adımları izleyin.

  • Tuş sekmesi dosyası kullanılabilir. Kullanılamıyorsa, API sunucusu AD hesabını ve anahtar sekmesi dosyasını oluşturmak için adımları izleyin.

    Not

    Belirli bir hizmet asıl adı (SPN) için anahtar sekmesi dosyası oluşturmanız ve bu SPN'nin iş yükü kümesi için API sunucusu AD hesabına karşılık olması gerekir. Ad kimlik doğrulama işlemi boyunca aynı SPN'nin kullanıldığından da emin olmanız gerekir. Anahtar sekmesi dosyası current.keytab olarak adlandırılmalıdır.

  • Her AKS iş yükü kümesi için bir API sunucusu AD hesabı kullanılabilir.

  • İstemci makinesi, Windows etki alanına katılmış bir makine olmalıdır.

Anahtar sekmesi dosyasını kullanarak AD Kimlik Doğrulaması oluşturma

1. Adım: İş yükü kümesini oluşturma ve AD kimlik doğrulamasını etkinleştirme

AD kimlik doğrulamasını yüklemeden önce bir AKS iş yükü kümesi oluşturmanız ve kümede AD kimlik doğrulaması eklentisini etkinleştirmeniz gerekir. Yeni kümeyi oluştururken AD kimlik doğrulamasını etkinleştirmezseniz, daha sonra etkinleştiremezsiniz.

PowerShell'i yönetici olarak açın ve komutunun parametresini -enableADAuth New-AksHciCluster kullanarak aşağıdakileri çalıştırın:

New-AksHciCluster -name mynewcluster1 -enableADAuth

Her iş yükü kümesi için bir API sunucusu AD hesabı olduğundan emin olun.

İş yükü kümesini oluşturma hakkında bilgi için bkz . Windows PowerShell kullanarak Kubernetes kümeleri oluşturma.

2. Adım: AD kimlik doğrulamayı yükleme

AD kimlik doğrulamasını yükleyebilmeniz için önce iş yükü kümesinin yüklenmesi ve kümede AD kimlik doğrulamasının etkinleştirilmesi gerekir. AD kimlik doğrulamasını yüklemek için aşağıdaki seçeneklerden birini kullanın.

Seçenek 1

Etki alanına katılmış bir Azure Stack HCI veya Windows Server kümesi için PowerShell'i yönetici olarak açın ve aşağıdaki komutu çalıştırın:

Install-AksHciAdAuth -name mynewcluster1 -keytab .\current.keytab -SPN k8s/apiserver@CONTOSO.COM -adminUser contoso\bob

Not

için SPN k8s/apiserver@CONTOSO.combiçimini SPN k8s/apiserver@<realm name>kullanın. İlk denemede büyük harflerle belirtin <realm name> . Ancak, büyük harflerle ilgili sorunlarınız varsa SPN'yi küçük harflerle oluşturun. Kerberos büyük/küçük harfe duyarlıdır.

Seçenek 2

Küme konağı etki alanına katılmamışsa, aşağıdaki örnekte gösterildiği gibi yönetici kullanıcı adını veya grup adını SID biçiminde kullanın.

Yönetici kullanıcı:

Install-AksHciAdAuth -name mynewcluster1 -keytab .\current.keytab -SPN k8s/apiserver@CONTOSO.COM -adminUserSID <User SID>

Yönetici grubu:

Install-AksHciAdAuth -name mynewcluster1 -keytab .\current.keytab -SPN k8s/apiserver@CONTOSO.COM -adminGroupSID <Group SID>

Kullanıcı hesabının SID'sini bulmak için bkz . Kullanıcı veya grup güvenlik tanımlayıcısını belirleme.

Sonraki adımlara geçmeden önce aşağıdaki öğeleri not edin:

  • Anahtar sekmesi dosyasının current.keytab olarak adlandırdığından emin olun.
  • Ortamınıza karşılık gelen SPN'yi değiştirin.
  • parametresi, -adminGroup küme yöneticisi ayrıcalıklarıyla belirtilen AD grubu için karşılık gelen bir rol bağlaması oluşturur. (Yukarıdaki Seçenek 1'de gösterildiği gibi) ortamınıza karşılık gelen AD grubu veya kullanıcıyla değiştirin contoso\bob .

3. Adım: AD web kancası ve tuş sekmesi dosyasını test edin

AD web kancasının API sunucusunda çalıştığından ve anahtar sekmesi dosyasının Kubernetes gizli dizisi olarak depolandığından emin olun. İş yükü kümesinin sertifika tabanlı kubeconfig dosyasını almak için şu adımları izleyin:

  1. Aşağıdaki komutu kullanarak sertifika tabanlı bir kubeconfig dosyası alın. Kümeye yerel konak olarak bağlanmak için kubeconfig dosyasını kullanın:

    Get-AksHciCredential -name mynewcluster1
    
  2. Bağlandığınız sunucuda (daha önce oluşturduğunuz sertifika tabanlı kubeconfig dosyasını kullanarak) çalıştırın kubectl ve ad web kancası dağıtımını denetledikten sonra biçiminde ad-auth-webhook-xxxxolduğundan emin olun:

    kubectl get pods -n=kube-system
    
  3. Anahtar sekmesi dosyasının gizli dizi olarak dağıtılıp dağıtılmadığını ve Kubernetes gizli dizisi olarak listelenip listelenmediğini denetlemek için komutunu çalıştırın kubectl :

    kubectl get secrets -n=kube-system
    

4. Adım: AD kubeconfig dosyasını oluşturma

AD web kancası ve anahtar sekmesi başarıyla dağıtıldıktan sonra AD kubeconfig dosyasını oluşturun. Dosya oluşturulduktan sonra AD kubeconfig dosyasını istemci makinesine kopyalayın ve API sunucusunda kimlik doğrulaması yapmak için kullanın. Sertifika tabanlı kubeconfig dosyasından farklı olarak AD kubeconfig gizli dizi değildir ve düz metin olarak kopyalanabilir.

PowerShell'i yönetici olarak açın ve aşağıdaki komutu çalıştırın:

Get-AksHciCredential -name mynewcluster1 -configPath .\AdKubeconfig -adAuth

5. Adım: kubeconfig ve diğer dosyaları istemci makinesine kopyalama

AKS iş yükü kümesinden istemci makinenize aşağıdaki üç dosyayı kopyalamanız gerekir:

  • Önceki adımda oluşturulan AD kubeconfig dosyasını $env:USERPROFILE.kube\config dosyasına kopyalayın.

  • c:\adsso klasör yolunu oluşturun ve AKS iş yükü kümesindeki aşağıdaki dosyaları istemci makinenize kopyalayın:

    • $env:ProgramFiles\AksHci altından c:\adsso'ya Kubectl.exe.
    • $env:ProgramFiles\AksHci - c:\adsso altında Kubectl-adsso.exe.

    Not

    cmdlet'ini çalıştırdığınızda Get-AksHciCredential sunucuda adsso.exe dosyası oluşturulur.

6. Adım: İstemci makinesinden API sunucusuna bağlanma

Önceki adımları tamamladıktan sonra, Windows etki alanına katılmış istemci makinenizde oturum açmak için SSO kimlik bilgilerinizi kullanın. PowerShell'i açın ve kullanarak API sunucusuna kubectlerişmeyi deneyin. İşlem başarıyla tamamlanırsa, AD SSO'nun doğru şekilde ayarlanmasını sağlarsınız.

AD grubu rol bağlamasını oluşturma ve güncelleştirme

2. Adımda belirtildiği gibi, kullanıcı ve/veya yükleme sırasında sağlanan grup için küme yöneticisi ayrıcalıklarına sahip varsayılan rol bağlaması oluşturulur. Kubernetes'teki rol bağlama, AD grupları için erişim ilkelerini tanımlar. Bu adım, Kubernetes'te yeni AD grubu rol bağlamaları oluşturmak ve mevcut rol bağlamalarını düzenlemek için RBAC'nin nasıl kullanılacağını açıklar. Örneğin, küme yöneticisi AD gruplarını kullanarak kullanıcılara ek ayrıcalıklar vermek isteyebilir (bu da işlemi daha verimli hale getirir). RBAC hakkında daha fazla bilgi için bkz . RBAC yetkilendirmesini kullanma.

Diğer AD grubu RBAC girdilerini oluşturduğunuzda veya düzenlediğinizde, konu adında microsoft:activedirectory:CONTOSO\group name ön eki olmalıdır. Adların bir etki alanı adı ve çift tırnak içine alınmış bir ön ek içermesi gerektiğini unutmayın.

Burada iki örnek verilmiştir:

Örnek 1

apiVersion: rbac.authorization.k8s.io/v1 
kind: ClusterRoleBinding 
metadata: 
  name: ad-user-cluster-admin 
roleRef: 
  apiGroup: rbac.authorization.k8s.io 
  kind: ClusterRole 
  name: cluster-admin 
subjects: 
- apiGroup: rbac.authorization.k8s.io 
  kind: User 
  name: "microsoft:activedirectory:CONTOSO\Bob" 

Örnek 2

Aşağıdaki örnekte ad alanı için AD grubuyla özel rol ve rol bağlamasının nasıl oluşturulacağı gösterilmektedir. Örnekte Contoso SREGroup Active Directory'de önceden var olan bir grup yer alır. Ad grubuna eklenen kullanıcılara hemen ayrıcalıklar verilir.

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: sre-user-full-access
  namespace: sre
rules:
- apiGroups: ["", "extensions", "apps"]
  resources: ["*"]
  verbs: ["*"]
- apiGroups: ["batch"]
  resources:
  - jobs
  - cronjobs
  verbs: ["*"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: ad-user-cluster-admin
  namespace: sre
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: sre-user-full-access
subjects:
  - apiGroup: rbac.authorization.k8s.io
    kind: Group
    name: "microsoft:activedirectory:CONTOSO\SREGroup" 

YAML dosyasını uygulamadan önce, grup ve kullanıcı adları her zaman komutu kullanılarak SID'lere dönüştürülmelidir:

kubectl-adsso nametosid <rbac.yml>

Benzer şekilde, var olan bir RBAC'yi güncelleştirmek için, değişiklik yapmadan önce SID'yi kullanıcı dostu bir grup adına dönüştürebilirsiniz. SID'yi dönüştürmek için komutunu kullanın:

kubectl-adsso sidtoname <rbac.yml>

API sunucusu hesabıyla ilişkili AD hesabı parolasını değiştirme

API sunucusu hesabı için parola değiştirildiğinde, AD kimlik doğrulaması eklentisini kaldırmanız ve güncelleştirilmiş geçerli ve önceki tuş sekmelerini kullanarak yeniden yüklemeniz gerekir.

Parolayı her değiştirdiğinizde, geçerli tuş sekmesini (current.keytab) previous.keytab olarak yeniden adlandırmanız gerekir. Ardından yeni parolayı current.keytab olarak adlandırdığınızdan emin olun.

Önemli

Dosyalar sırasıyla current.keytab ve previous.keytab olarak adlandırılmalıdır. Mevcut rol bağlamaları bu değişiklikten etkilenmez.

AD kimlik doğrulamayı kaldırma ve yeniden yükleme

API sunucusunun hesabı değiştirildiğinde, parola güncelleştirildiğinde veya bir hatayı gidermek için AD SSO'sunu yeniden yüklemek isteyebilirsiniz.

AD kimlik doğrulamasını kaldırmak için PowerShell'i yönetici olarak açın ve aşağıdaki komutu çalıştırın:

Uninstall-AksHciAdAuth -name mynewcluster1

AD kimlik doğrulamasını yeniden yüklemek için PowerShell'i yönetici olarak açın ve aşağıdaki komutu çalıştırın:

Install-AksHciAdAuth -name mynewcluster1 -keytab <.\current.keytab> -previousKeytab <.\previous.keytab> -SPN <service/principal@CONTOSO.COM> -adminUser CONTOSO\Bob

Not

İstemcilerin önbelleğe alınmış biletleri varsa kapalı kalma süresini önlemek için, -previousKeytab parametre yalnızca parolayı değiştirdiğinizde gereklidir.

API sunucusu AD hesabını ve anahtar sekmesi dosyasını oluşturma

AD hesabı ve anahtar sekmesi dosyası oluşturmada iki adım vardır. İlk olarak, API sunucusu için hizmet asıl adı (SPN) ile yeni bir AD hesabı/kullanıcısı oluşturun ve ikinci olarak AD hesabı için bir anahtar sekmesi dosyası oluşturun.

1. Adım: API sunucusu için yeni bir AD hesabı veya kullanıcı oluşturma

SPN ile yeni bir AD hesabı/kullanıcısı oluşturmak için New-ADUser PowerShell komutunu kullanın. Bir örnek aşağıda verilmiştir:

New-ADUser -Name apiserver -ServicePrincipalNames k8s/apiserver -AccountPassword (ConvertTo-SecureString "password" -AsPlainText -Force) -KerberosEncryptionType AES128 -Enabled 1

2. Adım: AD hesabı için anahtar sekmesi dosyasını oluşturma

Tuş sekmesi dosyasını oluşturmak için ktpass Windows komutunu kullanın.

Aşağıda ktpass kullanan bir örnek verilmişti:

ktpass /out current.keytab /princ k8s/apiserver@CONTOSO.COM /mapuser contoso\apiserver_acct /crypto all /pass p@$$w0rd /ptype KRB5_NT_PRINCIPAL

Not

Ad girişinde DsCrackNames'in 0x2 döndürdüğünü görürseniz parametresinin /mapuser biçiminde mapuser DOMAIN\userolduğundan emin olun; burada ETKİ ALANI, yankının %userdomain%çıktısıdır.

Kullanıcı veya grup güvenlik tanımlayıcısını belirleme

Hesabınızın veya diğer hesapların SID'sini bulmak için aşağıdaki iki seçenekte birini kullanın:

  • Hesabınızla ilişkilendirilmiş SID'yi bulmak için giriş dizininizin komut isteminden aşağıdaki komutu yazın:

    whoami /user
    
  • Başka bir hesapla ilişkili SID'yi bulmak için PowerShell'i yönetici olarak açın ve aşağıdaki komutu çalıştırın:

    (New-Object System.Security.Principal.NTAccount(<CONTOSO\Bob>)).Translate([System.Security.Principal.SecurityIdentifier]).value
    

Sertifika sorunlarını giderme

Web kancası ve API sunucusu, TLS bağlantısını karşılıklı olarak doğrulamak için sertifikaları kullanır. Bu sertifikanın süresi 500 gün içinde dolar. Sertifikanın süresinin dolduğunu doğrulamak için kapsayıcıdaki ad-auth-webhook günlükleri görüntüleyin:

kubectl logs ad-auth-webhook-xxx

Sertifika doğrulama hataları görürseniz, web kancasını kaldırıp yeniden yüklemek ve yeni sertifikalar almak için adımları tamamlayın.

En iyi yöntemler ve temizleme

  • Her küme için benzersiz bir hesap kullanın.
  • API sunucusu hesabının parolasını kümeler arasında yeniden kullanma.
  • Kümeyi oluşturur oluşturmaz anahtar sekmesi dosyasının yerel kopyasını silin ve SSO kimlik bilgilerinin çalıştığını doğrulayın.
  • API sunucusu için oluşturulan Active Directory kullanıcısını silin. Daha fazla bilgi için bkz . Remove-ADUser.

Sonraki adımlar

Bu nasıl yapılır kılavuzunda, SSO kimlik bilgileriyle API sunucusuna güvenli bir şekilde bağlanmak için AD Kimlik Doğrulamasını yapılandırmayı öğrendiniz. Ardından şunları yapabilirsiniz: