Kami mempercepat otorisasi LDAP ke Kubernetes


Tutorial singkat tentang cara menggunakan Kubernet dengan Keycloak untuk mengikat ke server LDAP Anda dan mengonfigurasi impor pengguna dan grup. Ini akan memungkinkan Anda untuk mengkonfigurasi RBAC untuk pengguna Anda dan menggunakan auth-proxy untuk melindungi Dashboard Kubernetes dan aplikasi lain yang tidak dapat mengotorisasi sendiri.


Instal Keycloak


Misalkan Anda sudah memiliki server LDAP. Ini bisa berupa Active Directory, FreeIPA, OpenLDAP atau yang lainnya. Jika Anda tidak memiliki server LDAP, maka pada prinsipnya Anda dapat membuat pengguna langsung di antarmuka Keycloak, atau menggunakan penyedia oidc publik (Google, Github, Gitlab), hasilnya akan hampir sama.


Pertama-tama, kita akan menginstal Keycloak itu sendiri, instalasi dapat dilakukan secara terpisah, dan segera di cluster Kubernetes, sebagai aturan, jika Anda memiliki beberapa cluster Kubernetes, akan lebih mudah untuk menginstalnya secara terpisah. Di sisi lain, Anda selalu dapat menggunakan grafik helm resmi dan menginstalnya langsung di cluster Anda.


Untuk menyimpan data Keycloak, Anda memerlukan database. Secara default, h2 digunakan (semua data disimpan secara lokal), tetapi juga dimungkinkan untuk menggunakan postgres , mysql atau mariadb .
Jika Anda masih memutuskan untuk menginstal Keycloak secara terpisah, Anda akan menemukan instruksi lebih rinci dalam dokumentasi resmi .


Pengaturan Federasi


Pertama, buat ranah baru. Ranah adalah ruang aplikasi kita. Setiap aplikasi dapat memiliki ranah sendiri dengan berbagai pengguna dan pengaturan otorisasi. Wilayah master digunakan oleh Keycloak sendiri dan tidak benar untuk menggunakannya untuk hal lain.


Klik Tambahkan ranah


OpsiNilai
Namakubernetes
Nama tampilanKubernetes
Nama Tampilan HTML<img src="https://kubernetes.io/images/nav_logo.svg" width="400" \>

Kubernetes secara default memeriksa apakah pengguna memiliki email atau tidak. Karena kami menggunakan server LDAP kami sendiri, maka pemeriksaan ini hampir selalu menghasilkan false . Mari matikan representasi parameter ini di Kubernetes:


Lingkup klien -> Email -> Pemetaan -> Email diverifikasi (Hapus)


Sekarang konfigurasikan federasi, untuk ini kita akan pergi ke:


Federasi pengguna -> Tambahkan penyedia ... -> ldap


Berikut adalah contoh pengaturan untuk FreeIPA:


OpsiNilai
Nama Tampilan Konsolfreeipa.example.org
VendorRed Hat Directory Server
Atribut LDAP UUIDipauniqueid
URL koneksildaps://freeipa.example.org
Pengguna DNcn=users,cn=accounts,dc=example,dc=org
Bind dnuid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org
Mengikat kredensial<password>
Izinkan otentikasi Kerberos:on
Kerberos Realm:EXAMPLE.ORG
Server Principal:HTTP/freeipa.example.org@EXAMPLE.ORG
KeyTab:/etc/krb5.keytab

Pengguna keycloak-svc harus dibuat terlebih dahulu di server LDAP kami.


Dalam kasus Active Directory, cukup pilih Vendor: Active Directory dan pengaturan yang diperlukan secara otomatis dimasukkan ke dalam formulir.


Klik Simpan


Sekarang mari kita lanjutkan:


Federasi pengguna -> freeipa.example.org -> Pemetaan -> Nama Depan


OpsiNilai
Atap ldapgivenName

Sekarang aktifkan pemetaan grup:


Federasi pengguna -> freeipa.example.org -> Pemetaan -> Buat


OpsiNilai
Namagroups
Tipe mappergroup-ldap-mapper
Grup LDAP DNcn=groups,cn=accounts,dc=example,dc=org
Grup Pengguna Ambil StrategiGET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE

Ini melengkapi konfigurasi federasi, mari beralih ke pengaturan klien.


Pengaturan klien


Buat klien baru (aplikasi yang akan menerima pengguna dari Keycloak). Kami lulus:


Klien -> Buat


OpsiNilai
ID Klienkubernetes
Jenis aksesconfidenrial
Root URLhttp://kubernetes.example.org/
URI Pengalihan Validhttp://kubernetes.example.org/*
URL adminhttp://kubernetes.example.org/

Juga buat ruang lingkup untuk grup:


Lingkup Klien -> Buat


OpsiNilai
TemplatNo template
Namagroups
Jalur grup penuhfalse

Dan konfigurasikan mapper untuk mereka:


Lingkup Klien -> grup -> Pemetaan -> Buat


OpsiNilai
Namagroups
Tipe mapperGroup membership
Nama Klaim Tokengroups

Sekarang kita perlu mengaktifkan grup pemetaan dalam lingkup klien kami:


Klien -> kubernetes -> Lingkup Klien -> Lingkup Klien Default


Pilih grup dalam Lingkup Klien Yang Tersedia , klik Tambahkan yang dipilih


Sekarang konfigurasikan otentikasi aplikasi kami, buka:


Klien -> kubernetes


OpsiNilai
Otorisasi DiaktifkanON

Klik simpan dan ini menyelesaikan pengaturan klien, sekarang di tab


Klien -> kubernetes -> Kredensial


Anda bisa mendapatkan Rahasia yang akan kami gunakan di masa depan.


Konfigurasikan Kubernet


Mengkonfigurasi Kubernetes untuk otentikasi OIDC cukup sepele dan tidak terlalu rumit. Yang perlu Anda lakukan adalah memasukkan sertifikat CA server OIDC Anda di /etc/kubernetes/pki/oidc-ca.pem dan tambahkan opsi yang diperlukan untuk kube-apiserver.
Untuk melakukan ini, perbarui /etc/kubernetes/manifests/kube-apiserver.yaml di semua penyihir Anda:


 ... spec: containers: - command: - kube-apiserver ... - --oidc-ca-file=/etc/kubernetes/pki/oidc-ca.pem - --oidc-client-id=kubernetes - --oidc-groups-claim=groups - --oidc-issuer-url=https://keycloak.example.org/auth/realms/kubernetes - --oidc-username-claim=email ... 

Dan juga perbarui konfigurasi kubeadm di kluster, agar tidak kehilangan pengaturan ini saat memperbarui:


 kubectl edit -n kube-system configmaps kubeadm-config 

 ... data: ClusterConfiguration: | apiServer: extraArgs: oidc-ca-file: /etc/kubernetes/pki/oidc-ca.pem oidc-client-id: kubernetes oidc-groups-claim: groups oidc-issuer-url: https://keycloak.example.org/auth/realms/kubernetes oidc-username-claim: email ... 

Ini menyelesaikan pengaturan Kubernetes. Anda dapat mengulangi langkah-langkah ini di semua cluster Kubernetes Anda.


Otorisasi awal


Setelah langkah-langkah ini, Anda sudah memiliki kluster Kubernetes dengan otentikasi OIDC yang dikonfigurasi. Satu-satunya titik adalah bahwa pengguna Anda belum memiliki klien yang dikonfigurasi serta kubeconfig mereka sendiri. Untuk mengatasi masalah ini, Anda perlu mengonfigurasi penerbitan kubeconfig otomatis untuk pengguna setelah otorisasi berhasil.


Untuk melakukan ini, Anda dapat menggunakan aplikasi web khusus yang memungkinkan Anda untuk mengotentikasi pengguna dan kemudian mengunduh kubeconfig yang sudah selesai. Salah satu yang paling nyaman adalah Kuberos , yang memungkinkan Anda untuk menggambarkan semua cluster Kubernetes dalam satu konfigurasi dan dengan mudah beralih di antara mereka.


Untuk mengkonfigurasi Kuberos, cukup jelaskan templat untuk kubeconfig dan jalankan dengan parameter berikut:


 kuberos https://keycloak.example.org/auth/realms/kubernetes kubernetes /cfg/secret /cfg/template 

Lihat Penggunaan pada Github untuk detail lebih lanjut.


Dimungkinkan juga untuk menggunakan kubelogin jika Anda ingin mengotorisasi langsung di komputer pengguna. Dalam hal ini, pengguna membuka browser dengan formulir otorisasi di localhost.


Kubeconfig yang dihasilkan dapat diperiksa di jwt.io. Cukup salin nilai users[].user.auth-provider.config.id-token dari kubeconfig Anda ke formulir di situs dan segera dapatkan dekripsi.


Pengaturan RBAC


Saat menyiapkan RBAC, Anda bisa merujuk ke nama pengguna (bidang name di token jwt) dan grup pengguna (bidang groups di token jwt). Berikut adalah contoh pengaturan izin untuk grup kubernetes-default-namespace-admins :


kubernetes-default-namespace-adminins.yaml
 apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: default-admins namespace: default rules: - apiGroups: - '*' resources: - '*' verbs: - '*' --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: kubernetes-default-namespace-admins namespace: default roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: default-admins subjects: - apiGroup: rbac.authorization.k8s.io kind: Group name: kubernetes-default-namespace-admins 

Lebih banyak contoh untuk RBAC dapat ditemukan di dokumentasi resmi Kubernetes.


Konfigurasikan auth-proxy


Ada proyek keycloak-gatekeeper yang luar biasa yang memungkinkan Anda melindungi aplikasi apa pun, memberi pengguna kemampuan untuk mengautentikasi dengan server OIDC. Saya akan menunjukkan bagaimana Anda dapat mengonfigurasinya menggunakan Kubernetes Dashboard sebagai contoh:


dashboard-proxy.yaml
 apiVersion: extensions/v1beta1 kind: Deployment metadata: name: kubernetes-dashboard-proxy spec: replicas: 1 template: metadata: labels: app: kubernetes-dashboard-proxy spec: containers: - args: - --listen=0.0.0.0:80 - --discovery-url=https://keycloak.example.org/auth/realms/kubernetes - --client-id=kubernetes - --client-secret=<your-client-secret-here> - --redirection-url=https://kubernetes-dashboard.example.org - --enable-refresh-tokens=true - --encryption-key=ooTh6Chei1eefooyovai5ohwienuquoh - --upstream-url=https://kubernetes-dashboard.kube-system - --resources=uri=/* image: keycloak/keycloak-gatekeeper name: kubernetes-dashboard-proxy ports: - containerPort: 80 livenessProbe: httpGet: path: /oauth/health port: 80 initialDelaySeconds: 3 timeoutSeconds: 2 readinessProbe: httpGet: path: /oauth/health port: 80 initialDelaySeconds: 3 timeoutSeconds: 2 --- apiVersion: v1 kind: Service metadata: name: kubernetes-dashboard-proxy spec: ports: - port: 80 protocol: TCP targetPort: 80 selector: app: kubernetes-dashboard-proxy type: ClusterIP 

Source: https://habr.com/ru/post/id441112/


All Articles