Aħna naqblu l-awtorizzazzjoni LDAP għal Kubernetes

Aħna naqblu l-awtorizzazzjoni LDAP għal Kubernetes

Tutorial qasir dwar kif tista' tuża Keycloak biex tikkonnettja Kubernetes mas-server LDAP tiegħek u tikkonfigura l-importazzjoni ta' utenti u gruppi. Dan jippermettilek tikkonfigura RBAC għall-utenti tiegħek u tuża auth-proxy biex tipproteġi Kubernetes Dashboard u applikazzjonijiet oħra li ma jistgħux jawtentikaw lilhom infushom.

Installazzjoni Keycloak

Ejja nassumu li diġà għandek server LDAP. Dan jista 'jkun Active Directory, FreeIPA, OpenLDAP jew xi ħaġa oħra. Jekk ma jkollokx server LDAP, allura fil-prinċipju tista 'toħloq utenti direttament fl-interface Keycloak, jew tuża fornituri pubbliċi tal-oidc (Google, Github, Gitlab), ir-riżultat ikun kważi l-istess.

L-ewwelnett, ejja ninstallaw Keycloak innifsu.L-installazzjoni tista 'titwettaq separatament jew direttament fi cluster Kubernetes.Bħala regola, jekk għandek diversi clusters Kubernetes, ikun aktar faċli li tinstallah separatament. Min-naħa l-oħra dejjem tista 'tuża chart tat-tmun uffiċjali u tinstallah direttament fil-cluster tiegħek.

Biex taħżen id-data Keycloak ser ikollok bżonn database. Default huwa h2 (id-dejta kollha hija maħżuna lokalment), iżda huwa wkoll possibbli li tintuża postgres, mysql jew mariadb.
Jekk xorta tiddeċiedi li tinstalla Keycloak separatament, issib struzzjonijiet aktar dettaljati fi dokumentazzjoni uffiċjali.

Setup tal-Federazzjoni

L-ewwelnett, ejja noħolqu qasam ġdid. L-isfera hija l-ispazju tal-applikazzjoni tagħna. Kull applikazzjoni jista 'jkollha l-isfera tagħha stess b'utenti differenti u settings ta' awtorizzazzjoni. L-isfera Master tintuża minn Keycloak innifsu u huwa ħażin li tużah għal kull ħaġa oħra.

Imbotta Żid isfera

Għażla
valur

isem
kubernetes

wiri Isem
Kubernetes

Isem tal-Wiri HTML
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >

Kubernetes awtomatikament jiċċekkja jekk l-email tal-utent hijiex ikkonfermata jew le. Peress li aħna nużaw is-server LDAP tagħna stess, dan il-kontroll kważi dejjem jerġa' lura false. Ejja tiddiżattiva r-rappreżentazzjoni ta' din l-għażla f'Kubernetes:

Ambiti tal-klijenti -> email -> Mappers -> Email verifikata (Ħassar)

Issa ejja nwaqqfu l-federazzjoni; biex tagħmel dan, mur fuq:

Federazzjoni tal-utenti -> Żid il-fornitur... -> LDAP

Hawn eżempju ta 'settings għal FreeIPA:

Għażla
valur

Isem tal-Wiri tal-Konsola
freeipa.example.org

Vendor
Red Hat Directory Server

Attribut UUID LDAP
ipauniqueid

URL tal-konnessjoni
ldaps://freeipa.example.org

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

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

Irbit Kredenzjali
<password>

Ħalli l-awtentikazzjoni Kerberos:
on

L-Isfera ta' Kerberos:
EXAMPLE.ORG

Prinċipal tas-Server:
HTTP/[email protected]

KeyTab:
/etc/krb5.keytab

Utent keycloak-svc jeħtieġ li jinħolqu minn qabel fuq is-server LDAP tagħna.

Fil-każ ta 'Active Directory, għandek bżonn biss li tagħżel Bejjiegħa: Direttorju Attiv u s-settings meħtieġa jiddaħħlu fil-formola awtomatikament.

Imbotta Ħlief

Issa ejja nkomplu:

Federazzjoni tal-utenti -> freeipa.example.org -> Mappers -> Isem

Għażla
valur

Attribut Ldap
givenName

Issa ejja nippermettu l-immappjar tal-grupp:

Federazzjoni tal-utenti -> freeipa.example.org -> Mappers -> Oħloq

Għażla
valur

isem
groups

Tip mapper
group-ldap-mapper

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

Gruppi ta 'Utenti Irkupra Strateġija
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE

Issa li s-setup tal-federazzjoni hija kompluta, ejja ngħaddu għat-twaqqif tal-klijent.

Setup tal-klijent

Ejja noħolqu klijent ġdid (applikazzjoni li se tirċievi utenti minn Keycloak). Ejja nkomplu:

Klijenti -> Oħloq

Għażla
valur

ID tal-Klijent
kubernetes

Tip ta 'Aċċess
confidenrial

URL tal-Għerq
http://kubernetes.example.org/

URIs validi ta' indirizz mill-ġdid
http://kubernetes.example.org/*

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

Ejja noħolqu wkoll ambitu għal gruppi:

Ambiti tal-Klijent -> Oħloq

Għażla
valur

Template
No template

isem
groups

Mogħdija tal-grupp sħiħ
false

U waqqaf mapper għalihom:

Ambiti tal-Klijent -> gruppi -> Mappers -> Oħloq

Għażla
valur

isem
groups

Tip ta' Mapper
Group membership

Isem talba tat-Token
groups

Issa rridu nippermettu l-grupp tal-mapping fl-ambitu tal-klijent tagħna:

Klijenti -> kubernetes -> Ambiti tal-Klijent -> Ambiti tal-Klijent Default

Agħżel gruppi в Ambiti tal-Klijent Disponibbli, agħfas Żid magħżula

Issa ejja kkonfiguraw l-awtentikazzjoni tal-applikazzjoni tagħna, mur:

Klijenti -> kubernetes

Għażla
valur

Awtorizzazzjoni Ippermettiet
ON

Ejja nagħfas jiffranka u b'dan tlestiet is-setup tal-klijent, issa fuq it-tab

Klijenti -> kubernetes -> kredenzjali

tista 'tikseb Sigriet li se nużaw aktar.

Konfigurazzjoni ta' Kubernetes

It-twaqqif ta' Kubernetes għall-awtorizzazzjoni OIDC huwa pjuttost trivjali u mhux ikkumplikat ħafna. Kull ma trid tagħmel hu li tpoġġi ċ-ċertifikat CA tas-server OIDC tiegħek /etc/kubernetes/pki/oidc-ca.pem u żid l-għażliet meħtieġa għal kube-apiserver.
Biex tagħmel dan, aġġorna /etc/kubernetes/manifests/kube-apiserver.yaml fuq il-kaptani kollha tiegħek:

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

Ukoll, aġġorna l-konfigurazzjoni kubeadm fil-cluster sabiex ma titlifx dawn is-settings meta taġġorna:

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

Dan itemm il-konfigurazzjoni ta' Kubernetes. Tista' tirrepeti dawn il-passi fil-clusters kollha tiegħek ta' Kubernetes.

Awtorizzazzjoni inizjali

Wara dawn il-passi, diġà jkollok cluster Kubernetes b'awtorizzazzjoni OIDC konfigurata. L-unika ħaġa hija li l-utenti tiegħek għad m'għandhomx klijent konfigurat jew il-kubeconfig tagħhom stess. Biex issolvi din il-problema, għandek bżonn tikkonfigura d-distribuzzjoni awtomatika ta 'kubeconfig lill-utenti wara awtorizzazzjoni b'suċċess.

Biex tagħmel dan, tista 'tuża applikazzjonijiet tal-web speċjali li jippermettulek jawtentika lill-utent u mbagħad tniżżel il-kubeconfig lest. Wieħed mill-aktar konvenjenti huwa Kuberos, jippermettilek tiddeskrivi l-clusters kollha ta' Kubernetes f'konfigurazzjoni waħda u taqleb faċilment bejniethom.

Biex tikkonfigura Kuberos, iddeskrivi biss il-mudell għal kubeconfig u mexxih bil-parametri li ġejjin:

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

Għal aktar informazzjoni dettaljata ara Usage fuq Github.

Huwa wkoll possibbli li tuża kubelogin jekk trid tawtorizza direttament fuq il-kompjuter tal-utent. F'dan il-każ, l-utent se jiftaħ browser b'formola ta 'awtorizzazzjoni fuq localhost.

Il-kubeconfig li jirriżulta jista' jiġi ċċekkjat fuq il-websajt jwt.io. Ikkopja biss il-valur users[].user.auth-provider.config.id-token mill-kubeconfig tiegħek għall-formola fuq il-websajt u immedjatament tirċievi traskrizzjoni.

Twaqqif ta' RBAC

Meta tikkonfigura RBAC, tista' tirreferi kemm għall-isem tal-utent (field name fit-token jwt), u għal kull grupp ta' utenti (field groups f'jwt token). Hawn eżempju ta' kif jiġu stabbiliti drittijiet għal grupp 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

Aktar eżempji għal RBAC jistgħu jinstabu fi dokumentazzjoni uffiċjali ta' Kubernetes

L-issettjar tal-prokura tal-awt

Hemm proġett mill-isbaħ keycloak-gatekeeper, li jippermettilek tipproteġi kwalunkwe applikazzjoni billi tipprovdi lill-utent bil-kapaċità li jawtentika mas-server OIDC. Ser nuruk kif tikkonfiguraha billi tuża Kubernetes Dashboard bħala eżempju:

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

Sors: www.habr.com

Żid kumment