Seome LDAP-autoriseerimise Kubernetesega

Seome LDAP-autoriseerimise Kubernetesega

LĂŒhike juhend selle kohta, kuidas kasutada Keycloaki, et siduda Kubernetes teie LDAP-serveriga ja seadistada kasutajate ja rĂŒhmade importimist. See vĂ”imaldab konfigureerida RBAC teie kasutajate jaoks ja kasutada auth-proxy't, et kaitsta Kubernetes Dashboardi ja teisi rakendusi, mis ei oska iseseisvalt autoriseerida.

Keycloaki paigaldamine

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

Esmalt paigaldame Keycloaki, paigaldamine vÔib toimuda eraldi vÔi otse Kubernetes-klastris, tavaliselt kui teil on mitu Kubernetes-klastrit, oleks lihtsam paigaldada see eraldi. Teiselt poolt saate alati kasutada ametlikku helm-graafikut ja paigaldada selle otse oma klastrisse.

Keycloaki andmete salvestamiseks vajate andmebaasi. Vaikimisi kasutatakse h2 (kÔik andmed salvestatakse kohapeal), kuid vÔimalik on kasutada ka postgres, mysql vÔi mariadb.
Kui siiski otsustate Keycloaki eraldi paigaldada, leiate ĂŒksikasjalikumad juhised ametlikust dokumentatsioonist.

Föderatsiooni seadistamine

Esmalt loome uue realm'i. Realm on meie rakenduse ruum. Igal rakendusel vÔib olla oma realm erinevate kasutajate ja autoriseerimiseseadeustega. Master realm'i kasutab Keycloak ise ja selle kasutamine millegi muuna pole Ôige.

KlÔpsame Lisa realm

Valik
VÀÀrtus

Nimi
kubernetes

Kuvamise nimi
Kubernetes

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

Kubernetes kontrollib vaikimisi, kas kasutaja e-kiri on kinnitatud vĂ”i mitte. Kuna kasutame oma LDAP-serverit, siis see kontroll tagastab peaaegu alati false. LĂŒlitame selle parameetri kuvamise Kuberneteses vĂ€lja:

Kliendi ulatuste —> E-post —> Mapper'id —> E-kiri on kinnitatud (Kustuta)

NĂŒĂŒd seadistame föderatsiooni, selleks liigume:

Kasutaja föderatsioon —> Lisa teenusepakkuja
 —> ldap

Toon nÀite FreeIPA seadistuse kohta:

Valik
VÀÀrtus

Konsoli kuvamise nimi
freeipa.example.org

Tootja
Red Hat Directory Server

UUID LDAP atribuudi
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>

Lubage Kerberose autentimine:
on

Kerberose realm:
EXAMPLE.ORG

Serveri peamine:
HTTP/freeipa.example.org@EXAMPLE.ORG

KeyTab:
/etc/krb5.keytab

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

Active Directory puhul piisab lihtsalt valimisest Tootja: Active Directory ja vajalikud seaded tÀiendavad vormi automaatselt.

KlÔpsame Salvesta

Liigume edasi:

Kasutaja föderatsioon —> freeipa.example.org —> Mapper'id —> Eesnimi

Valik
VÀÀrtus

Ldap atribuut
givenName

NĂŒĂŒd lĂŒlitame sisse grupide mappimise:

Kasutaja föderatsioon —> freeipa.example.org —> Mapper'id —> Loo

Valik
VÀÀrtus

Nimi
groups

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

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

Kasutaja Gruppide Retrieve Strateegia
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE

Sellega on föderatsiooni seadistus lÔpetatud, liikume kliendi seadistamise juurde.

Kliendi seadistamine

Loome uue kliendi (rakenduse, mis saavad kasutajaid Keycloakist). Liigume:

Kliendid —> Loo

Valik
VÀÀrtus

Client ID
kubernetes

JuurdepÀÀsu tĂŒĂŒp
konfidentsiaalne

Juurlink
http://kubernetes.example.org/

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

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

Samuti loome grupide jaoks scope:

Kliendi Scopes —> Loo

Valik
VÀÀrtus

Mall
Ilma mallita

Nimi
groups

TĂ€ielik grupitee
false

Ja seadistame nende jaoks mappimise:

Kliendi Scopes —> groups —> Mapper'id —> Loo

Valik
VÀÀrtus

Nimi
groups

Mappimise tĂŒĂŒp
Grupi kuuluvus

Tokeni kaitsenimi
groups

NĂŒĂŒd peame lĂŒlitama grupide mappimise meie kliendièŒƒć›Ž:

Kliendid —> kubernetes —> Kliendi Scopes —> Vaikimisi kliendi scoperid

Valime groups ja Saadaval kliendi scoperid, klÔpsake Lisa valitud

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

Kliendid —> kubernetes

Valik
VÀÀrtus

Autoriseerimine lubatud
KAS

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

Kliendid —> kubernetes —> Krediteerimine

saate hankida Secret mida me hiljem kasutame.

Kubernetes'e seadistamine

Kubernetes'i seadistamine OIDC-autoriseerimiseks on piisavalt triviaalne ja ei ole eriti keeruline. KÔik, mis teil on vaja, on panna CA-sertifikaat teie OIDC-serverist /etc/kubernetes/pki/oidc-ca.pem ja lisada vajalikud valikud kube-apiserverile.
Selleks vÀrskendage /etc/kubernetes/manifests/kube-apiserver.yaml kÔikidel teie juhtmasteritel:

...
spec:
  konteinerid:
  - kÀsk:
    - 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 vÀrskendage ka kubeadm konfiguuri klastris, et neid seadeid uuendamise ajal 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
...

Sellega on Kubernetes seadistus lÔpetatud. Saate samu samme kordata kÔikides oma Kubernetes klastrites.

Esialgne autoriseerimine

PÀrast neid toiminguid on teil juba Kubernetes klaster seadistatud OIDC-autoriseerimisega. Ainult see, et teie kasutajatel ei ole veel seadistatud klienti nagu ka oma kubeconfigi. Selle probleemi lahendamiseks tuleb seadistada automaatne kubeconfigi andmine kasutajatele pÀrast eduka autoriseerimise.

Selleks vĂ”ite kasutada spetsiaalseid veebirakendusi, mis vĂ”imaldavad kasutajakontot autentida ja seejĂ€rel valmis kubeconfigi alla laadida. Üks mugavamaid on Kuberos, see vĂ”imaldab ĂŒhes konfiguratsioonis kirjeldada kĂ”iki Kubernetes-klastrite ja kergesti nende vahel lĂŒlituda.

Kuberos seadistamiseks on piisav, kui kirjeldada template kubeconfigile ja kÀivitada jÀrgmiste parameetritega:

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

Rohkem ĂŒksikasjade saamiseks vaadake Kasutus GitHubis.

Samuti on vÔimalik kasutada kubelogin , kui soovite autentida otse kasutaja arvutis. Sel juhul avaneb kasutajale brauseris autentimisvorm localhostis.

Saadud kubeconfigi saab kontrollida veebisaidil jwt.io. Lihtsalt kopeerige vÀÀrtus users[].user.auth-provider.config.id-token oma kubeconfigist vormi ja saate kohe tÔlgenduse.

RBAC seadistamine

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

Rohkem nÀiteid RBAC kohta leiate Kubernetes'e ametlikust dokumentatsioonist

auth-proxy seadistamine

On olemas suurepÀrane projekt keycloak-gatekeeper, mis kaitseb igasuguseid rakendusi, pakkudes kasutajale vÔimalust autentida 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 hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster