Gunakan akses menyeluruh Active Directory untuk koneksi aman ke server API Kubernetes di AKS yang diaktifkan oleh Azure Arc

Berlaku untuk: AKS di Azure Stack HCI 22H2, AKS di Windows Server

Anda dapat membuat koneksi aman ke server API Kubernetes di AKS yang diaktifkan oleh Arc menggunakan kredensial akses menyeluruh (SSO) Active Directory (AD).

Gambaran umum AD dalam hibrid AKS

Tanpa autentikasi Active Directory, pengguna harus bergantung pada file kubeconfig berbasis sertifikat saat menghubungkan ke server API melalui kubectl perintah. File kubeconfig berisi rahasia seperti kunci privat dan sertifikat yang perlu didistribusikan dengan hati-hati, yang dapat menjadi risiko keamanan yang signifikan.

Sebagai alternatif untuk menggunakan kubeconfig berbasis sertifikat, Anda dapat menggunakan kredensial AD SSO sebagai cara yang aman untuk terhubung ke api server. Integrasi AD dengan AKS Arc memungkinkan pengguna pada komputer yang bergabung dengan domain Windows terhubung ke server API melalui kubectl menggunakan kredensial SSO mereka. Ini menghilangkan kebutuhan untuk mengelola dan mendistribusikan file kubeconfig berbasis sertifikat yang berisi kunci privat.

Integrasi AD menggunakan kubeconfig AD, yang berbeda dari file kubeconfig berbasis sertifikat dan tidak mengandung rahasia apapun. Namun, file kubeconfig berbasis sertifikat dapat digunakan untuk tujuan pencadangan, seperti pemecahan masalah, jika ada masalah dengan penyambungan menggunakan mandat Active Directory.

Manfaat keamanan lain dengan integrasi AD adalah bahwa pengguna dan grup disimpan sebagai ID keamanan (SID). Tidak seperti nama kelompok, SID tidak berubah dan unik dan karena itu tidak menyajikan konflik penamaan.

Catatan

Saat ini, konektivitas AD SSO hanya didukung untuk kluster beban kerja.

Artikel ini memandu Anda melalui langkah-langkah berikut untuk menyiapkan Direktori Aktif sebagai Penyedia Identitas dan untuk mengaktifkan SSO melalui kubectl:

  • Buat akun AD untuk server API, lalu buat file keytab yang terkait dengan akun. Lihat Membuat AD Auth menggunakan file keytab guna membuat akun AD dan menghasilkan file keytab.
  • Gunakan file keytab untuk memasang AD Auth di kluster Kubernetes. Sebagai bagian dari langkah ini, konfigurasi kontrol akses berbasis peran default (RBAC) secara otomatis dibuat.
  • Mengonversi nama grup ke ID dan sebaliknya saat membuat atau mengedit konfigurasi RBAC, lihat membuat dan memperbarui pengikatan peran grup AD untuk instruksi.

Sebelum Anda mulai

Sebelum memulai proses mengonfigurasi mandat Active Directory SSO, Anda harus memastikan bahwa Anda memiliki item berikut yang tersedia:

  • Modul Aks-Hci PowerShell terbaru dipasang. Jika Anda perlu memasangnya, lihat mengunduh dan memasang modul AksHci PowerShell.

  • Host AKS dipasang dan dikonfigurasi. Jika Anda perlu memasang host, ikuti langkah-langkah untuk mengonfigurasi penyebaran Anda.

  • File keytab siap digunakan. Jika tidak tersedia, ikuti langkah-langkah untuk membuat akun AD server API dan file keytab.

    Catatan

    Anda harus membuat file keytab untuk nama pokok layanan tertentu (SPN), dan SPN ini harus sesuai dengan akun AD server API untuk kluster beban kerja. Anda juga harus memastikan bahwa SPN yang sama digunakan selama proses autentikasi AD. File keytab harus diberi nama current.keytab.

  • Satu akun AD server API tersedia untuk setiap kluster beban kerja AKS.

  • Mesin klien harus mesin yang bergabung dengan domain Windows.

Membuat AD Auth menggunakan file keytab

Langkah 1: Buat kluster beban kerja dan aktifkan autentikasi AD

Sebelum menginstal autentikasi AD, Anda harus terlebih dahulu membuat kluster beban kerja AKS dan mengaktifkan add-on autentikasi AD pada kluster. Jika Anda tidak mengaktifkan autentikasi AD saat membuat kluster baru, Anda tidak dapat mengaktifkannya nanti.

Buka PowerShell sebagai administrator dan jalankan yang berikut ini menggunakan -enableADAuth parameter New-AksHciCluster perintah :

New-AksHciCluster -name mynewcluster1 -enableADAuth

Untuk setiap kluster beban kerja, pastikan ada satu akun AD server API yang tersedia.

Untuk informasi tentang membuat kluster beban kerja, lihat Membuat kluster Kubernetes menggunakan Windows PowerShell.

Langkah 2: pasang autentikasi Iklan

Sebelum Anda dapat memasang autentikasi AD, kluster beban kerja harus dipasang dan otentikasi AD diaktifkan pada kluster. Untuk memasang autentikasi AD, gunakan salah satu opsi berikut.

Opsi 1

Untuk kluster Azure Stack HCI atau Windows Server yang bergabung dengan domain, buka PowerShell sebagai administrator dan jalankan perintah berikut:

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

Catatan

Untuk SPN k8s/apiserver@CONTOSO.com, gunakan format SPN k8s/apiserver@<realm name>. Pada upaya pertama, tentukan <realm name> dalam huruf besar. Namun, jika Anda memiliki masalah dengan huruf besar, buat SPN dengan huruf kecil. Kerberos sensitif terhadap kasus ini.

Opsi 2

Jika host kluster tidak bergabung dengan domain, gunakan nama pengguna admin atau nama grup dalam format SID, seperti yang ditunjukkan dalam contoh berikut.

Jika menggunakan pengguna admin:

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

Jika menggunakan grup admin:

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

Untuk menemukan SID bagi akun pengguna, lihat Menentukan pengidentifikasi keamanan pengguna atau grup.

Sebelum melanjutkan ke langkah berikutnya, catat item berikut:

  • Pastikan file keytab diberi nama current.keytab.
  • Ganti SPN yang sesuai dengan lingkungan Anda.
  • Parameter -adminGroup membuat pengikatan peran yang sesuai untuk grup AD yang ditentukan dengan hak istimewa admin kluster. Ganti (seperti yang ditunjukkan contoso\bob pada Opsi 1, di atas) dengan grup AD atau pengguna yang sesuai dengan lingkungan Anda.

Langkah 3: Uji webhook AD dan file keytab

Pastikan webhook AD berjalan di server API dan file keytab disimpan sebagai rahasia Kubernetes. Untuk mendapatkan file kubeconfig berbasis sertifikat untuk kluster beban kerja, ikuti langkah-langkah berikut:

  1. Dapatkan file kubeconfig berbasis sertifikat menggunakan perintah berikut. Gunakan file kubeconfig untuk menyambungkan ke kluster sebagai host lokal:

    Get-AksHciCredential -name mynewcluster1
    
  2. Jalankan kubectl di server yang Anda sambungkan (menggunakan file kubeconfig berbasis sertifikat yang sebelumnya Anda buat) lalu periksa penyebaran webhook AD untuk memastikannya dalam format ad-auth-webhook-xxxx:

    kubectl get pods -n=kube-system
    
  3. Jalankan kubectl untuk memeriksa apakah file keytab disebarkan sebagai rahasia dan terdaftar sebagai rahasia Kubernetes:

    kubectl get secrets -n=kube-system
    

Langkah 4: Membuat file kubeconfig AD

Setelah AD webhook dan keytab berhasil digunakan, buat file kubeconfig AD. Setelah file dibuat, Anda akan menyalin file kubeconfig AD ke mesin klien serta menggunakannya untuk melakukan autentikasi ke server API. Tidak seperti file kubeconfig berbasis sertifikat, kubeconfig AD bukanlah rahasia dan aman untuk disalin sebagai teks biasa.

Buka PowerShell sebagai administrator dan jalankan perintah berikut:

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

Langkah 5: Salin kubeconfig dan file lainnya ke mesin klien

Anda harus menyalin tiga file berikut dari kluster beban kerja AKS ke komputer klien Anda:

  • Salin file kubeconfig AD yang dibuat pada langkah sebelumnya ke $env:USERPROFILE.kube\config.

  • Buat jalur folder c:\adsso dan salin file berikut dari kluster beban kerja AKS ke komputer klien Anda:

    • Kubectl.exe di bawah $env:ProgramFiles\AksHci ke c:\adsso.
    • Kubectl-adsso.exe di bawah $env:ProgramFiles\AksHci ke c:\adsso.

    Catatan

    File adsso.exe dihasilkan di server saat Anda menjalankan Get-AksHciCredential cmdlet.

Langkah 6: Koneksi ke server API dari mesin klien

Setelah Anda menyelesaikan langkah-langkah sebelumnya, gunakan info masuk SSO untuk masuk ke mesin klien yang bergabung dengan domain Windows. Buka PowerShell, lalu coba akses server API menggunakan kubectl. Jika operasi berhasil diselesaikan, Anda telah menyiapkan AD SSO dengan benar.

Membuat dan memperbarui pengikatan peran grup AD

Seperti disebutkan dalam Langkah 2, peran default yang mengikat dengan hak istimewa admin kluster dibuat untuk pengguna dan / atau grup yang disediakan selama pemasangan. Pengikatan peran di Kubernetes mendefinisikan kebijakan akses untuk grup AD. Langkah ini menjelaskan cara menggunakan RBAC untuk membuat pengikatan peran grup AD baru di Kubernetes dan mengedit pengikatan peran yang ada. Misalnya, admin kluster mungkin ingin memberikan hak istimewa tambahan kepada pengguna dengan menggunakan grup AD (yang membuat proses lebih efisien). Untuk informasi selengkapnya tentang RBAC, lihat menggunakan otorisasi RBAC.

Saat Anda membuat atau mengedit entri RBAC grup AD lainnya, nama subjek harus memiliki awalan nama microsoft:activedirectory:CONTOSO\group . Perhatikan bahwa nama harus berisi nama domain dan awalan yang diapit oleh tanda kutip ganda.

Berikut dua contohnya:

Contoh 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" 

Contoh 2

Contoh berikut menunjukkan cara membuat peran kustom dan pengikatan peran untuk namespace layanan dengan grup AD. Dalam contoh, SREGroup adalah grup yang sudah ada sebelumnya di Active Directory Contoso. Saat pengguna ditambahkan ke grup AD, mereka akan segera diberikan hak istimewa.

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" 

Sebelum Anda menerapkan file YAML, nama grup dan pengguna harus selalu dikonversi ke SID menggunakan perintah :

kubectl-adsso nametosid <rbac.yml>

Demikian pula, untuk memperbarui RBAC yang ada, Anda dapat mengonversi SID ke nama grup yang mudah digunakan sebelum membuat perubahan. Untuk mengonversi SID, gunakan perintah:

kubectl-adsso sidtoname <rbac.yml>

Mengubah kata sandi akun AD yang terkait dengan akun server API

Ketika kata sandi diubah untuk akun server API, Anda harus mencopot add-on autentikasi AD dan memasang ulang menggunakan penekanan tombol saat ini dan sebelumnya yang diperbarui.

Setiap kali Anda mengubah kata sandi, Anda harus mengganti nama keytab saat ini (current.keytab) ke previous.keytab. Kemudian, pastikan untuk memberi nama kata sandi baru current.keytab.

Penting

File harus diberi nama current.keytab dan previous.keytab, masing-masing. Pengikatan peran yang ada tidak terpengaruh oleh perubahan ini.

Mencopot dan memasang ulang autentikasi AD

Anda mungkin ingin menginstal ulang SSO AD saat akun untuk server API diubah, saat kata sandi diperbarui, atau untuk memecahkan masalah kegagalan.

Untuk mencopot autentikasi AD, buka PowerShell sebagai administrator dan jalankan perintah berikut:

Uninstall-AksHciAdAuth -name mynewcluster1

Untuk memasang ulang autentikasi AD, buka PowerShell sebagai administrator dan jalankan perintah berikut:

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

Catatan

Untuk menghindari waktu henti jika klien memiliki tiket cache, -previousKeytab parameter hanya diperlukan saat Anda mengubah kata sandi.

Membuat akun AD server API dan file keytab

Dua langkah terlibat dalam membuat akun AD dan file keytab. Pertama, buat akun/pengguna AD baru untuk server API dengan nama prinsipal layanan (SPN), dan, kedua, buat file keytab untuk akun AD.

Langkah 1: Membuat akun ATAU pengguna AD baru untuk server API

Gunakan perintah PowerShell New-ADUser untuk membuat akun/pengguna AD baru dengan SPN. Berikut contohnya:

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

Langkah 2: Buat file keytab untuk akun AD

Untuk membuat file keytab, gunakan perintah ktpass Windows.

Berikut contoh menggunakan ktpass:

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

Catatan

Jika Anda melihat kesalahan DsCrackNames yang dikembalikan 0x2 dalam entri nama, pastikan bahwa parameter untuk /mapuser dalam bentuk mapuser DOMAIN\user, di mana DOMAIN adalah output echo %userdomain%.

Tentukan pengidentifikasi keamanan pengguna atau grup

Gunakan salah satu dari dua opsi berikut untuk menemukan SID untuk akun Anda atau akun lain:

  • Untuk menemukan SID yang terkait dengan akun Anda, dari perintah direktori beranda Anda, ketik perintah berikut:

    whoami /user
    
  • Untuk menemukan SID yang terkait dengan akun lain, buka PowerShell sebagai administrator dan jalankan perintah berikut:

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

Memecahkan masalah sertifikat

Webhook dan server API menggunakan sertifikat untuk saling memvalidasi koneksi TLS. Sertifikat ini akan kedaluwarsa dalam 500 hari. Untuk memverifikasi bahwa sertifikat telah kedaluwarsa, lihat log dari penampung ad-auth-webhook:

kubectl logs ad-auth-webhook-xxx

Jika Anda melihat kesalahan validasi sertifikat, selesaikan langkah-langkah untuk mencopot pemasangan dan memasang kembali webhook dan mendapatkan sertifikat baru.

Praktik terbaik dan pembersihan

  • Gunakan akun unik untuk setiap kluster.
  • Jangan gunakan kembali kata sandi untuk akun server API di seluruh kluster.
  • Hapus salinan lokal file keytab segera setelah Anda membuat kluster dan verifikasi bahwa mandat SSO berfungsi.
  • Hapus pengguna Active Directory yang dibuat untuk server API. Untuk informasi selengkapnya, lihat Hapus-ADUser.

Langkah berikutnya

Dalam panduan cara ini, Anda mempelajari cara mengonfigurasi Autentikasi AD untuk terhubung dengan aman ke server API dengan kredensial SSO. Selanjutnya, Anda dapat: