Lidhja e autorizimit LDAP me Kubernetes

Lidhja e autorizimit LDAP me Kubernetes

Një udhëzues i shkurtër për mënyrën se si, duke përdorur Keycloak, mund të lidheni Kubernetes me serverin tuaj LDAP dhe të konfiguroni importimin e përdoruesve dhe grupeve. Kjo do të lejojë konfigurimin e RBAC për përdoruesit tuaj dhe përdorimin e auth-proxy për të mbrojtur Kubernetes Dashboard dhe aplikacione të tjera që nuk dinë të kryejnë autorizimin vetë.

Instalimi i Keycloak

Supozoni se tashmë keni një server LDAP. Kjo mund të jetë Active Directory, FreeIPA, OpenLDAP ose ndonjë gjë tjetër. Nëse nuk keni një server LDAP, mund të krijoni përdorues direkt në ndërfaqen e Keycloak, ose të përdorni ofrues publik oidc (Google, Github, Gitlab), rezultati do të jetë pothuajse i njëjtë.

Së pari, le të instalojmë vetë Keycloak, instalimi mund të realizohet veçmas, si dhe direkt në klasterin Kubernetes; zakonisht, nëse keni disa klasterë Kubernetes, do të ishte më e lehtë ta instaloni veçmas. Nga ana tjetër, gjithmonë mund të përdorni chart-in zyrtar helm dhe ta instaloni atë direkt në klasterin tuaj.

Për ruajtjen e të dhënave të Keycloak ju nevojitet një bazë të dhash. Në mënyrë default përdoret h2 (të dhënat ruhen lokalisht), por është e mundur gjithashtu të përdoret postgres, mysql ose mariadb.
Nëse vendosni të instaloni Keycloak veçmas, do të gjeni udhëzime më të detajuara në dokumenti zyrtar.

Konfigurimi i federatës

SĂ« pari, le tĂ« krijojmĂ« njĂ« realm tĂ« ri. Realm Ă«shtĂ« hapĂ«sira e aplikacionit tonĂ«. Çdo aplikacion mund tĂ« ketĂ« realm tĂ« vet me pĂ«rdorues dhe cilĂ«sime ndihmĂ«se tĂ« ndryshme. Master realm pĂ«rdoret nga vetĂ« Keycloak dhe nuk Ă«shtĂ« e drejtĂ« ta pĂ«rdorni atĂ« pĂ«r ndonjĂ« gjĂ« tjetĂ«r.

Klikoni Shto realm

Opsioni
Vlera

Emri
kubernetes

Emri i Shfaqjes
Kubernetes

Emri i Shfaqjes në HTML
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >

Kubernetes në mënyrë të paracaktuar kontrollon nëse emaili i përdoruesit është konfirmuar apo jo. Duke qenë se ne përdorim një server LDAP të paracaktuar, kjo kontrollim pothuajse gjithmonë do të kthejë false. Le ta çaktivizojmë shfaqjen e këtij parametri në Kubernetes:

KlientĂ«t scopes —> Email —> Mapper —> Email i verifikuar (Fshi)

Tani le të konfigurojmë federatën, për këtë kalojmë në:

Federata e pĂ«rdoruesve —> Shto ofrues
 —> ldap

Ja një shembull konfigurimi për FreeIPA:

Opsioni
Vlera

Emri i Shfaqjes në Konsolë
freeipa.example.org

Të dhënat e ofruesit
Red Hat Directory Server

Atributi UUID të LDAP
ipauniqueid

URL e Lidhjes
ldaps://freeipa.example.org

DN e Përdoruesve
cn=users,cn=accounts,dc=example,dc=org

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

Kredenciali i lidhjes
<password>

Lejo autentifikimin Kerberos:
në

Realm-i Kerberos:
EXAMPLE.ORG

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

KeyTab:
/etc/krb5.keytab

Përdoruesi keycloak-svc duhet të krijohet paraprakisht në serverin tonë LDAP.

Në rastin e Active Directory, mjafton të zgjidhni Shitësi: Active Directory dhe cilësimet e nevojshme do të vendosen automatikisht në formular.

Klikoni Ruaj

Tani kalojmë te:

Federata e pĂ«rdoruesve —> freeipa.example.org —> Mapper —> Emri

Opsioni
Vlera

Attributi Ldap
givenName

Tani aktivizojmë mapimin e grupeve:

Federata e pĂ«rdoruesve —> freeipa.example.org —> Mapper —> Create

Opsioni
Vlera

Emri
groups

Lloji i mapuesit
group-ldap-mapper

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

Strategjia e Marrjes së Grupeve të Përdoruesve
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE

Me këtë mbaron konfigurimi i federatës, kalojmë te konfigurimi i klientit.

Konfigurimi i klientit

Do të krijojmë një klient të ri (aplikacioni që do të marrë përdoruesit nga Keycloak). Kalojmë:

KlientĂ«t —> Create

Opsioni
Vlera

Identifikuesi i Klientit
kubernetes

Lloji i Qasjes
konfidencial

URL e Rrënjës
http://kubernetes.example.org/

URI të Sakta për Ridrejtim
http://kubernetes.example.org/*

URL e Administratorit
http://kubernetes.example.org/

Po ashtu do të krijojmë një skop për grupet:

Skopet e Klientit —> Create

Opsioni
Vlera

Shabllon
Nuk ka shabllon

Emri
groups

Rruga e Plotë e Grupit
false

Dhe do të konfiguroni mapper për to:

Skopet e Klientit —> groups —> Mapper —> Create

Opsioni
Vlera

Emri
groups

Tipi i Mapper-it
Anëtarësia në Grup

Emri i Kërkesës për Token
groups

Tani na nevojitet të aktivizojmë mapimin e grupeve në skopin tonë të klientit:

KlientĂ«t —> kubernetes —> Skopet e Klientit —> Skopet Standard tĂ« Klientit

Zgjidhni groups në Skopet e Disponueshme të Klientit, klikoni Shto të zgjedhurat

Tani do të konfigurojmë autentifikimin e aplikacionit tonë, kalojmë te:

KlientĂ«t —> kubernetes

Opsioni
Vlera

Autorizimi Aktivizuar
ON

Klikojmë ruaj dhe me këtë përfundon konfigurimi i klientit, tani te skeda

KlientĂ«t —> kubernetes —> Kredencialet

do të jeni në gjendje të merrni Secret të cilin do ta përdorim më vonë.

Konfigurimi i Kubernetes

Konfigurimi i Kubernetes për autorizimin OIDC është mjaft i thjeshtë dhe nuk paraqet ndonjë sfidë të madhe. E vetmja gjë që ju nevojitet është të vendosni certifikatën CA të serverit tuaj OIDC në /etc/kubernetes/pki/oidc-ca.pem dhe të shtoni opsionet e nevojshme për kube-apiserver.
Për këtë, përditësoni /etc/kubernetes/manifests/kube-apiserver.yaml në të gjithë masterat tuaj:

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

Po ashtu, përditësoni konfigurimin e kubeadm në klaster, në mënyrë që të mos humbni këto parametra gjatë përditësimit:

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

Me këtë, konfigurimi i Kubernetes përfundon. Ju mund të përsërisni këto veprime në të gjithë klasterët tuaj Kubernetes.

Autorizimi fillestar

Pas këtyre veprimeve, ju do të keni një kluster Kubernetes me autorizimin OIDC të konfiguruar. Një çështje është se përdoruesit tuaj nuk kanë ende një klient të konfiguruar si dhe një kubeconfig të vetin. Për të zgjidhur këtë problem, duhet të konfiguroni dhënien automatike të kubeconfig për përdoruesit pas autorizimit të suksesshëm.

Për këtë mund të përdorni aplikacione speciale në web, të cilat lejojnë autentifikimin e përdoruesit dhe më pas shkarkimin e kubeconfig të gatshëm. Një nga më të përshtatshmet është Kuberos, i cili lejon të përshkruani të gjithë klustërat Kubernetes në një konfigurim dhe të kaloni lehtësisht mes tyre.

Për të konfiguruar Kuberos, mjafton të përshkruani një template për kubeconfig dhe të filloni me parametrat e mëposhtëm:

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

Për më shumë informacion, shihni Përdorimi në Github.

Gjithashtu është e mundur të përdorni kubelogin nëse dëshironi të kryeni autorizimin drejtpërdrejt në kompjuterin e përdoruesit. Në këtë rast, përdoruesit do të hapë një shfletues me formularin e autorizimit në localhost.

Kubeconfig i marrë mund të kontrollohet në faqen jwt.io. Thjesht kopjoni vlerën users[].user.auth-provider.config.id-token nga kubeconfig juaj në formën në faqen e internetit dhe menjëherë merrni shpjegimin.

Konfigurimi i RBAC

Në konfigurimin e RBAC mund të referoheni si për emrin e përdoruesit (fusha emri në jwt-token), ashtu edhe për grupin e përdoruesve (fusha groups në jwt-token). Ja një shembull i konfigurimit të të drejtave për grupin 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

Më shumë shembuj për RBAC mund të gjenden në dokumentacionit zyrtar të Kubernetes

Konfigurimi i auth-proxy

Ka një projekt të shkëlqyer keycloak-gatekeeper, i cili lejon mbrojtjen e çdo aplikacioni, duke i ofruar përdoruesit mundësinë për t'u autentikuar në serverin OIDC. Do t'ju tregoj si ta konfiguroni atë me shembullin e Kubernetes Dashboard:

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

Burimi: habr.com

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster