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 kubectl
SSO'nun etkinleştirilmesi için aşağıdaki adımlarda size yol gösterir:
- API sunucusunun AD hesabını İçerik Oluşturucu ve ardından hesapla ilişkili 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ı İçerik Oluşturucu.
- Kubernetes kümesine AD Kimlik Doğrulaması yüklemek için anahtar 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 ve bunun tersi için bkz. AD grup 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 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 -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ü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.com
biç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ştirincontoso\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:
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
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çimindead-auth-webhook-xxxx
olduğundan emin olun:kubectl get pods -n=kube-system
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 kubectl
eriş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\user
olduğ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:
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin