Fixem l'autorització LDAP a Kubernetes

Fixem l'autorització LDAP a Kubernetes

Un breu tutorial sobre com podeu utilitzar Keycloak per connectar Kubernetes al vostre servidor LDAP i configurar la importació d'usuaris i grups. Això us permetrà configurar RBAC per als vostres usuaris i utilitzar el servidor intermediari d'autenticació per protegir el tauler de control de Kubernetes i altres aplicacions que no es poden autenticar.

Instal·lació de Keycloak

Suposem que ja teniu un servidor LDAP. Això podria ser Active Directory, FreeIPA, OpenLDAP o qualsevol altra cosa. Si no teniu un servidor LDAP, en principi podeu crear usuaris directament a la interfície Keycloak o utilitzar proveïdors públics d'oidc (Google, Github, Gitlab), el resultat serà gairebé el mateix.

En primer lloc, instal·lem el propi Keycloak. La instal·lació es pot fer per separat o directament en un clúster de Kubernetes. Per regla general, si teniu diversos clústers de Kubernetes, seria més fàcil instal·lar-lo per separat. D'altra banda sempre es pot utilitzar gràfic oficial del timó i instal·leu-lo directament al vostre clúster.

Per emmagatzemar les dades de Keycloak necessitareu una base de dades. Per defecte és h2 (totes les dades s'emmagatzemen localment), però també es poden utilitzar postgres, mysql o mariadb.
Si encara decidiu instal·lar Keycloak per separat, trobareu instruccions més detallades a documentació oficial.

Configuració de la federació

Primer de tot, anem a crear un nou regne. Realm és l'espai de la nostra aplicació. Cada aplicació pot tenir el seu propi regne amb diferents usuaris i configuracions d'autorització. El regne Mestre és utilitzat pel mateix Keycloak i és incorrecte utilitzar-lo per a qualsevol altra cosa.

Empenta Afegeix regne

opció
Valor

Nom
kubernetes

Mostra nom
Kubernetes

Nom de visualització HTML
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >

Kubernetes comprova per defecte si el correu electrònic de l'usuari està confirmat o no. Com que utilitzem el nostre propi servidor LDAP, aquesta comprovació gairebé sempre tornarà false. Desactivem la representació d'aquesta opció a Kubernetes:

Àmbits del client -> Email -> Cartografiadors -> Correu electrònic verificat (Suprimeix)

Ara configurem la federació; per fer-ho, aneu a:

Federació d'usuaris -> Afegeix un proveïdor... -> ldap

Aquí teniu un exemple de configuració de FreeIPA:

opció
Valor

Nom de visualització de la consola
freeipa.example.org

Venedor
Red Hat Directory Server

UUID Atribut LDAP
ipauniqueid

URL de connexió
ldaps://freeipa.example.org

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

Enllaçar DN
uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org

Enllaça la credencial
<password>

Permet l'autenticació Kerberos:
on

Regne de Kerberos:
EXAMPLE.ORG

Principal del servidor:
HTTP/[email protected]

KeyTab:
/etc/krb5.keytab

Usuari keycloak-svc s'han de crear amb antelació al nostre servidor LDAP.

En el cas d'Active Directory, només cal que seleccioneu Proveïdor: Active Directory i la configuració necessària s'introduirà al formulari automàticament.

Empenta Desar

Ara seguim:

Federació d'usuaris -> freeipa.example.org -> Cartografiadors -> Nom

opció
Valor

Atribut Ldap
givenName

Ara activem el mapeig de grups:

Federació d'usuaris -> freeipa.example.org -> Cartografiadors -> Create

opció
Valor

Nom
groups

Tipus de mapeador
group-ldap-mapper

DN de grups LDAP
cn=groups,cn=accounts,dc=example,dc=org

Estratègia de recuperació de grups d'usuaris
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE

Ara que s'ha completat la configuració de la federació, passem a configurar el client.

Configuració del client

Creem un client nou (una aplicació que rebrà usuaris de Keycloak). Posem-nos en marxa:

Clientela -> Create

opció
Valor

Identificador de client
kubernetes

Tipus d'accés
confidenrial

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

URIs de redirecció vàlids
http://kubernetes.example.org/*

URL de l'administrador
http://kubernetes.example.org/

També creem un àmbit per a grups:

Àmbits del client -> Create

opció
Valor

Plantilla
No template

Nom
groups

Ruta completa del grup
false

I configureu-los un mapeador:

Àmbits del client -> grups -> Cartografiadors -> Create

opció
Valor

Nom
groups

Tipus de mapeador
Group membership

Nom de la reclamació del testimoni
groups

Ara hem d'habilitar el grup de mapes al nostre àmbit de client:

Clientela -> kubernets -> Àmbits del client -> Àmbits de client predeterminats

seleccionar grups в Àmbits de client disponibles, premeu Afegeix seleccionats

Ara configurem l'autenticació de la nostra aplicació, aneu a:

Clientela -> kubernets

opció
Valor

Autorització activada
ON

Premem estalviar i amb això s'ha completat la configuració del client, ara a la pestanya

Clientela -> kubernets -> cartes credencials

pots aconseguir Secret que utilitzarem més endavant.

Configuració de Kubernetes

Configurar Kubernetes per a l'autorització OIDC és bastant trivial i no gaire complicat. Tot el que heu de fer és posar el certificat CA del vostre servidor OIDC /etc/kubernetes/pki/oidc-ca.pem i afegiu les opcions necessàries per al kube-apiserver.
Per fer-ho, actualitzeu /etc/kubernetes/manifests/kube-apiserver.yaml a tots els teus mestres:

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

A més, actualitzeu la configuració de kubeadm al clúster per no perdre aquesta configuració en actualitzar:

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

Això completa la configuració de Kubernetes. Podeu repetir aquests passos a tots els vostres clústers de Kubernetes.

Autorització inicial

Després d'aquests passos, ja tindreu un clúster de Kubernetes amb autorització OIDC configurada. L'única cosa és que els vostres usuaris encara no tenen un client configurat ni el seu propi kubeconfig. Per resoldre aquest problema, heu de configurar la distribució automàtica de kubeconfig als usuaris després de l'autorització correcta.

Per fer-ho, podeu utilitzar aplicacions web especials que us permeten autenticar l'usuari i després descarregar el kubeconfig ja fet. Un dels més convenients és Kuberos, us permet descriure tots els clústers de Kubernetes en una configuració i canviar fàcilment entre ells.

Per configurar Kuberos, només cal que descrigui la plantilla per a kubeconfig i executeu-la amb els paràmetres següents:

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

Per a informació més detallada vegeu Ús a Github.

També és possible utilitzar-lo kubelogin si es vol autoritzar directament a l'ordinador de l'usuari. En aquest cas, l'usuari obrirà un navegador amb un formulari d'autorització a localhost.

El kubeconfig resultant es pot comprovar al lloc web jwt.io. Només cal copiar el valor users[].user.auth-provider.config.id-token del vostre kubeconfig al formulari del lloc web i rebeu immediatament una transcripció.

Configuració de RBAC

Quan configureu RBAC, podeu fer referència tant al nom d'usuari (camp name al testimoni jwt) i per grup d'usuaris (camp groups en senyal jwt). Aquí teniu un exemple de configuració de drets per a un grup 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

Es poden trobar més exemples de RBAC a documentació oficial de Kubernetes

configuració d'auth-proxy

Hi ha un projecte meravellós guardià de claus, que permet protegir qualsevol aplicació proporcionant a l'usuari la possibilitat d'autenticar-se al servidor OIDC. Us mostraré com configurar-lo utilitzant Kubernetes Dashboard com a exemple:

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

Font: www.habr.com

Afegeix comentari