Upevňujeme autorizaci LDAP na Kubernetes

Upevňujeme autorizaci LDAP na Kubernetes

Malý návod, jak pomocí Keycloak připojit Kubernetes k vašemu serveru LDAP a nastavit import uživatelů a skupin. To vám umožní nastavit RBAC pro vaše uživatele a používat auth-proxy k ochraně Kubernetes Dashboard a dalších aplikací, které nevědí, jak se autorizovat.

Instalace krytu na klíče

Předpokládejme, že již máte server LDAP. Může to být Active Directory, FreeIPA, OpenLDAP nebo cokoliv jiného. Pokud nemáte LDAP server, tak v zásadě můžete vytvářet uživatele přímo v rozhraní Keycloak, nebo použít veřejné oidc poskytovatele (Google, Github, Gitlab), výsledek bude téměř stejný.

Nejprve si nainstalujme samotný Keycloak, instalaci lze provést samostatně, nebo přímo do clusteru Kubernetes, zpravidla pokud máte více clusterů Kubernetes, bylo by jednodušší jej nainstalovat samostatně. Na druhou stranu můžete použít vždy oficiální tabulka kormidla a nainstalujte jej přímo do vašeho clusteru.

K ukládání dat Keycloak budete potřebovat databázi. Výchozí nastavení je h2 (všechna data jsou uložena lokálně), ale je také možné použít postgres, mysql nebo mariadb.
Pokud se přesto rozhodnete nainstalovat Keycloak samostatně, podrobnější pokyny naleznete v oficiální dokumentace.

Nastavení federace

Nejprve si vytvořte novou sféru. Realm je prostor naší aplikace. Každá aplikace může mít svou vlastní sféru s různými uživateli a nastavením oprávnění. Hlavní sféru používá samotný Keycloak a její použití pro cokoli jiného je špatné.

Klikněte zde Přidat sféru

Volba
Hodnota

Jméno
kubernetes

Display Name
Kubernetes

Zobrazovaný název HTML
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >

Kubernetes ve výchozím nastavení kontroluje, zda je e-mail uživatele potvrzen nebo ne. Protože používáme vlastní server LDAP, tato kontrola se téměř vždy vrátí false. Pojďme zakázat reprezentaci tohoto nastavení v Kubernetes:

Rozsahy klientů -> Email -> Mapovači -> email ověřen (Vymazat)

Nyní pojďme nastavit federaci, za tímto účelem jdeme na:

Federace uživatelů -> Přidat poskytovatele… -> LDAP

Zde je příklad nastavení pro FreeIPA:

Volba
Hodnota

Zobrazovaný název konzoly
freeipa.example.org

Prodejce
Red Hat Directory Server

Atribut UUID LDAP
ipauniqueid

Adresa URL připojení
ldaps://freeipa.example.org

DN uživatele
cn=users,cn=accounts,dc=example,dc=org

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

Svázat pověření
<password>

Povolit ověřování Kerberos:
on

Kerberos Realm:
EXAMPLE.ORG

Ředitel serveru:
HTTP/freeipa.example.org@EXAMPLE.ORG

klíčová karta:
/etc/krb5.keytab

Uživatel keycloak-svc musí být vytvořen předem na našem serveru LDAP.

V případě Active Directory stačí vybrat Dodavatel: Active Directory a potřebná nastavení se do formuláře vloží automaticky.

Klikněte zde Uložit

Nyní pojďme dál:

Federace uživatelů -> freeipa.example.org -> Mapovači -> Jméno

Volba
Hodnota

Atributy Ldap
givenName

Nyní povolte mapování skupin:

Federace uživatelů -> freeipa.example.org -> Mapovači -> Vytvořit

Volba
Hodnota

Jméno
groups

Typ mapovače
group-ldap-mapper

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

Strategie načtení uživatelské skupiny
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE

Tím je nastavení federace dokončeno, přejdeme k nastavení klienta.

Nastavení klienta

Vytvořme nového klienta (aplikaci, která bude přijímat uživatele z Keycloak). Pojďme:

Klienti -> Vytvořit

Volba
Hodnota

ID zákazníka
kubernetes

Typ přístupu
confidenrial

Kořenová adresa URL
http://kubernetes.example.org/

Platné URI přesměrování
http://kubernetes.example.org/*

Adresa URL správce
http://kubernetes.example.org/

Vytvoříme také prostor pro skupiny:

Rozsahy klientů -> Vytvořit

Volba
Hodnota

Šablona
No template

Jméno
groups

Celá skupinová cesta
false

A nastavte pro ně mapovač:

Rozsahy klientů -> skupiny -> Mapovači -> Vytvořit

Volba
Hodnota

Jméno
groups

Typ mapovače
Group membership

Název nároku na token
groups

Nyní musíme povolit mapování skupin v rozsahu našeho klienta:

Klienti -> guvernéři -> Rozsahy klientů -> Výchozí rozsahy klienta

vybrat skupiny в Dostupné klientské rozsahyklikněte Přidat vybrané

Nyní nastavíme ověřování naší aplikace, přejděte na:

Klienti -> guvernéři

Volba
Hodnota

Autorizace povolena
ON

Pojďme tlačit uložit a tím je nastavení klienta dokončeno, nyní na kartě

Klienti -> guvernéři -> pověřovací listiny

můžeš dostat Tajemství které použijeme později.

Konfigurace Kubernetes

Nastavení Kubernetes pro autorizaci OIDC je docela triviální a není to nic moc složitého. Vše, co musíte udělat, je vložit certifikát CA vašeho OIDC serveru /etc/kubernetes/pki/oidc-ca.pem a přidejte potřebné možnosti pro kube-apiserver.
Chcete-li to provést, aktualizujte /etc/kubernetes/manifests/kube-apiserver.yaml na všechny vaše pány:

...
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 také aktualizujte konfiguraci kubeadm v clusteru, abyste během aktualizace neztratili tato nastavení:

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

Tím je nastavení Kubernetes dokončeno. Tyto kroky můžete opakovat ve všech clusterech Kubernetes.

Počáteční autorizace

Po těchto krocích již budete mít cluster Kubernetes s nakonfigurovanou autorizací OIDC. Jediným bodem je, že vaši uživatelé ještě nemají nakonfigurovaného klienta a také svůj vlastní kubeconfig. Chcete-li tento problém vyřešit, musíte nakonfigurovat automatické vydávání kubeconfig uživatelům po úspěšné autorizaci.

K tomu můžete použít speciální webové aplikace, které vám umožní ověřit uživatele a následně stáhnout hotový kubeconfig. Jedním z nejpohodlnějších je Kuberos, umožňuje popsat všechny clustery Kubernetes v jedné konfiguraci a snadno mezi nimi přepínat.

Ke konfiguraci Kuberosu stačí popsat šablonu pro kubeconfig a spustit ji s následujícími parametry:

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

Další podrobnosti viz Používání na Github.

Je také možné použít kublogin pokud chcete autorizovat přímo na počítači uživatele. V tomto případě uživatel otevře prohlížeč s autorizačním formulářem na localhost.

Výsledný kubeconfig lze zkontrolovat na webu jwt.io. Stačí zkopírovat hodnotu users[].user.auth-provider.config.id-token z vašeho kubeconfig do formuláře na webu a okamžitě získejte přepis.

Nastavení RBAC

Při konfiguraci RBAC se můžete odkázat na uživatelské jméno (pole name v tokenu jwt) a pro skupinu uživatelů (pole groups v tokenu jwt). Zde je příklad nastavení oprávnění pro skupinu 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

Další příklady pro RBAC lze nalézt v oficiální dokumentace Kubernetes

Nastavení auth-proxy

Existuje úžasný projekt klíčenka-vrátný, který vám umožňuje zabezpečit jakoukoli aplikaci tím, že umožňuje uživateli autentizovat se na serveru OIDC. Ukážu vám, jak to můžete nastavit pomocí Kubernetes Dashboard jako příklad:

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

Zdroj: www.habr.com

Kupte si spolehlivý hosting pro stránky s DDoS ochranou, VPS VDS servery 🔥 Kupte si spolehlivý webhosting s ochranou DDoS, VPS VDS servery | ProHoster