Urang nyepetkeun otorisasina LDAP ka Kubernetes

Urang nyepetkeun otorisasina LDAP ka Kubernetes

Tutorial pondok ngeunaan kumaha anjeun tiasa nganggo Keycloak pikeun nyambungkeun Kubernetes ka server LDAP anjeun sareng ngonpigurasikeun impor pangguna sareng grup. Ieu bakal ngidinan Anjeun pikeun ngonpigurasikeun RBAC pikeun pamaké anjeun sarta ngagunakeun auth-proxy pikeun ngajaga Kubernetes Dashboard jeung aplikasi sejenna nu teu bisa auténtikasi sorangan.

Pamasangan Keycloak

Anggap anjeun geus boga server LDAP. Ieu tiasa Active Directory, FreeIPA, OpenLDAP atanapi naon waé. Upami anjeun teu ngagaduhan server LDAP, teras prinsipna anjeun tiasa nyiptakeun pangguna langsung dina antarmuka Keycloak, atanapi nganggo panyadia oidc umum (Google, Github, Gitlab), hasilna bakal ampir sami.

Anu mimiti, hayu urang masang Keycloak sorangan. Pamasanganna tiasa dilakukeun nyalira atanapi langsung kana klaster Kubernetes. Sakumaha aturan, upami anjeun gaduh sababaraha klaster Kubernetes, bakal langkung gampil masangna nyalira. Di sisi séjén anjeun salawasna bisa make bagan helm resmi tur masang langsung kana klaster Anjeun.

Pikeun nyimpen data Keycloak anjeun peryogi database. Default nyaéta h2 (sadayana data disimpen sacara lokal), tapi oge mungkin ngagunakeun postgres, mysql atawa mariadb.
Upami anjeun masih mutuskeun pikeun masang Keycloak nyalira, anjeun bakal mendakan petunjuk anu langkung rinci dina dokuméntasi resmi.

Setélan Federation

Munggaran sadaya, hayu urang nyieun realm anyar. Realm mangrupikeun rohangan aplikasi urang. Unggal aplikasi tiasa gaduh alam sorangan sareng pangguna anu béda sareng setélan otorisasina. Alam Master dianggo ku Keycloak sorangan sareng salah ngagunakeun éta pikeun anu sanés.

Teken Tambahkeun karajaan

pilihan
ajen

nami
kubernetes

Nami tayang
Kubernetes

Ngaran Témbongkeun HTML
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >

Kubernetes sacara standar mariksa naha email pangguna dikonfirmasi atanapi henteu. Kusabab urang ngagunakeun server LDAP urang sorangan, cék ieu ampir sok balik false. Hayu urang nonaktipkeun representasi pilihan ieu dina Kubernetes:

lingkup klien -> surélék -> Mappers -> Surélék diverifikasi (Mupus)

Ayeuna hayu urang nyetél federasi; pikeun ngalakukeun ieu, angkat ka:

federasi pamaké -> Tambahkeun panyadia… -> ldap

Ieu conto setelan kanggo FreeIPA:

pilihan
ajen

Ngaran Témbongkeun konsol
freeipa.example.org

jelema nu ngajual nguriling
Red Hat Directory Server

UUID LDAP atribut
ipauniqueid

URL sambungan
ldaps://freeipa.example.org

Pamaké DN
cn=users,cn=accounts,dc=example,dc=org

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

Ngabeungkeut Kapercayaan
<password>

Ngidinan auténtikasi Kerberos:
on

Alam Kerberos:
EXAMPLE.ORG

Kepala Server:
HTTP/[email protected]

Tab konci:
/etc/krb5.keytab

Pamaké keycloak-svc kudu dijieun sateuacanna dina server LDAP urang.

Dina kasus Active Directory, anjeun ngan ukur kedah milih Ngajual: Active Directory sareng setélan anu diperyogikeun bakal otomatis diasupkeun kana formulir.

Teken Simpen

Ayeuna hayu urang ngaléngkah:

federasi pamaké -> freeipa.example.org -> Mappers -> Nami payun

pilihan
ajen

atribut Ldap
givenName

Ayeuna hayu urang aktipkeun pemetaan grup:

federasi pamaké -> freeipa.example.org -> Mappers -> nyiptakeun

pilihan
ajen

nami
groups

Tipe Mapper
group-ldap-mapper

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

Grup pamaké nimba Stratégi
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE

Ayeuna yén setélan federasi parantos réngsé, hayu urang teraskeun kana nyetél klien.

Setélan klien

Hayu urang nyieun hiji klien anyar (hiji aplikasi nu bakal nampa pamaké ti Keycloak). Hayu urang ngaléngkah:

Klién -> nyiptakeun

pilihan
ajen

Klién KTP
kubernetes

Jenis aksés
confidenrial

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

URI Alihan anu Sah
http://kubernetes.example.org/*

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

Hayu urang ogé nyieun wengkuan pikeun grup:

Lingkup klien -> nyiptakeun

pilihan
ajen

template
No template

nami
groups

Jalur grup pinuh
false

Sareng pasang mapper pikeun aranjeunna:

Lingkup klien -> grup -> Mappers -> nyiptakeun

pilihan
ajen

nami
groups

Tipe Mapper
Group membership

Ngaran Klaim Token
groups

Ayeuna urang kedah ngaktipkeun grup pemetaan dina lingkup klien kami:

Klién -> kubernetes -> Lingkup klien -> Lingkup Klién Default

Pilih grup в wengkuan klien sadiamalik Tambahkeun dipilih

Ayeuna hayu urang ngonpigurasikeun auténtikasi aplikasi urang, buka:

Klién -> kubernetes

pilihan
ajen

Otorisasina Diaktipkeun
ON

Hayu urang pencét nyalametkeun tur kalawan ieu setelan klien geus réngsé, ayeuna dina tab

Klién -> kubernetes -> surat kapercayaan keur utusan

anjeun bisa meunang rasiah nu urang bakal make salajengna.

Ngonpigurasikeun Kubernetes

Nyetél Kubernetes pikeun otorisasi OIDC cukup sepele sareng henteu rumit pisan. Sadaya anu anjeun kedah laksanakeun nyaéta nempatkeun sertipikat CA tina server OIDC anjeun /etc/kubernetes/pki/oidc-ca.pem tur nambahkeun pilihan diperlukeun pikeun kube-apiserver.
Jang ngalampahkeun ieu, update /etc/kubernetes/manifests/kube-apiserver.yaml dina sadaya master anjeun:

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

Ogé, ngapdet konfigurasi kubeadm dina kluster supados henteu kaleungitan setélan ieu nalika ngamutahirkeun:

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

Ieu ngalengkepan setelan Kubernetes. Anjeun tiasa ngulang léngkah-léngkah ieu dina sadaya klaster Kubernetes anjeun.

Otorisasi awal

Saatos léngkah-léngkah ieu, anjeun bakal ngagaduhan klaster Kubernetes sareng otorisasi OIDC anu dikonpigurasi. Hiji-hijina hal éta pamaké anjeun teu acan gaduh klien ngonpigurasi atanapi kubeconfig sorangan. Pikeun ngajawab masalah ieu, anjeun kudu ngonpigurasikeun distribusi otomatis kubeconfig ka pamaké sanggeus otorisasina suksés.

Jang ngalampahkeun ieu, anjeun tiasa nganggo aplikasi wéb khusus anu ngamungkinkeun anjeun pikeun ngabuktoskeun kaaslianana pangguna teras unduh kubeconfig anu siap-siap. Salah sahiji anu pang merenah nyaéta Kuberos, eta ngidinan Anjeun pikeun ngajelaskeun sakabeh klaster Kubernetes dina hiji config sarta gampang pindah antara aranjeunna.

Pikeun ngonpigurasikeun Kuberos, ngan ukur ngajelaskeun template kubeconfig sareng jalankeun ku parameter ieu:

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

Pikeun inpo nu leuwih wincik tingali pamakéan dina Github.

Ieu oge mungkin ngagunakeun kubelogin upami anjeun hoyong otorisasi langsung dina komputer pangguna. Dina hal ieu, pamaké bakal muka browser kalawan formulir otorisasina on localhost.

Kubeconfig hasilna bisa dipariksa dina website jwt.io. Ngan salin nilai users[].user.auth-provider.config.id-token ti kubeconfig anjeun ka formulir dina ramatloka jeung geura nampa transcript a.

Nyetél RBAC

Nalika ngonpigurasikeun RBAC, anjeun tiasa ngarujuk kana duanana nami pangguna (field name dina token jwt), sareng per grup pangguna (field groups dina token jwt). Ieu conto netepkeun hak pikeun 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 langkung seueur pikeun RBAC tiasa dipendakan dina dokuméntasi resmi Kubernetes

Nyetél auth-proxy

Aya hiji proyék éndah keycloak-gatekeeper, nu ngidinan Anjeun pikeun ngajaga aplikasi nu mana wae nu ku nyadiakeun pamaké kalawan kamampuhan pikeun auténtikasi ka server OIDC. Kuring bakal nunjukkeun anjeun kumaha ngonpigurasikeunana nganggo Kubernetes Dashboard sabagé conto:

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

sumber: www.habr.com

Tambahkeun komentar