Lisame LDAP-autentimise Kubernetesesse.

Lisame LDAP-autentimise Kubernetesesse.

LĂŒhike juhend, kuidas kasutada Keycloak'i Kubernetes'e sidumiseks teie LDAP-serveriga ning seadistada kasutajate ja rĂŒhmade importimist. See vĂ”imaldab seadistada RBAC teie kasutajatele ning kasutada auth-proxy't, et kaitsta Kubernetes Dashboardi ja teisi rakendusi, mis ei suuda iseseisvalt autoriseerimist teostada.

Keycloak'i paigaldamine

Oletame, et teil on juba LDAP-server. See vÔib olla Active Directory, FreeIPA, OpenLDAP vÔi midagi muud. Kui teil ei ole LDAP-serverit, saate pÔhimÔtteliselt luua kasutajaid otse Keycloak'i liideses vÔi kasutada avalikke oidc-teenuse pakkujaid (Google, Github, Gitlab), tulemus on peaaegu sama.

Esmalt paigaldame Keycloak'i, paigaldamine vĂ”ib toimuda eraldi vĂ”i otse Kubernetes'e klastri sisse; tavaliselt kui teil on mitu Kubernetes'e klastri, oleks lihtsam paigaldada see eraldi. Teisest kĂŒljest vĂ”ite alati kasutada ametlikku helm-chart'i ja paigaldada selle otse oma klastrisse.

Keycloak'i andmete salvestamiseks vajate andmebaasi. Vaikimisi kasutatakse h2 (kÔik andmed salvestatakse kohapeal), kuid samuti on vÔimalik kasutada postgres, mysql vÔi mariadb.
Kui te siiski otsustate installida Keycloak eraldi, leiate pÔhjalikumad juhised ametlikus dokumentatsioonis.

Föderatsiooni seadistamine

Esimese asjana loome uue realm'i. Realm on meie rakenduse ruum. Igal rakendusel vÔib olla oma realm, millel on erinevad kasutajad ja autoriseerimise seaded. Master realm'i kasutab Keycloak ise ja selle kasutamine millegi muu jaoks pole sobiv.

Vajutame Lisa realm

Valik
VÀÀrtus

Nimi
kubernetes

Kuva nimi
Kubernetes

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

Kubernetes kontrollib, kas kasutaja email on kinnitatud. Kuna kasutame oma LDAP-serverit, siis tagastab see kontroll tavaliselt false. LĂŒlitame selle parameetri Kubernetes'is kuvamise vĂ€lja:

Kliendi ulatused —> Email —> Mapperid —> Email kinnitatud (Kustuta)

NĂŒĂŒd seadistame föderatsiooni, selleks liigume jĂ€rgmisse kohta:

Kasutaja föderatsioon —> Lisa pakkuja
 —> ldap

Toon nÀite FreeIPA seadistamisest:

Valik
VÀÀrtus

Konsoli kuvana nimi
freeipa.example.org

Tootja
Red Hat Directory Server

UUID LDAP atribuut
ipauniqueid

Ühenduse URL
ldaps://freeipa.example.org

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

Luba Kerberos autentimine:
on

Kerberos Realm:
EXAMPLE.ORG

Server Principal:
HTTP/freeipa.example.org@EXAMPLE.ORG

KeyTab:
/etc/krb5.keytab

Kasutaja keycloak-svc peab meie LDAP-serveris eelnevalt looma.

Active Directory puhul piisab lihtsalt valikust Tootja: Active Directory ja vajalikud seadistused sisestatakse vormi automaatselt.

Vajutame Salvesta

Liigume edasi:

Kasutaja föderatsioon —> freeipa.example.org —> Mapperid —> Eesnimi

Valik
VÀÀrtus

Ldap atribuut
givenName

NĂŒĂŒd aktiveerime grupi kaardistamise:

Kasutaja föderatsioon —> freeipa.example.org —> Mapperid —> Loo

Valik
VÀÀrtus

Nimi
groups

Mappi tĂŒĂŒp
group-ldap-mapper

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

Kasutajagruppide hankimise strateegia
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE

Sellega on föderatsiooni seadistus lÔpetatud, liigutame kliendi seadistusse.

Kliendi seadistus

Loodame uue kliendi (rakenduse, mis saab kasutajaid Keycloakist). Liigume:

Kliendid —> Loo

Valik
VÀÀrtus

Kliendi ID
kubernetes

LigipÀÀsu tĂŒĂŒp
confidential

PÔhi URL
http://kubernetes.example.org/

Kehtivad ĂŒmbersuunamise URId
http://kubernetes.example.org/*

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

Loodame ka grupiteenuse:

Kliendi ulatused —> Loo

Valik
VÀÀrtus

Mall
Malli ei ole

Nimi
groups

TĂ€ielik grupi tee
false

Ja seadistame kaardisti nende jaoks:

Kliendi ulatused —> groups —> Mapperid —> Loo

Valik
VÀÀrtus

Nimi
groups

Mappi tĂŒĂŒp
Grupi liikmelisus

Tokeni vÀite nimi
groups

NĂŒĂŒd peame rakendama grupi kaardistamise meie kliendi ulatuses:

Kliendid —> kubernetes —> Kliendi ulatused —> Vaikimisi kliendi ulatused

Valime groups ĂŒhes Saadaval kliendi ulatused, klikkige Lisa valitud

NĂŒĂŒd seadistame meie rakenduse autentimise, liigume:

Kliendid —> kubernetes

Valik
VÀÀrtus

Autoriseerimine lubatud
KAS

Kliki salvesta ja sellega on kliendi seadistus lĂ”petatud, nĂŒĂŒd vahekaardil

Kliendid —> kubernetes —> Krediidid

saate saada Saladus mida me hiljem kasutame.

Kubernetesi seadistamine

Kubernetes'i seadistus OIDC autoriseerimiseks on piisavalt triviaalne ja ei ole midagi keerulist. KÔik, mida vajate, on oma OIDC serveri CA-sertifikaadi paigutamine /etc/kubernetes/pki/oidc-ca.pem ja vajalikud valikud kube-apiserverile lisamine.
Selleks vÀrskendage /etc/kubernetes/manifests/kube-apiserver.yaml kÔigis teie klastrites:

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

Ja uuendage ka kubeadm konfiguratsiooni klastris, et neid seadeid vÀrskenduse kÀigus mitte kaotada:

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

Kubernetesi seadistamine on nĂŒĂŒd lĂ”petatud. VĂ”ite samu toiminguid korrata kĂ”igis teie Kubernetesi klastrites.

Algseltautentimine

PĂ€rast neid toiminguid on teil Kubernetesi klaster, millel on seadistatud OIDC-autentimine. Ainult ĂŒks asi on see, et teie kasutajatel pole veel seadistatud klienti ega oma kubeconfig'i. Selle probleemi lahendamiseks tuleb automaatselt anda kasutajatele kubeconfig pĂ€rast eduka autentimise.

Selleks vĂ”ib kasutada spetsiaalseid veebirakendusi, mis vĂ”imaldavad autentida kasutajat ja seejĂ€rel alla laadida valmis kubeconfig'i. Üks mugavamaid on Kuberos, see vĂ”imaldab ĂŒhes konfiguratsioonis kirjeldada kĂ”iki Kubernetes-klastreid ja lihtsalt nende vahel vahetada.

Kuberos'i seadistamiseks tuleb lihtsalt kirjeldada template'i kubeconfig'i jaoks ja kÀivitada jÀrgmiste parameetritega:

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

Rohkem ĂŒksikasjade saamiseks vaadake Kasutus GitHubist.

Samuti on vÔimalik kasutada kubelogin kui soovite autentimist teostada otse kasutaja arvutis. Sellisel juhul avaneb kasutajal brauseriaken, kus on sisselogimisvorm localhostil.

Saadud kubeconfig'i saab kontrollida veebisaidil jwt.io. Lihtsalt kopeerige vÀÀrtus users[].user.auth-provider.config.id-token oma kubeconfig'ist vormi veebisaidil ja saate kohe dekrĂŒpteerimise.

RBAC-i seadistamine

RBAC-i seadistamisel on vÔimalik viidata nii kasutajanimele (vÀlja name jwt-tokenis), kui ka kasutajagruppidele (vÀlja groups jwt-tokenis). Siin on nÀidis Ôiguste seadistamiseks grupile 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

RBACi rohkem nÀiteid leiate Kubernetes ametlikest dokumentidest

auth-proxy seadistamine

On olemas suurepÀrane projekt keycloak-gatekeeper, mis vÔimaldab kaitsta mis tahes rakendust, andes kasutajale vÔimaluse autentida end OIDC-serveris. NÀitan, kuidas seda seadistada Kubernetes Dashboardi nÀitel:

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

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster