Fixemu l'autorizazione LDAP à Kubernetes

Fixemu l'autorizazione LDAP à Kubernetes

Un picculu tutoriale nantu à cumu utilizà Keycloak per cunnette Kubernetes à u vostru servitore LDAP è cunfigurà l'importazione di utilizatori è gruppi. Questu vi permetterà di cunfigurà RBAC per i vostri utilizatori è aduprà auth-proxy per prutege Kubernetes Dashboard è altre applicazioni chì ùn sanu micca cumu autorizà.

Installazione di Keycloak

Assumimu chì avete digià un servitore LDAP. Puderia esse Active Directory, FreeIPA, OpenLDAP o qualunque. Se ùn avete micca un servitore LDAP, allora in principiu pudete creà utilizatori direttamente in l'interfaccia di Keycloak, o aduprà fornituri publichi di oidc (Google, Github, Gitlab), u risultatu serà quasi u listessu.

Prima di tuttu, stallà Keycloak stessu, a stallazione pò esse realizatu separatamente, o direttamente à u cluster Kubernetes, per regula, se avete parechji clusters Kubernetes, saria più faciule d'installà separatamente. Per d 'altra banda, pudete sempre aduprà carta di timone ufficiale è installate direttamente in u vostru cluster.

Per almacenà e dati Keycloak, avete bisognu di una basa di dati. U default hè h2 (tutti i dati sò almacenati in u locu), ma hè ancu pussibule di utilizà postgres, mysql o mariadb.
Sè ancu decide di stallà Keycloak separatamente, pudete truvà struzzioni più dettagliate in documentazione ufficiale.

Configurazione di a federazione

Prima di tuttu, creemu un novu regnu. Realm hè u spaziu di a nostra applicazione. Ogni applicazione pò avè u so propiu regnu cù diversi utilizatori è paràmetri d'autorizazione. U regnu maestru hè utilizatu da Keycloak stessu è l'utilizanu per ogni altra cosa hè sbagliatu.

Pulsà Aghjunghjite u regnu

upzione
Value

nomu
kubernetes

Mustrà Name
Kubernetes

Nome di visualizazione HTML
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >

Kubernetes per difettu verifica se l'email di l'utilizatore hè cunfirmatu o micca. Siccomu utilizemu u nostru servitore LDAP, questu verificatu guasi sempre torna false. Disattivemu a rapprisintazioni di sta paràmetra in Kubernetes:

Scopi di u cliente -> Malice -> I cartografi -> email verificatu (sguassà)

Avà criemu a federazione, per questu andemu à:

Federazione d'utilizatori -> Aghjunghjite un fornitore... -> ldap

Eccu un esempiu di configurazione per FreeIPA:

upzione
Value

Console Display Name
freeipa.example.org

Vendeur
Red Hat Directory Server

Attributu UUID LDAP
ipauniqueid

URL di cunnessione
ldaps://freeipa.example.org

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

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

Binding Credential
<password>

Permette l'autentificazione Kerberos:
on

Regnu Kerberos:
EXAMPLE.ORG

Principale di u servitore:
HTTP/[email protected]

tabulazione chjave:
/etc/krb5.keytab

Utente keycloak-svc deve esse creatu in anticipu nantu à u nostru servitore LDAP.

In u casu di Active Directory, simpricimenti selezziunate Venditore: Active Directory è i paràmetri necessarii seranu inseriti automaticamente in a forma.

Pulsà Cruciani

Avà andemu avanti:

Federazione d'utilizatori -> freeipa.example.org -> I cartografi -> Nome

upzione
Value

Ldap attributi
givenName

Avà attivate a mappa di u gruppu:

Federazione d'utilizatori -> freeipa.example.org -> I cartografi -> creà

upzione
Value

nomu
groups

Tipu di mapper
group-ldap-mapper

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

Strategia di ricuperazione di u gruppu d'utilizatori
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE

Questu cumpleta a cunfigurazione di a federazione, andemu à cunfigurà u cliente.

Configurazione di u cliente

Creemu un novu cliente (una applicazione chì riceverà l'utilizatori da Keycloak). Andemu:

clienti -> creà

upzione
Value

ID cliente
kubernetes

Tipu d'Accessu
confidenrial

URL di Root
http://kubernetes.example.org/

URI di redirezzione validi
http://kubernetes.example.org/*

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

Creemu ancu un scopu per i gruppi:

Scopi di u cliente -> creà

upzione
Value

Template
No template

nomu
groups

Percorsu tutale di u gruppu
false

È crea un mapper per elli:

Scopi di u cliente -> i gruppi -> I cartografi -> creà

upzione
Value

nomu
groups

Tipu di Mapper
Group membership

Token Claim Name
groups

Avà avemu bisognu di attivà a mappa di u gruppu in u nostru scopu di u cliente:

clienti -> kubernetes -> Scopi di u cliente -> Scopi di u Client Predefinitu

Scegli i gruppi в Scopi di Clienti dispunibulicliccate Aghjunghjite selezziunate

Avà cunfigurà l'autentificazione di a nostra applicazione, andate à:

clienti -> kubernetes

upzione
Value

Autorizazione attivata
ON

Spingemu salvà è questu cumpleta a cunfigurazione di u cliente, avà nantu à a tabulazione

clienti -> kubernetes -> Credentials

pudete ottene Secret chì avemu aduprà dopu.

Configurazione di Kubernetes

L'installazione di Kubernetes per l'autorizazione OIDC hè abbastanza triviale è micca qualcosa assai cumplicatu. Tuttu ciò chì duvete fà hè di mette u certificatu CA di u vostru servitore OIDC /etc/kubernetes/pki/oidc-ca.pem è aghjunghje l'opzioni necessarii per kube-apiserver.
Per fà questu, aghjurnà /etc/kubernetes/manifests/kube-apiserver.yaml nantu à tutti i vostri maestri:

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

È ancu aghjurnà a cunfigurazione di kubeadm in u cluster per ùn perde micca questi paràmetri durante l'aghjurnamentu:

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

Questu cumpleta a configurazione di Kubernetes. Pudete ripetiri sti passi in tutti i vostri clusters Kubernetes.

Autorizazione iniziale

Dopu sti passi, avete digià un cluster Kubernetes cun l'autorizazione OIDC cunfigurata. L'unicu puntu hè chì i vostri utilizatori ùn anu micca un cliente cunfiguratu, è ancu u so propiu kubeconfig. Per risolve stu prublema, avete bisognu di cunfigurà l'emissione automatica di kubeconfig à l'utilizatori dopu l'autorizazione successu.

Per fà questu, pudete aduprà applicazioni web speciali chì permettenu di autentificà l'utilizatore è dopu scaricate u kubeconfig finitu. Unu di i più convenienti hè Kuberos, vi permette di discrive tutti i clusters Kubernetes in una cunfigurazione è facilmente cambià trà elli.

Per cunfigurà Kuberos, hè abbastanza per descriverà u mudellu per kubeconfig è eseguite cù i seguenti parametri:

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

Per più dettagli vede Lingua latina nantu à Github.

Hè dinù pussibule à aduprà kubelogin s'è vo vulete autorizà direttamente nant'à u urdinatore di l'utilizatori. In questu casu, l'utilizatore aprirà un navigatore cù una forma d'autorizazione in localhost.

U kubeconfig resultante pò esse verificatu nantu à u situ jwt.io. Basta cupià u valore users[].user.auth-provider.config.id-token da u vostru kubeconfig à una forma nantu à u situ è ​​uttene a trascrizione subitu.

Configurazione RBAC

Quandu cunfigurà RBAC, pudete riferite sia à u nome d'utilizatore (campu name in u token jwt) è per un gruppu di utilizatori (campu groups in jwt token). Eccu un esempiu di stabilisce permessi per un gruppu 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

Più esempi per RBAC ponu esse truvati in documentazione ufficiale di Kubernetes

Impostazione di auth-proxy

Ci hè un prughjettu maravigliu keycloak-gatekeeper, chì vi permette di assicurà ogni applicazione permettendu à l'utilizatore per autentificà à u servitore OIDC. Vi mustraraghju cumu pudete cunfigurà cù u Kubernetes Dashboard cum'è un esempiu:

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

Source: www.habr.com

Add a comment