Kinnitame LDAP-i autoriseerimise Kubernetesiga

Kinnitame LDAP-i autoriseerimise Kubernetesiga

Lühike õpetus selle kohta, kuidas kasutada Keycloaki Kubernetese ühendamiseks oma LDAP-serveriga ning kasutajate ja rühmade importimise konfigureerimiseks. See võimaldab teil konfigureerida oma kasutajate jaoks RBAC-i ja kasutada autentimispuhverserverit, et kaitsta Kubernetes Dashboardi ja muid rakendusi, mis ei saa end autentida.

Võtmekatte paigaldamine

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

Kõigepealt paigaldame Keycloaki ise.Installi saab teha eraldi või otse Kubernetese klastrisse.Kui Sul on mitu Kubernetese klastrit, siis oleks reeglina lihtsam eraldi paigaldada. Teisest küljest saate seda alati kasutada ametlik roolikaart ja installige see otse oma klastrisse.

Keycloaki andmete salvestamiseks vajate andmebaasi. Vaikimisi on h2 (kõik andmed salvestatakse lokaalselt), kuid seda on võimalik ka kasutada postgres, mysql või mariadb.
Kui otsustate siiski Keycloaki eraldi installida, leiate täpsemad juhised aadressilt ametlik dokumentatsioon.

Föderatsiooni seadistamine

Kõigepealt loome uue valdkonna. Valdkond on meie rakenduse ruum. Igal rakendusel võib olla oma valdkond erinevate kasutajate ja autoriseerimisseadetega. Põhivaldkonda kasutab Keycloak ise ja on vale kasutada seda millegi muu jaoks.

Vajuta siia Lisa valdkond

valik
Väärtus

Nimi
kubernetes

Näita Nimi
Kubernetes

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

Vaikimisi kontrollib Kubernetes, kas kasutaja meiliaadress on kinnitatud või mitte. Kuna kasutame oma LDAP-serverit, naaseb see kontroll peaaegu alati false. Keelame selle valiku esituse Kubernetesis:

Kliendi ulatused -> E-POST -> Kaardistajad -> E-post kinnitatud (Kustuta)

Nüüd loome föderatsiooni; selleks minge aadressile:

Kasutajate liit -> Lisa teenusepakkuja… -> ldap

Siin on näide FreeIPA seadetest:

valik
Väärtus

Konsooli kuvatav nimi
freeipa.example.org

Müüja
Red Hat Directory Server

UUID LDAP atribuut
ipauniqueid

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

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

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

Mandaadi sidumine
<password>

Luba Kerberose autentimine:
on

Kerberose valdus:
EXAMPLE.ORG

Serveri juht:
HTTP/[email protected]

KeyTab:
/etc/krb5.keytab

Kasutaja keycloak-svc tuleb meie LDAP-serveris eelnevalt luua.

Active Directory puhul peate lihtsalt valima Tarnija: Active Directory ja vajalikud seadistused sisestatakse vormi automaatselt.

Vajuta siia Säästa

Liigume nüüd edasi:

Kasutajate liit -> freeipa.example.org -> Kaardistajad -> Eesnimi

valik
Väärtus

Ldap atribuut
givenName

Nüüd lubame rühma kaardistamise:

Kasutajate liit -> freeipa.example.org -> Kaardistajad -> Looma

valik
Väärtus

Nimi
groups

Kaardistaja tüüp
group-ldap-mapper

LDAP rühmad DN
cn=groups,cn=accounts,dc=example,dc=org

Kasutajarühmad toovad alla strateegia
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE

Nüüd, kui föderatsiooni seadistamine on lõpetatud, jätkame kliendi seadistamisega.

Kliendi seadistamine

Loome uue kliendi (rakendus, mis võtab kasutajaid vastu Keycloakist). Liigume edasi:

Kliendid -> Looma

valik
Väärtus

kliendi ID
kubernetes

Juurdepääsu tüüp
confidenrial

Juur-URL
http://kubernetes.example.org/

Kehtivad ümbersuunamise URI-d
http://kubernetes.example.org/*

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

Loome ka rühmade jaoks ulatuse:

Kliendi ulatused -> Looma

valik
Väärtus

Šabloon
No template

Nimi
groups

Täielik rühmatee
false

Ja koostage neile kaardistaja:

Kliendi ulatused -> rühmade -> Kaardistajad -> Looma

valik
Väärtus

Nimi
groups

Kaardistaja tüüp
Group membership

Token Claim Name
groups

Nüüd peame lubama oma kliendi ulatuses kaardistamisrühma:

Kliendid -> kubernetes -> Kliendi ulatused -> Kliendi vaikeulatused

valima rühmade в Saadaolevad kliendi ulatusedklõps Lisa valitud

Nüüd konfigureerime oma rakenduse autentimise, minge aadressile:

Kliendid -> kubernetes

valik
Väärtus

Autoriseerimine lubatud
ON

Vajutame välja arvatud ja sellega on kliendi seadistamine lõpetatud, nüüd vahekaardil

Kliendid -> kubernetes -> volikiri

sa võid saada Saladus mida me edaspidi kasutame.

Kubernetese konfigureerimine

Kubernetese seadistamine OIDC autoriseerimiseks on üsna triviaalne ja mitte eriti keeruline. Kõik, mida pead tegema, on sisestada oma OIDC-serveri CA-sertifikaat /etc/kubernetes/pki/oidc-ca.pem ja lisage kube-apiserveri jaoks vajalikud valikud.
Selleks värskendage /etc/kubernetes/manifests/kube-apiserver.yaml kõigi oma meistrite kohta:

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

Samuti värskendage klastris kubeadmi konfiguratsiooni, et mitte kaotada värskendamisel järgmisi sätteid:

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

See viib Kubernetese seadistamise lõpule. Saate neid samme korrata kõigis oma Kubernetese klastrites.

Esialgne luba

Pärast neid samme on teil juba konfigureeritud OIDC-volitusega Kubernetese klaster. Ainus asi on see, et teie kasutajatel pole veel konfigureeritud klienti ega oma kubeconfigi. Selle probleemi lahendamiseks peate pärast edukat autoriseerimist konfigureerima kubeconfigi automaatse levitamise kasutajatele.

Selleks saab kasutada spetsiaalseid veebirakendusi, mis võimaldavad kasutajat autentida ja seejärel alla laadida valmis kubeconfigi. Üks mugavamaid on Kuberos, võimaldab see kirjeldada kõiki Kubernetese klastreid ühes konfiguratsioonis ja hõlpsalt nende vahel vahetada.

Kuberose konfigureerimiseks kirjeldage lihtsalt kubeconfigi malli ja käivitage see järgmiste parameetritega:

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

Täpsema teabe saamiseks vt Kasutus Githubis.

Samuti on võimalik kasutada kubelogin kui soovite autoriseerida otse kasutaja arvutis. Sel juhul avab kasutaja brauseri kohaliku hosti autoriseerimisvormiga.

Saadud kubeconfigi saab kontrollida veebisaidil jwt.io. Lihtsalt kopeerige väärtus users[].user.auth-provider.config.id-token kubeconfigist veebisaidil olevale vormile ja saate kohe ärakirja.

RBAC seadistamine

RBAC-i seadistamisel võite viidata nii kasutajanimele (väli name jwt-märgis) ja kasutajarühma kohta (väli groups jwt märgis). Siin on näide rühma õiguste seadistamisest 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

Rohkem näiteid RBAC kohta leiate aadressilt ametlik Kubernetese dokumentatsioon

Auth-puhverserveri seadistamine

Seal on suurepärane projekt võtmekepp-väravavaht, mis võimaldab teil kaitsta kõiki rakendusi, pakkudes kasutajale OIDC-serveri autentimise võimalust. Näitan teile, kuidas seda konfigureerida, kasutades näitena Kubernetes Dashboardi:

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

Allikas: www.habr.com

Lisa kommentaar