Lidhni autorizimin LDAP me Kubernetes

Lidhni autorizimin LDAP me Kubernetes

Një udhëzues i vogël se si mund të lidhni Kubernetes me serverin tuaj LDAP duke përdorur Keycloak dhe si të konfiguroni importimin e përdoruesve dhe grupeve. Kjo do t'ju lejojë të konfiguroni RBAC për përdoruesit tuaj dhe të përdorni auth-proxy për të mbrojtur Kubernetes Dashboard dhe aplikacione të tjera që nuk dinë të realizojnë autorizimin vetë.

Instalimi i Keycloak

Supozoni që keni një server LDAP. Ky mund të jetë Active Directory, FreeIPA, OpenLDAP apo diçka tjetër. Nëse nuk keni një server LDAP, në parim 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, do të instalojmë Keycloak-in, instalimi mund të kryhet ndaras ose menjëherë në klasterin Kubernetes. Në përgjithësi, nëse keni disa klasterë Kubernetes, do të ishte më e lehtë ta instaloni ndaras. Nga ana tjetër, gjithmonë mund të përdorni chart-in zyrtar helm dhe ta instaloni direkt në klasterin tuaj.

Për ruajtjen e të dhënave të Keycloak-it, do t'ju nevojitet një bazë të dhënash. Nga e drejta, përdoret h2 (të gjitha të dhënat ruhen lokal), por është e mundur të përdorni gjithashtu postgres, mysql ose mariadb.
Nëse vendosni të instaloni Keycloak ndaras, do të gjeni udhëzime më të detajuara në dokumentacionin zyrtar.

Konfigurimi i federatës

SĂ« pari, do 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 konfigurime tĂ« ndryshme tĂ« autorizimit. Realm-i Master pĂ«rdoret nga Keycloak vetĂ« dhe pĂ«rdorimi i tij pĂ«r diçka tjetĂ«r Ă«shtĂ« i gabuar.

Klikoni Shto realm

Opsioni
Vlera

Emri
kubernetes

Emri i Shfaqjes
Kubernetes

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

Kubernetes në parim kontrollon nëse përdoruesi ka verifikuar email-in e tij ose jo. Sepse po përdorim serverin tonë LDAP, kjo verifikim do të kthejë pothuajse gjithmonë false. Le të çaktivizojmë shfaqjen e këtij parametri në Kubernetes:

PĂ«rmasat e klientĂ«ve —> Email —> Mappers —> Email i verifikuar (Fshij)

Tani do të konfiguroni federatën, për këtë do 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

Prodhuesi
Red Hat Directory Server

Atributi UUID LDAP
ipauniqueid

URL i lidhjes
ldaps://freeipa.example.org

DN-të e përdoruesve
cn=users,cn=accounts,dc=example,dc=org

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

Kredenciali i lidhjes
<password>

Lejo autentifikimin Kerberos:
në

Rrethi Kerberos:
EXAMPLE.ORG

Princi i Serverit:
HTTP/freeipa.example.org@EXAMPLE.ORG

KeyTab:
/etc/krb5.keytab

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

Në rastin e Active Directory, mjafton të zgjidhni Ofruesi: Active Directory dhe cilat cilësime do të plotësohen automatikisht në formë.

Klikoni Ruaj

Tani le të kalojmë te:

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

Opsioni
Vlera

Atributi Ldap
emri i dhënë

Tani do të aktivizojmë mapping-un e grupeve:

Federata e pĂ«rdoruesve —> freeipa.example.org —> Mappers —> Krijo

Opsioni
Vlera

Emri
grupet

Tipi i Mapper-it
mapper-grup-ldap

LDAP Groups DN
cn=grupet,cn=llogaritë,dc=example,dc=org

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

Me këtë përfundon konfigurimi i federatës, le të 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ë te:

KlientĂ«t —> Krijo

Opsioni
Vlera

ID e Klientit
kubernetes

Tipi i Qasjes
konfidencial

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

URI-të e Miratuara të Shkarkimit
http://kubernetes.example.org/*

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

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

Shkala e Klientit —> Krijo

Opsioni
Vlera

Shablloni
Asnjë shabllon

Emri
grupet

Rruga e plotë e grupit
false

Dhe do të konfiguroni mapper-in për to:

Shkala e Klientit —> grupet —> Mappers —> Krijo

Opsioni
Vlera

Emri
grupet

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

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

Tani na nevojitet të aktivizojmë mapping-un e grupeve në shkallën tonë të klientit:

KlientĂ«t —> kubernetes —> Shkala e Klientit —> ShkallĂ«t e Klientit tĂ« Paracaktuara

Zgjidhni grupet në Shkallët e Klientit në Disponibël, klikojmë Shto të përzgjedhurat

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

KlientĂ«t —> kubernetes

Opsioni
Vlera

Autorizimi i Aktivizuar
PO

Shtypni ruaj dhe kështu përfundon konfigurimi i klientit, tani në skedën

KlientĂ«t —> kubernetes —> Kredencialet

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

Konfigurimi i Kubernetes

Konfigurimi i Kubernetes për autorizimin OIDC është mjaft i thjeshtë dhe nuk është diçka shumë e komplikuar. E gjithë çfarë ju nevojitet është të vendosni CA-në e sertifikatës së serverit tuaj OIDC në /etc/kubernetes/pki/oidc-ca.pem dhe të shtoni opsionet e nevojshme për kube-apiserver.
Për këtë, azhurnoni /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=grupet
    - --oidc-issuer-url=https:\/\/keycloak.example.org\/auth\/realms\/kubernetes
    - --oidc-username-claim=email
...

Gjithashtu azhurnoni konfigurimin e kubeadm në klasër, për të mos humbur këto konfigurime gjatë azhurnimeve:

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: grupet
        oidc-issuer-url: https:\/\/keycloak.example.org\/auth\/realms\/kubernetes
        oidc-username-claim: email
...

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

Autorizimi Fillestar

Pas këtyre veprimeve do të keni një klasër Kubernetes me autorizim OIDC të konfiguruar. Një nga gjërat e vetme është se përdoruesit tuaj ende nuk kanë një klient të konfiguruar as 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ërdoren aplikacione të veçanta web, që lejojnë autentifikimin e përdoruesit dhe më pas shkarkimin e kubeconfig të gatshëm. Një nga më të lehtat është Kuberos, ai lejon në një konfigurim të përshkruhet të gjitha Kubernetes-krathet dhe të kaloni lehtësisht midis tyre.

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

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

Për informacion më të detajuar shihni Përdorimi në Github.

Gjithashtu është e mundur të përdorni kubelogin nëse dëshironi të bëni autentifikimin direkt në kompjuterin e përdoruesit. Në këtë rast, përdoruesi do të hapë një shfletues me formën e autentifikimit 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ë faqe dhe menjëherë do të merrni dekodimin.

Konfigurimi i RBAC

Gjatë konfigurimit të RBAC mund të referoheni si në emrin e përdoruesit (në fushën emri në jwt-token), ashtu edhe në grupin e përdoruesve (në fushën grupet 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 të mbrohet çdo aplikacion, duke i dhënë përdoruesit mundësinë të autentifikohet në OIDC-server. Do të tregoj se si mund ta konfiguroj atë duke përdorur 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

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster