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, kullanıcıların komutuyla API sunucusuna bağlanırken sertifika tabanlı kubeconfig dosyasına güvenmesi kubectl gerekir. kubeconfig dosyası, özel anahtarlar ve dikkatli bir şekilde dağıtılması gereken 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ını sağlar. 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

Şu anda AD SSO bağlantısı yalnızca iş yükü kümeleri için desteklenmektedir.

Bu makale, Active Directory'yi kimlik sağlayıcısı olarak ayarlamak ve aracılığıyla kubectlSSO'nun etkinleştirilmesi için aşağıdaki adımlarda size yol gösterir:

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 olmalısınız:

  • 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ırma adımlarını izleyin.

  • Anahtar sekmesi dosyası kullanılabilir. Kullanılamıyorsa API sunucusu AD hesabını ve anahtar sekmesi dosyasını oluşturma adımlarını izleyin.

    Not

    Belirli bir hizmet asıl adı (SPN) için anahtar sekmesi dosyasını 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ı İçerik Oluşturucu

1. Adım: İş yükü kümesini İçerik Oluşturucu 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 -enableADAuthNew-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ümelerini İçerik Oluşturucu.

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.

1\. Seçenek

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.

2\. Seçenek

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ı kullanıyorsanız:

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

Yönetici grubu kullanıyorsanız:

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

Kullanıcı hesabının SID değerini 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ını ve anahtar 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ı İçerik Oluşturucu

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 konumuna kopyalayın.

  • c:\adsso klasör yolunu İçerik Oluşturucu 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 altından c:\adsso'ya 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'yu doğru ayarlamış olursunuz.

AD grubu rol bağlamasını İçerik Oluşturucu ve güncelleştirin

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ı microsoft:activedirectory:CONTOSO\group name ön ekini içermelidir. Adların bir etki alanı adı ve çift tırnak içine alınmış bir ön ek içermesi gerektiğini unutmayın.

Aşağıda 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, SREGroup Contoso Active Directory'de önceden var olan bir grup vardır. Kullanıcılar AD grubuna eklendiğinde, bu kullanıcılara hemen ayrıcalık 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, mevcut 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 sunucu hesabıyla ilişkili AD hesabı parolasını değiştirme

API sunucusu hesabı için parola değiştirildiğinde, AD kimlik doğrulama 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 sunucusu 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ı İçerik Oluşturucu

AD hesabı ve anahtar sekmesi dosyası oluşturmada iki adım vardır. İlk olarak, HIZMET asıl adı (SPN) ile API sunucusu için 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ı İçerik Oluşturucu

NEW-ADUser PowerShell komutunu kullanarak SPN ile yeni bir AD hesabı/kullanıcısı oluşturun. Aşağıda bir örnek verilmiştir:

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

2. Adım: AD hesabının anahtar sekmesi dosyasını İçerik Oluşturucu

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

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

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

Not

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

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şkili 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ükleme ve yeni sertifikalar alma adımlarını 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 kullanmayın.
  • Kümeyi oluşturur oluşturmaz keytab 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: