We nyepetake wewenang LDAP menyang Kubernetes

We nyepetake wewenang LDAP menyang Kubernetes

Tutorial cilik babagan carane nggunakake Keycloak kanggo nyambungake Kubernetes menyang server LDAP lan nyetel impor pangguna lan grup. Iki bakal ngidini sampeyan nyiyapake RBAC kanggo pangguna lan nggunakake auth-proxy kanggo nglindhungi Dashboard Kubernetes lan aplikasi liyane sing ora ngerti carane menehi wewenang.

Instalasi Keycloak

Ayo nganggep sampeyan wis duwe server LDAP. Bisa uga Active Directory, FreeIPA, OpenLDAP utawa apa wae. Yen sampeyan ora duwe server LDAP, mula sampeyan bisa nggawe pangguna langsung ing antarmuka Keycloak, utawa nggunakake panyedhiya oidc umum (Google, Github, Gitlab), asile bakal meh padha.

Kaping pisanan, ayo nginstal Keycloak dhewe, instalasi bisa ditindakake kanthi kapisah, utawa langsung menyang kluster Kubernetes, minangka aturan, yen sampeyan duwe sawetara klompok Kubernetes, bakal luwih gampang nginstal kanthi kapisah. Ing tangan liyane, sampeyan bisa tansah nggunakake bagan helm resmi lan nginstal langsung menyang kluster sampeyan.

Kanggo nyimpen data Keycloak, sampeyan butuh database. Default punika h2 (kabeh data disimpen sacara lokal), nanging uga bisa digunakake postgres, mysql utawa mariadb.
Yen sampeyan isih arep nginstal Keycloak kanthi kapisah, sampeyan bisa nemokake instruksi sing luwih rinci ing dokumentasi resmi.

Setelan Federasi

Kaping pisanan, ayo nggawe alam anyar. Realm minangka ruang aplikasi kita. Saben aplikasi bisa duwe wilayah dhewe kanthi pangguna lan setelan wewenang sing beda. Alam master digunakake dening Keycloak dhewe lan nggunakake kanggo tindakan liya salah.

Tekan Tambah ranah

pilihan
Value

jeneng
kubernetes

Tampilan Jeneng
Kubernetes

Jeneng Tampilan HTML
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >

Kubernetes kanthi gawan mriksa manawa email pangguna wis dikonfirmasi utawa ora. Amarga kita nggunakake server LDAP dhewe, priksa iki meh mesthi bali false. Ayo mateni perwakilan setelan iki ing Kubernetes:

Ruang lingkup klien -> email -> Mappers -> email diverifikasi (Busak)

Saiki ayo nyiyapake federasi, kanggo iki:

Federasi pangguna -> Tambah panyedhiya… -> ldap

Iki conto persiyapan kanggo FreeIPA:

pilihan
Value

Jeneng Tampilan Konsol
freeipa.example.org

Vendor
Red Hat Directory Server

Atribut UUID LDAP
ipauniqueid

URL sambungan
ldaps://freeipa.example.org

Panganggo DN
cn=users,cn=accounts,dc=example,dc=org

Ikatan DN
uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org

Ikatan Kredensial
<password>

Allow Kerberos otentikasi:
on

Alam Kerberos:
EXAMPLE.ORG

Server Utama:
HTTP/[email protected]

tab kunci:
/etc/krb5.keytab

Pangguna keycloak-svc kudu digawe luwih dhisik ing server LDAP kita.

Ing kasus Active Directory, cukup pilih Vendor: Active Directory lan setelan sing dibutuhake bakal dilebokake ing formulir kanthi otomatis.

Tekan Simpen

Saiki ayo nerusake:

Federasi pangguna -> freeipa.example.org -> Mappers -> Jeneng ngarep

pilihan
Value

atribut Ldap
givenName

Saiki aktifake pemetaan klompok:

Federasi pangguna -> freeipa.example.org -> Mappers -> nggawe

pilihan
Value

jeneng
groups

Tipe Mapper
group-ldap-mapper

Grup LDAP DN
cn=groups,cn=accounts,dc=example,dc=org

Strategi Njupuk Grup Panganggo
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE

Saiki yen persiyapan federasi wis rampung, ayo pindhah menyang nyetel klien.

Setelan klien

Ayo nggawe klien anyar (aplikasi sing bakal nampa pangguna saka Keycloak). Ayo lunga:

pelanggan -> nggawe

pilihan
Value

ID pelanggan
kubernetes

Jinis Akses
confidenrial

URL ROOT
http://kubernetes.example.org/

URI Pangalihan sing Sah
http://kubernetes.example.org/*

URL Admin
http://kubernetes.example.org/

Kita uga bakal nggawe ruang lingkup kanggo klompok:

Ruang lingkup klien -> nggawe

pilihan
Value

cithakan
No template

jeneng
groups

Path grup lengkap
false

Lan atur peta kanggo wong-wong mau:

Ruang lingkup klien -> kelompok -> Mappers -> nggawe

pilihan
Value

jeneng
groups

Tipe Mapper
Group membership

Jeneng Klaim Token
groups

Saiki kita kudu ngaktifake pemetaan klompok ing ruang lingkup klien:

pelanggan -> Kubernetes -> Ruang lingkup klien -> Cakupan Klien Default

Pilih kelompok Π² Cakupan Klien sing kasedhiyaklik Tambah sing dipilih

Saiki ayo nyiyapake otentikasi aplikasi kita, pindhah menyang:

pelanggan -> Kubernetes

pilihan
Value

Wewenang Aktif
ON

Ayo push nyimpen lan iki ngrampungake persiyapan klien, saiki ing tab

pelanggan -> Kubernetes -> Kredensial

sampeyan bisa njaluk Secret kang bakal digunakake mengko.

Konfigurasi Kubernetes

Nyiyapake Kubernetes kanggo wewenang OIDC cukup sepele lan ora rumit banget. Sampeyan mung kudu nyelehake sertifikat CA saka server OIDC sampeyan /etc/kubernetes/pki/oidc-ca.pem lan nambah opsi sing perlu kanggo kube-apiserver.
Kanggo nindakake iki, nganyari /etc/kubernetes/manifests/kube-apiserver.yaml marang para bendaramu kabeh:

...
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
...

Lan uga nganyari konfigurasi kubeadm ing kluster supaya ora ilang setelan kasebut sajrone nganyari:

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
...

Iki ngrampungake persiyapan Kubernetes. Sampeyan bisa mbaleni langkah iki ing kabeh klompok Kubernetes.

Wewenang wiwitan

Sawise langkah-langkah kasebut, sampeyan bakal duwe klompok Kubernetes kanthi wewenang OIDC dikonfigurasi. Intine mung pangguna sampeyan durung duwe klien sing dikonfigurasi, uga kubeconfig dhewe. Kanggo ngatasi masalah iki, sampeyan kudu ngatur penerbitan otomatis kubeconfig kanggo pangguna sawise wewenang sukses.

Kanggo nindakake iki, sampeyan bisa nggunakake aplikasi web khusus sing ngidini sampeyan otentikasi pangguna banjur download kubeconfig sing wis rampung. Salah siji sing paling trep yaiku Kuberos, ngijini sampeyan kanggo njlèntrèhaké kabeh klompok Kubernetes ing siji config lan gampang ngalih ing antarane.

Kanggo ngatur Kuberos, cukup kanggo njlèntrèhaké cithakan kanggo kubeconfig lan mbukak karo paramèter ing ngisor iki:

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

Kanggo informasi luwih rinci ndeleng Dianggo ing Github.

Sampeyan uga bisa digunakake kubelogin yen sampeyan pengin menehi wewenang langsung ing komputer pangguna. Ing kasus iki, pangguna bakal mbukak browser kanthi formulir wewenang ing localhost.

Kubeconfig asil bisa dicenthang ing situs jwt.io. Mung nyalin nilai users[].user.auth-provider.config.id-token saka kubeconfig menyang formulir ing situs lan entuk transkrip langsung.

Setelan RBAC

Nalika ngatur RBAC, sampeyan bisa ngrujuk menyang jeneng panganggo (field name ing token jwt) lan kanggo klompok pangguna (field groups ing token jwt). Iki minangka conto nyetel ijin kanggo grup kubernetes-default-namespace-admins:

kubernetes-default-namespace-admins.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

Conto liyane kanggo RBAC bisa ditemokake ing dokumentasi resmi Kubernetes

Nyetel otentik-proksi

Ana proyek apik banget keycloak-gatekeeper, sing ngidini sampeyan ngamanake aplikasi apa wae kanthi ngidini pangguna kanggo otentikasi menyang server OIDC. Aku bakal nuduhake sampeyan carane nyiyapake nggunakake Dashboard Kubernetes minangka conto:

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: www.habr.com

Add a comment