Ons bevestig LDAP-magtiging aan Kubernetes

Ons bevestig LDAP-magtiging aan Kubernetes

'n Klein handleiding oor hoe om Keycloak te gebruik om Kubernetes aan jou LDAP-bediener te koppel en invoer van gebruikers en groepe op te stel. Dit sal jou toelaat om RBAC vir jou gebruikers op te stel en gesagvolmag te gebruik om Kubernetes Dashboard en ander toepassings te beskerm wat nie weet hoe om hulself te magtig nie.

Sleutelmantel installasie

Kom ons neem aan dat jy reeds 'n LDAP-bediener het. Dit kan Active Directory, FreeIPA, OpenLDAP of wat ook al wees. As u nie 'n LDAP-bediener het nie, kan u in beginsel gebruikers direk in die Keycloak-koppelvlak skep, of openbare oidc-verskaffers (Google, Github, Gitlab) gebruik, die resultaat sal amper dieselfde wees.

Eerstens, laat ons Keycloak self installeer, die installasie kan afsonderlik uitgevoer word, of direk na die Kubernetes-kluster, as 'n reël, as u verskeie Kubernetes-klusters het, sou dit makliker wees om dit afsonderlik te installeer. Aan die ander kant kan jy altyd gebruik amptelike stuurkaart en installeer dit direk in jou groep.

Om Keycloak-data te stoor, benodig u 'n databasis. Die verstek is h2 (alle data word plaaslik gestoor), maar dit is ook moontlik om te gebruik postgres, mysql of mariadb.
As jy steeds besluit om Keycloak afsonderlik te installeer, kan jy meer gedetailleerde instruksies vind in amptelike dokumentasie.

Federasie opstelling

Eerstens, laat ons 'n nuwe ryk skep. Realm is die ruimte van ons toepassing. Elke toepassing kan sy eie ryk hê met verskillende gebruikers en magtiginginstellings. Die meesterryk word deur Keycloak self gebruik en dit is verkeerd om dit vir enigiets anders te gebruik.

druk Voeg ryk by

Opsie
waarde

Naam
kubernetes

Display Naam
Kubernetes

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

Kubernetes kontroleer by verstek of die gebruiker se e-pos bevestig is of nie. Aangesien ons ons eie LDAP-bediener gebruik, sal hierdie tjek byna altyd terugkeer false. Kom ons deaktiveer die voorstelling van hierdie instelling in Kubernetes:

Kliënt omvang -> E-posadres -> Kaartmakers -> e-pos geverifieer (Vee uit)

Kom ons stel nou die federasie op, hiervoor gaan ons na:

Gebruikersfederasie -> Voeg verskaffer by … -> ldap

Hier is 'n voorbeeldopstelling vir FreeIPA:

Opsie
waarde

Konsole-vertoonnaam
freeipa.example.org

Ondernemer
Red Hat Directory Server

UUID LDAP-kenmerk
ipauniqueid

Verbindings-URL
ldaps://freeipa.example.org

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

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

Bind geloofsbriewe
<password>

Laat Kerberos-stawing toe:
on

Kerberos Realm:
EXAMPLE.ORG

Bedienerhoof:
HTTP/[email protected]

sleuteloortjie:
/etc/krb5.keytab

gebruiker keycloak-svc moet vooraf op ons LDAP-bediener geskep word.

In die geval van Active Directory, kies eenvoudig Verkoper: Active Directory en die nodige instellings sal outomaties in die vorm ingevoeg word.

druk Stoor

Kom ons gaan nou verder:

Gebruikersfederasie -> freeipa.example.org -> Kaartmakers -> Eerste naam

Opsie
waarde

Ldap eienskappe
givenName

Aktiveer nou groepkartering:

Gebruikersfederasie -> freeipa.example.org -> Kaartmakers -> Skep

Opsie
waarde

Naam
groups

Mapper tipe
group-ldap-mapper

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

Gebruikersgroep-herwinningstrategie
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE

Dit voltooi die federasie-opstelling, kom ons gaan voort met die opstel van die kliënt.

Kliënt opstelling

Kom ons skep 'n nuwe kliënt ('n toepassing wat gebruikers van Keycloak sal ontvang). Kom ons gaan:

Kliënte -> Skep

Opsie
waarde

Kliënt-ID
kubernetes

Toegangstipe
confidenrial

Wortel-URL
http://kubernetes.example.org/

Geldige aanstuur-URI's
http://kubernetes.example.org/*

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

Ons sal ook 'n omvang skep vir groepe:

Kliënt omvang -> Skep

Opsie
waarde

Sjabloon
No template

Naam
groups

Volle groep pad
false

En stel 'n karteerder vir hulle op:

Kliënt omvang -> groepe -> Kaartmakers -> Skep

Opsie
waarde

Naam
groups

Mapper tipe
Group membership

Token Eis Naam
groups

Nou moet ons groepkartering in ons kliëntomvang aktiveer:

Kliënte -> goewerneur -> Kliënt omvang -> Standaardkliëntbestekke

Kies groepe в Beskikbare kliëntbestekke, pers Voeg geselekteerde by

Kom ons stel nou die verifikasie van ons toepassing op, gaan na:

Kliënte -> goewerneur

Opsie
waarde

Magtiging geaktiveer
ON

Kom ons druk red en dit voltooi die kliëntopstelling, nou op die blad

Kliënte -> goewerneur -> geloofsbriewe

Jy kan kry Secret wat ons later sal gebruik.

Konfigureer Kubernetes

Die opstel van Kubernetes vir OIDC-magtiging is nogal triviaal en nie iets baie ingewikkeld nie. Al wat u hoef te doen is om die CA-sertifikaat van u OIDC-bediener in te sit /etc/kubernetes/pki/oidc-ca.pem en voeg die nodige opsies vir kube-apiserver by.
Om dit te doen, werk op /etc/kubernetes/manifests/kube-apiserver.yaml op al u meesters:

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

En werk ook die kubeadm-konfigurasie in die groep op om nie hierdie instellings tydens die opdatering te verloor nie:

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

Dit voltooi die Kubernetes-opstelling. Jy kan hierdie stappe oor al jou Kubernetes-klusters herhaal.

Aanvanklike magtiging

Na hierdie stappe sal jy reeds 'n Kubernetes-kluster hê met OIDC-magtiging opgestel. Die enigste punt is dat u gebruikers nog nie 'n kliënt opgestel het nie, sowel as hul eie kubeconfig. Om hierdie probleem op te los, moet jy die outomatiese uitreiking van kubeconfig aan gebruikers instel na suksesvolle magtiging.

Om dit te doen, kan jy spesiale webtoepassings gebruik wat jou toelaat om die gebruiker te verifieer en dan die voltooide kubeconfig af te laai. Een van die gerieflikste is Kuberos, dit laat jou toe om alle Kubernetes-klusters in een konfigurasie te beskryf en maklik tussen hulle te wissel.

Om Kuberos op te stel, is dit genoeg om die sjabloon vir kubeconfig te beskryf en dit met die volgende parameters uit te voer:

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

Vir meer besonderhede sien Gebruik op Github.

Dit is ook moontlik om te gebruik kubelogin as jy direk op die gebruiker se rekenaar wil magtig. In hierdie geval sal die gebruiker 'n blaaier oopmaak met 'n magtigingsvorm op localhost.

Die resulterende kubeconfig kan op die webwerf nagegaan word jwt.io. Kopieer net die waarde users[].user.auth-provider.config.id-token van jou kubeconfig na 'n vorm op die webwerf en kry die transkripsie dadelik.

RBAC opstelling

Wanneer u RBAC opstel, kan u verwys na beide die gebruikersnaam (veld name in die jwt-token) en vir 'n groep gebruikers (veld groups in jwt-token). Hier is 'n voorbeeld van die instelling van toestemmings vir 'n groep 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

Meer voorbeelde vir RBAC kan gevind word in amptelike Kubernetes-dokumentasie

Stel magtiging-instaanbediener

Daar is 'n wonderlike projek sleutelmantel-hekwagter, wat jou toelaat om enige toepassing te beveilig deur die gebruiker toe te laat om aan die OIDC-bediener te verifieer. Ek sal jou wys hoe jy dit kan opstel deur die Kubernetes Dashboard as voorbeeld te gebruik:

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

Bron: will.com

Voeg 'n opmerking