LDAP autorizaciją pritvirtiname prie „Kubernetes“.

LDAP autorizaciją pritvirtiname prie „Kubernetes“.

Trumpa pamoka apie tai, kaip galite naudoti „Keycloak“, kad prijungtumėte „Kubernetes“ prie LDAP serverio ir sukonfigūruotumėte vartotojų bei grupių importavimą. Tai leis sukonfigūruoti RBAC savo vartotojams ir naudoti autentifikavimo tarpinį serverį, kad apsaugotumėte „Kubernetes“ prietaisų skydelį ir kitas programas, kurios negali savęs autentifikuoti.

Keycloak montavimas

Tarkime, kad jau turite LDAP serverį. Tai gali būti „Active Directory“, „FreeIPA“, „OpenLDAP“ ar dar kas nors. Jei neturite LDAP serverio, iš esmės galite kurti vartotojus tiesiai „Keycloak“ sąsajoje arba naudoti viešuosius idc teikėjus (Google, Github, Gitlab), rezultatas bus beveik toks pat.

Visų pirma, įsidiegkime patį Keycloak.Įdiegimas gali būti atliekamas atskirai arba tiesiai į Kubernetes klasterį.Paprastai jei turite keletą Kubernetes klasterių, būtų lengviau įdiegti atskirai. Kita vertus, visada galite naudoti oficiali vairo diagrama ir įdiekite jį tiesiai į savo grupę.

Norėdami saugoti Keycloak duomenis, jums reikės duomenų bazės. Numatytasis yra h2 (visi duomenys saugomi lokaliai), bet galima ir naudotis postgres, mysql arba mariadb.
Jei vis tiek nuspręsite įdiegti „Keycloak“ atskirai, išsamesnes instrukcijas rasite oficialius dokumentus.

Federacijos nustatymas

Visų pirma, sukurkime naują sritį. Realm yra mūsų programos erdvė. Kiekviena programa gali turėti savo sritį su skirtingais vartotojais ir autorizacijos nustatymais. „Master“ sritį naudoja pati „Keycloak“, todėl neteisinga ją naudoti kam nors kitam.

Spauskite čia Pridėti sritį

pasirinkimas
Vertė

Vardas
kubernetes

Rodomas pavadinimas
Kubernetes

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

Pagal numatytuosius nustatymus „Kubernetes“ tikrina, ar vartotojo el. paštas patvirtintas, ar ne. Kadangi naudojame savo LDAP serverį, šis patikrinimas beveik visada grįš false. Išjunkite šios parinkties atvaizdavimą Kubernetes:

Klientų apimtys -> El.pašto adresas* -> Žemėlapių kūrėjai -> El. paštas patvirtintas (Ištrinti)

Dabar sukurkime federaciją; norėdami tai padaryti, eikite į:

Vartotojų federacija -> Pridėti teikėją… -> ldap

Štai FreeIPA nustatymų pavyzdys:

pasirinkimas
Vertė

Konsolės rodomas pavadinimas
freeipa.example.org

Pardavėjas
Red Hat Directory Server

UUID LDAP atributas
ipauniqueid

Ryšio URL
ldaps://freeipa.example.org

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

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

Susieti kredencialus
<password>

Leisti Kerberos autentifikavimą:
on

Kerberos sritis:
EXAMPLE.ORG

Serverio vadovas:
HTTP/[email protected]

KeyTab:
/etc/krb5.keytab

Vartotojas keycloak-svc reikia iš anksto sukurti mūsų LDAP serveryje.

„Active Directory“ atveju tereikia pasirinkti Pardavėjas: Active Directory ir reikiami nustatymai bus automatiškai įvesti į formą.

Spauskite čia Sutaupote

Dabar eikime toliau:

Vartotojų federacija -> freeipa.example.org -> Žemėlapių kūrėjai -> Vardas

pasirinkimas
Vertė

Ldap atributas
givenName

Dabar įgalinkime grupės atvaizdavimą:

Vartotojų federacija -> freeipa.example.org -> Žemėlapių kūrėjai -> kurti

pasirinkimas
Vertė

Vardas
groups

Žemėlapio sudarytojo tipas
group-ldap-mapper

LDAP grupės DN
cn=groups,cn=accounts,dc=example,dc=org

Vartotojų grupių gavimo strategija
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE

Dabar, kai federacijos sąranka baigta, pereikime prie kliento nustatymo.

Kliento sąranka

Sukurkime naują klientą (programą, kuri priims vartotojus iš Keycloak). Eikime toliau:

Klientų -> kurti

pasirinkimas
Vertė

kliento ID
kubernetes

Prieigos tipas
confidenrial

Šaknies URL
http://kubernetes.example.org/

Galiojantys peradresavimo URI
http://kubernetes.example.org/*

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

Taip pat sukurkime apimtį grupėms:

Klientų taikymo sritis -> kurti

pasirinkimas
Vertė

šablonas
No template

Vardas
groups

Visas grupės kelias
false

Ir sukurkite jiems žemėlapių sudarytoją:

Klientų taikymo sritis -> grupės -> Žemėlapių kūrėjai -> kurti

pasirinkimas
Vertė

Vardas
groups

Žemėlapio sudarytojo tipas
Group membership

Token Claim pavadinimas
groups

Dabar turime įjungti atvaizdavimo grupę savo kliento srityje:

Klientų -> kubernetes -> Klientų taikymo sritis -> Numatytosios klientų sritys

pasirinkti grupės в Galimos klientų apimtyspaspauskite Pridėti pasirinktą

Dabar sukonfigūruokime savo programos autentifikavimą, eikite į:

Klientų -> kubernetes

pasirinkimas
Vertė

Autorizacija įjungta
ON

Spauskime sutaupyti ir kliento sąranka baigta, dabar skirtuke

Klientų -> kubernetes -> įgaliojimai

Jūs galite gauti Paslaptis kurį naudosime toliau.

„Kubernetes“ konfigūravimas

„Kubernetes“ nustatymas OIDC leidimui yra gana trivialus ir nėra labai sudėtingas. Viskas, ką jums reikia padaryti, tai įdėti savo OIDC serverio CA sertifikatą /etc/kubernetes/pki/oidc-ca.pem ir pridėkite reikiamas kube-apiserver parinktis.
Norėdami tai padaryti, atnaujinkite /etc/kubernetes/manifests/kube-apiserver.yaml apie visus savo meistrus:

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

Be to, atnaujinkite kubeadm konfigūraciją klasteryje, kad neprarastumėte šių nustatymų atnaujindami:

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

Tai užbaigia „Kubernetes“ konfigūraciją. Šiuos veiksmus galite pakartoti visose „Kubernetes“ grupėse.

Pradinis leidimas

Atlikę šiuos veiksmus, jau turėsite Kubernetes klasterį su sukonfigūruota OIDC leidimu. Vienintelis dalykas yra tai, kad jūsų vartotojai dar neturi sukonfigūruoto kliento ar savo kubeconfig. Norėdami išspręsti šią problemą, turite sukonfigūruoti automatinį kubeconfig paskirstymą vartotojams po sėkmingo autorizavimo.

Norėdami tai padaryti, galite naudoti specialias žiniatinklio programas, kurios leidžia autentifikuoti vartotoją ir atsisiųsti paruoštą kubeconfig. Vienas iš patogiausių yra Kuberos, tai leidžia apibūdinti visas „Kubernetes“ grupes vienoje konfigūracijoje ir lengvai perjungti juos.

Norėdami sukonfigūruoti Kuberos, tiesiog apibūdinkite kubeconfig šabloną ir paleiskite jį naudodami šiuos parametrus:

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

Išsamesnės informacijos žr Naudojimas „Github“.

Taip pat galima naudoti kubelogin jei norite autorizuoti tiesiogiai vartotojo kompiuteryje. Tokiu atveju vartotojas atidarys naršyklę su leidimo forma „localhost“.

Gautą kubeconfig galima patikrinti svetainėje jwt.io. Tiesiog nukopijuokite vertę users[].user.auth-provider.config.id-token iš savo kubeconfig į formą svetainėje ir iškart gausite nuorašą.

RBAC nustatymas

Konfigūruodami RBAC, galite nurodyti tiek vartotojo vardą (lauką name jwt prieigos rakte) ir kiekvienai vartotojų grupei (laukas groups jwt žetonu). Čia yra grupės teisių nustatymo pavyzdys 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

Daugiau RBAC pavyzdžių galite rasti oficiali Kubernetes dokumentacija

Auth-proxy nustatymas

Yra nuostabus projektas raktų skraistė-vartininkas, kuri leidžia apsaugoti bet kurią programą, suteikiant vartotojui galimybę autentifikuotis OIDC serveryje. Parodysiu, kaip jį sukonfigūruoti naudojant „Kubernetes“ informacijos suvestinę kaip pavyzdį:

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

Šaltinis: www.habr.com

Добавить комментарий