Ние го прицврстуваме овластувањето за LDAP на Kubernetes

Ние го прицврстуваме овластувањето за LDAP на Kubernetes

Мал туторијал за тоа како да користите Keycloak за да го поврзете Kubernetes со вашиот LDAP сервер и да поставите увоз на корисници и групи. Ова ќе ви овозможи да поставите RBAC за вашите корисници и да користите auth-proxy за да ја заштитите контролната табла на Kubernetes и другите апликации што не знаат како да се овластат.

Инсталација на тастатурата

Да претпоставиме дека веќе имате LDAP сервер. Може да биде Active Directory, FreeIPA, OpenLDAP или што и да е. Ако немате LDAP сервер, тогаш во принцип можете да креирате корисници директно во интерфејсот Keycloak или да користите јавни oidc провајдери (Google, Github, Gitlab), резултатот ќе биде речиси ист.

Како прво, да го инсталираме самиот Keycloak, инсталацијата може да се изврши одделно, или директно во кластерот Kubernetes, по правило, ако имате неколку кластери на Kubernetes, полесно би било да го инсталирате одделно. Од друга страна, секогаш можете да користите официјална табела на кормилото и инсталирајте го директно во вашиот кластер.

За да ги зачувате податоците на Keycloak, ќе ви треба база на податоци. Стандардно е h2 (сите податоци се чуваат локално), но исто така е можно да се користат postgres, mysql или mariadb.
Ако сепак одлучите да инсталирате Keycloak одделно, можете да најдете подетални упатства во официјална документација.

Поставување на федерацијата

Како прво, да создадеме ново царство. Кралството е просторот на нашата апликација. Секоја апликација може да има свое подрачје со различни корисници и поставки за авторизација. Главното царство го користи самиот Keycloak и неговото користење за било што друго е погрешно.

Кликни тука Додадете царство

опција
Вредност

Име
kubernetes

Име на екранот
Kubernetes

HTML Приказно име
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >

Kubernetes стандардно проверува дали е-поштата на корисникот е потврдена или не. Бидејќи користиме сопствен LDAP сервер, оваа проверка скоро секогаш ќе се враќа false. Ајде да го оневозможиме претставувањето на оваа поставка во Kubernetes:

Опсегот на клиентот -> Е-пошта -> Мапери -> потврдена е-пошта (Избриши)

Сега ајде да ја формираме федерацијата, за ова одиме на:

Корисничка федерација -> Додај провајдер… -> ldap

Еве пример за поставување за FreeIPA:

опција
Вредност

Прикажано име на конзолата
freeipa.example.org

Добавувачот
Red Hat Directory Server

UUID LDAP атрибут
ipauniqueid

URL-адреса за поврзување
ldaps://freeipa.example.org

Кориснички DN
cn=users,cn=accounts,dc=example,dc=org

Врзи DN
uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org

Поврзете акредитив
<password>

Дозволи автентикација на Kerberos:
on

Кралството Керберос:
EXAMPLE.ORG

Главен сервер:
HTTP/[email protected]

табот за клучеви:
/etc/krb5.keytab

Корисник keycloak-svc мора да се креираат однапред на нашиот LDAP сервер.

Во случај на Active Directory, едноставно изберете Добавувач: Active Directory и потребните поставки автоматски ќе се вметнат во формуларот.

Кликни тука Зачувај

Сега да продолжиме понатаму:

Корисничка федерација -> freeipa.example.org -> Мапери -> Име

опција
Вредност

Ldap атрибути
givenName

Сега овозможете групно мапирање:

Корисничка федерација -> freeipa.example.org -> Мапери -> Креирај

опција
Вредност

Име
groups

Тип на мапер
group-ldap-mapper

LDAP Групи DN
cn=groups,cn=accounts,dc=example,dc=org

Стратегија за враќање на корисничка група
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE

Ова го комплетира поставувањето на федерацијата, ајде да продолжиме со поставување на клиентот.

Поставување на клиентот

Ајде да создадеме нов клиент (апликација која ќе прима корисници од Keycloak). Да одиме:

Клиенти -> Креирај

опција
Вредност

ID на клиент
kubernetes

Тип на пристап
confidenrial

URL на корен
http://kubernetes.example.org/

Валидни URI-и за пренасочување
http://kubernetes.example.org/*

УРЛ на администраторот
http://kubernetes.example.org/

Исто така, ќе создадеме простор за групи:

Опсегот на клиентот -> Креирај

опција
Вредност

Шаблон
No template

Име
groups

Целосна групна патека
false

И поставете мапер за нив:

Опсегот на клиентот -> групи -> Мапери -> Креирај

опција
Вредност

Име
groups

Тип на мапер
Group membership

Име на токен прибарување
groups

Сега треба да овозможиме групно мапирање во опсегот на нашиот клиент:

Клиенти -> кубернети -> Опсегот на клиентот -> Стандарден опсег на клиент

изберете групи в Достапни опсези на клиентикликнете Додадете избрани

Сега ајде да ја поставиме автентикацијата на нашата апликација, одете на:

Клиенти -> кубернети

опција
Вредност

Овозможено овластување
ON

Да туркаме спаси и ова го комплетира поставувањето на клиентот, сега на јазичето

Клиенти -> кубернети -> Сертификати

можете да добиете Тајна кои ќе ги користиме подоцна.

Конфигурирање на Kubernetes

Поставувањето на Kubernetes за овластување OIDC е прилично тривијално и не е нешто многу комплицирано. Сè што треба да направите е да го ставите сертификатот CA на вашиот OIDC сервер /etc/kubernetes/pki/oidc-ca.pem и додадете ги потребните опции за kube-apiserver.
За да го направите ова, ажурирајте /etc/kubernetes/manifests/kube-apiserver.yaml на сите ваши господари:

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

И, исто така, ажурирајте ја конфигурацијата kubeadm во кластерот за да не ги изгубите овие поставки за време на ажурирањето:

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

Ова го комплетира поставувањето на Kubernetes. Можете да ги повторите овие чекори низ сите ваши кластери на Kubernetes.

Почетно овластување

По овие чекори, веќе ќе имате конфигуриран кластер Kubernetes со овластување OIDC. Единствената поента е што вашите корисници сè уште немаат конфигуриран клиент, како и сопствена kubeconfig. За да го решите овој проблем, треба да го конфигурирате автоматското издавање на kubeconfig на корисниците по успешното овластување.

За да го направите ова, можете да користите специјални веб-апликации кои ви дозволуваат да го потврдите корисникот и потоа да го преземете готовиот kubeconfig. Еден од најзгодните е Куберос, ви овозможува да ги опишете сите Kubernetes кластери во една конфигурација и лесно да се префрлате помеѓу нив.

За да го конфигурирате Kuberos, доволно е да го опишете шаблонот за kubeconfig и да го извршите со следните параметри:

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

За повеќе детали видете користење на Github.

Исто така е можно да се користи кубелогин ако сакате да авторизирате директно на компјутерот на корисникот. Во овој случај, корисникот ќе отвори прелистувач со формулар за авторизација на localhost.

Добиената kubeconfig може да се провери на страницата jwt.io. Само копирајте ја вредноста users[].user.auth-provider.config.id-token од вашиот kubeconfig до формулар на страницата и веднаш добијте го транскриптот.

Поставување RBAC

Кога го конфигурирате RBAC, можете да се повикате и на корисничкото име (поле name во токенот jwt) и за група корисници (поле groups во jwt токен). Еве пример за поставување дозволи за група 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

Повеќе примери за RBAC може да се најдат во официјална Kubernetes документација

Поставување автентик-прокси

Има прекрасен проект клучен чувар, кој ви овозможува да обезбедите која било апликација со тоа што ќе му дозволите на корисникот да се автентицира на серверот OIDC. Ќе ви покажам како можете да го поставите користејќи ја контролната табла на Kubernetes како пример:

табла-прокси.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

Извор: www.habr.com

Додадете коментар