LDAP-authentikációt kapcsolunk a Kuberneteshez

LDAP-authentikációt kapcsolunk a Kuberneteshez

Egy rövid útmutató arról, hogyan lehet a Keycloak segítségével összekapcsolni a Kubernetes-t a LDAP szerverével, és beállítani a felhasználók és csoportok importálását. Ez lehetővé teszi az RBAC konfigurálását a felhasználók számára és az auth-proxy használatát a Kubernetes Dashboard és más alkalmazások védelmére, amelyek nem tudják önállóan kezelni az autorizációt.

Keycloak telepítése

Tegyük fel, hogy már van LDAP szervere. Ez lehet Active Directory, FreeIPA, OpenLDAP vagy bármi más. Ha nincs LDAP szervere, akkor alapvetően felhasználókat hozhat létre közvetlenül a Keycloak felületén, vagy használhat nyilvános oidc szolgáltatókat (Google, Github, Gitlab), az eredmény majdnem ugyanaz lesz.

Először is telepítsük magát a Keycloak-ot, a telepítés végezhető önállóan is, vagy közvetlenül a Kubernetes klaszterbe. Általában, ha több Kubernetes klasztere van, célszerűbb külön telepíteni. Másrészt mindig használhatja a hivatalos helm chart-ot és telepítheti közvetlenül a klaszterébe.

A Keycloak adatok tárolásához adatbázisra lesz szüksége. Alapértelmezésként h2 (minden adat helyben tárolva), de használhat postgres, mysql vagy mariadb.
Ha mégis külön szeretné telepíteni a Keycloak-ot, részletesebb útmutatót talál itt hivatalos dokumentációban.

Föderáció beállítása

Először is, hozzunk létre egy új realm-et. A realm az alkalmazásunk területe. Minden alkalmazás saját realm-mel rendelkezhet különböző felhasználókkal és autorizációs beállításokkal. A Master realm-t a Keycloak saját maga használja, és nem helyes másra használni.

Kattintunk Realm hozzáadása

Opció
Érték

Név
kubernetes

Megjelenítési név
Kubernetes

HTML megjelenítési név
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >

A Kubernetes alapértelmezés szerint ellenőrzi, hogy a felhasználónak van-e megerősített e-mail címe vagy sem. Mivel saját LDAP szervert használunk, ez az ellenőrzés szinte mindig hamislesz. Nézzük meg, hogyan kapcsolhatjuk ki ezt a paramétert a Kubernetes-ben:

Kliencskopák —> Email —> Leképezők —> E-mail megerősítve (Törlés)

Most beállítjuk a föderációt, ehhez lépjünk a következőre:

Felhasználói föderáció —> Szolgáltató hozzáadása… —> ldap

Példaként bemutatok egy beállítást a FreeIPA számára:

Opció
Érték

Konzol megjelenítési név
freeipa.example.org

Szállító
Red Hat Directory Server

UUID LDAP attribútum
ipauniqueid

Kapcsolati URL
ldaps://freeipa.example.org

Felhasználók DN
cn=users,cn=accounts,dc=example,dc=org

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

Bind Credential
<password>

Kerberos hitelesítési engedélyezése:
on

Kerberos Realm:
EXAMPLE.ORG

Szerver principal:
HTTP/freeipa.example.org@EXAMPLE.ORG

KeyTab:
/etc/krb5.keytab

A felhasználót keycloak-svc előre létre kell hozni a LDAP szerverünkön.

Active Directory esetén elegendő egyszerűen kiválasztani Szállító: Active Directory és a szükséges beállítások automatikusan kitöltődnek az űrlapon.

Kattintunk Mentés

Most lépjünk a következőre:

Felhasználói föderáció —> freeipa.example.org —> Leképezők —> Keresztnév

Opció
Érték

LDAP attribútum
givenName

Most kapcsoljuk be a csoporttérképezést:

Felhasználói föderáció —> freeipa.example.org —> Leképezők —> Létrehozás

Opció
Érték

Név
groups

Térképező típus
group-ldap-mapper

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

Felhasználói Csoportok Lekérdezési Stratégiája
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE

Ezzel befejeztük a szövetségi beállítást, lépjünk tovább az ügyfél beállítására.

Kliens beállítása

Hozzunk létre egy új ügyfelet (alkalmazás, amely felhasználókat fog szerezni a Keycloak-ból). Lépjünk:

Ügyfelek —> Létrehozás

Opció
Érték

Client ID
kubernetes

Hozzáférési típus
bizalmas

Gyökér URL
http://kubernetes.example.org/

Érvényes Átirányító URI-k
http://kubernetes.example.org/*

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

Most létrehozunk egy scope-ot a csoportok számára:

Ügyfél Scoped —> Létrehozás

Opció
Érték

Sablon
Nincs sablon

Név
groups

Teljes csoport útvonal
hamis

És konfigurálunk egy mappert számukra:

Ügyfél Scoped —> groups —> Leképezők —> Létrehozás

Opció
Érték

Név
groups

Térképező típus
Csoporttagság

Token Igény Név
groups

Most engedélyeznünk kell a csoportok térképezését az ügyfél scope-unkban:

Ügyfelek —> kubernetes —> Ügyfél Scoped —> Alapértelmezett Ügyfél Scoped

Kiválasztás groups be. Elérhető Client Scopes, kattintsunk Kiválasztott hozzáadása

Most konfiguráljuk az alkalmazásunk hitelesítését, lépjünk:

Ügyfelek —> kubernetes

Opció
Érték

Engedélyezett jogosultság
ON

Kattintsunk mentés és ezzel befejeztük az ügyfél beállítását, most a "

Ügyfelek —> kubernetes —> Hitelesítő adatok

fülön meg tudja szerezni Titkos kulcs amelyet a későbbiekben használni fogunk.

Kubernetes beállítása

A Kubernetes beállítása OIDC-hitelesítéssel meglehetősen egyszerű, és nem jelent komoly kihívást. Mindez annyit igényel, hogy a CA-tanúsítványt az OIDC-szerverének elhelyezzük a /etc/kubernetes/pki/oidc-ca.pem majd hozzáadjuk a szükséges opciókat a kube-apiserverhez.
Ehhez frissítse a /etc/kubernetes/manifests/kube-apiserver.yaml minden mesterében:

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

És frissítse a kubeadm konfigurációt a klaszterben, hogy ne veszítse el ezeket a beállításokat a frissítéskor:

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

Ezzel befejeztük a Kubernetes beállítását. Ezeket az intézkedéseket megismételheti minden Kubernetes-klaszterében.

Kezdeti hitelesítés

Ezek után már rendelkezni fog egy Kubernetes-klaszterrel, amely OIDC-hitelítéssel van beállítva. Az egyetlen probléma, hogy a felhasználóiak még nem rendelkeznek beállított ügyféllel és saját kubeconfiggal. A probléma megoldásához automatikus kubeconfig kiadásra van szükség a felhasználók számára a sikeres hitelesítés után.

Ehhez speciális webalkalmazásokat használhat, amelyek lehetővé teszik a felhasználó hitelesítését, majd a kész kubeconfig letöltését. Az egyik a legegyszerűbb — Kuberos, amely lehetővé teszi, hogy egy konfiguráción belül minden Kubernetes-klasztert leírjon, és könnyen váltogathasson közöttük.

A Kuberos beállításához elegendő a kubeconfig sablon leírása és a következő paraméterekkel való futtatás:

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

A részletesebb információkért nézze meg Felhasználás a Github-on.

Emellett használhatja kubelogin , ha közvetlenül a felhasználó számítógépén szeretne bejelentkezni. Ebben az esetben a felhasználónak egy böngészőablak nyílik meg, amelyben a localhost-on kell bejelentkeznie.

A kapott kubeconfig ellenőrizhető a weboldalon jwt.io. Csak másolja a következő értéket users[].user.auth-provider.config.id-token a kubeconfig-jából a weboldalon található űrlapba, és azonnal megkapja a dekódolást.

RBAC beállítása

RBAC beállításakor hivatkozhat felhasználónevére (mező name a jwt-tokenben), vagy felhasználói csoportra (mező groups a jwt-tokenben). Íme egy példa a jogok beállítására a csoport számára: 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

További példák az RBAC-ra találhatók itt: a Kubernetes hivatalos dokumentációja

auth-proxy beállítása

Van egy nagyszerű projekt keycloak-gatekeeper, amely lehetővé teszi bármely alkalmazás védelmét, lehetőséget adva a felhasználónak az OIDC-szerveren való hitelesítésre. Megmutatom, hogyan állítható be a Kubernetes Dashboard példáján keresztül:

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

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster