Vi fastgør LDAP-autorisation til Kubernetes

Vi fastgør LDAP-autorisation til Kubernetes

En kort vejledning om, hvordan du kan bruge Keycloak til at forbinde Kubernetes til din LDAP-server og konfigurere importen af ​​brugere og grupper. Dette giver dig mulighed for at konfigurere RBAC for dine brugere og bruge auth-proxy til at beskytte Kubernetes Dashboard og andre applikationer, der ikke kan godkende sig selv.

Keycloak installation

Lad os antage, at du allerede har en LDAP-server. Dette kunne være Active Directory, FreeIPA, OpenLDAP eller noget andet. Hvis du ikke har en LDAP-server, så kan du i princippet oprette brugere direkte i Keycloak-grænsefladen, eller bruge offentlige oidc-udbydere (Google, Github, Gitlab), resultatet bliver næsten det samme.

Lad os først og fremmest installere selve Keycloak Installationen kan udføres separat eller direkte i en Kubernetes-klynge. Som regel, hvis du har flere Kubernetes-klynger, ville det være nemmere at installere det separat. På den anden side kan du altid bruge officielle styrkort og installer det direkte i din klynge.

For at gemme Keycloak-data skal du bruge en database. Standard er h2 (al data gemmes lokalt), men det er også muligt at bruge postgres, mysql eller mariadb.
Hvis du alligevel beslutter dig for at installere Keycloak separat, finder du mere detaljerede instruktioner i officiel dokumentation.

Federation opsætning

Først og fremmest, lad os skabe et nyt rige. Realm er rummet for vores applikation. Hver applikation kan have sit eget område med forskellige brugere og autorisationsindstillinger. Mesterriget bruges af Keycloak selv, og det er forkert at bruge det til noget andet.

Klik Tilføj rige

Option
Værdi

Navn
kubernetes

Visningsnavn
Kubernetes

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

Kubernetes kontrollerer som standard, om brugerens e-mail er bekræftet eller ej. Da vi bruger vores egen LDAP-server, vil denne check næsten altid vende tilbage false. Lad os deaktivere denne indstillings repræsentation i Kubernetes:

Kundeomfang -> E-mail -> Kortlæggere -> E-mail bekræftet (Slet)

Lad os nu oprette føderationen; for at gøre dette, gå til:

Brugerføderation -> Tilføj udbyder... -> ldap

Her er et eksempel på indstillinger for FreeIPA:

Option
Værdi

Konsol vist navn
freeipa.example.org

Vendor
Red Hat Directory Server

UUID LDAP-attribut
ipauniqueid

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

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

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

Bind legitimationsoplysninger
<password>

Tillad Kerberos-godkendelse:
on

Kerberos Realm:
EXAMPLE.ORG

Serverleder:
HTTP/[email protected]

Tastefane:
/etc/krb5.keytab

bruger keycloak-svc skal oprettes på forhånd på vores LDAP-server.

I tilfælde af Active Directory skal du blot vælge Leverandør: Active Directory og de nødvendige indstillinger indtastes automatisk i formularen.

Klik Gem

Lad os nu gå videre:

Brugerføderation -> freeipa.example.org -> Kortlæggere -> Fornavn

Option
Værdi

Ldap-attribut
givenName

Lad os nu aktivere gruppekortlægning:

Brugerføderation -> freeipa.example.org -> Kortlæggere -> Opret

Option
Værdi

Navn
groups

Mapper type
group-ldap-mapper

LDAP-grupper DN
cn=groups,cn=accounts,dc=example,dc=org

Brugergrupper Hent strategi
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE

Nu hvor forbundsopsætningen er færdig, lad os gå videre til opsætning af klienten.

Klient opsætning

Lad os oprette en ny klient (en applikation, der vil modtage brugere fra Keycloak). Lad os gå videre:

Klienter -> Opret

Option
Værdi

kunde-id
kubernetes

Adgangstype
confidenrial

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

Gyldige omdirigerings-URI'er
http://kubernetes.example.org/*

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

Lad os også skabe et område for grupper:

Kundeomfang -> Opret

Option
Værdi

Skabelon
No template

Navn
groups

Fuld gruppevej
false

Og opsæt en mapper til dem:

Kundeomfang -> grupper -> Kortlæggere -> Opret

Option
Værdi

Navn
groups

Mapper Type
Group membership

Navn på tokenkrav
groups

Nu skal vi aktivere kortlægningsgruppe i vores klientomfang:

Klienter -> guvernør -> Kundeomfang -> Standard klientomfang

Vælg grupper в Tilgængelige klientomfang, tryk på Tilføj valgte

Lad os nu konfigurere godkendelsen af ​​vores applikation, gå til:

Klienter -> guvernør

Option
Værdi

Autorisation aktiveret
ON

Lad os trykke spare og hermed er klientopsætningen fuldført, nu på fanen

Klienter -> guvernør -> Legitimationsoplysninger

du kan få Secret som vi vil bruge videre.

Konfiguration af Kubernetes

Opsætning af Kubernetes til OIDC-godkendelse er ret trivielt og ikke særlig kompliceret. Alt du skal gøre er at indsætte CA-certifikatet for din OIDC-server /etc/kubernetes/pki/oidc-ca.pem og tilføje de nødvendige muligheder for kube-apiserver.
For at gøre dette skal du opdatere /etc/kubernetes/manifests/kube-apiserver.yaml på alle dine mestre:

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

Opdater også kubeadm-konfigurationen i klyngen for ikke at miste disse indstillinger ved opdatering:

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

Dette fuldender Kubernetes-konfigurationen. Du kan gentage disse trin på tværs af alle dine Kubernetes-klynger.

Indledende godkendelse

Efter disse trin vil du allerede have en Kubernetes-klynge med konfigureret OIDC-autorisation. Det eneste er, at dine brugere endnu ikke har en konfigureret klient eller deres egen kubeconfig. For at løse dette problem skal du konfigurere automatisk distribution af kubeconfig til brugere efter vellykket godkendelse.

For at gøre dette kan du bruge specielle webapplikationer, der giver dig mulighed for at autentificere brugeren og derefter downloade den færdige kubeconfig. En af de mest bekvemme er Kuberos, giver det dig mulighed for at beskrive alle Kubernetes-klynger i én konfiguration og nemt skifte mellem dem.

For at konfigurere Kuberos skal du blot beskrive skabelonen for kubeconfig og køre den med følgende parametre:

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

For mere detaljeret information se Brug på Github.

Det er også muligt at bruge kubelogin hvis du vil autorisere direkte på brugerens computer. I dette tilfælde vil brugeren åbne en browser med en autorisationsformular på localhost.

Den resulterende kubeconfig kan kontrolleres på hjemmesiden jwt.io. Bare kopier værdien users[].user.auth-provider.config.id-token fra din kubeconfig til formularen på hjemmesiden og modtag straks et udskrift.

Opsætning af RBAC

Når du konfigurerer RBAC, kan du referere til både brugernavnet (felt name i jwt-tokenet) og pr. brugergruppe (felt groups i jwt-token). Her er et eksempel på opsætning af rettigheder for en gruppe 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

Flere eksempler på RBAC kan findes i officiel Kubernetes-dokumentation

Indstilling af auth-proxy

Der er et vidunderligt projekt keycloak-gatekeeper, som giver dig mulighed for at beskytte enhver applikation ved at give brugeren mulighed for at godkende til OIDC-serveren. Jeg viser dig, hvordan du konfigurerer det ved at bruge Kubernetes Dashboard som et eksempel:

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

Kilde: www.habr.com

Tilføj en kommentar