ЛДАП ауторизацију причвршћујемо за Кубернетес

ЛДАП ауторизацију причвршћујемо за Кубернетес

Кратак водич о томе како можете да користите Кеицлоак да повежете Кубернетес са вашим ЛДАП сервером и конфигуришете увоз корисника и група. Ово ће вам омогућити да конфигуришете РБАЦ за своје кориснике и користите аутх-проки да заштитите Кубернетес Дасхбоард и друге апликације које не могу да се аутентификују.

Инсталирање Кеицлоак-а

Претпоставимо да већ имате ЛДАП сервер. Ово може бити Ацтиве Дирецтори, ФрееИПА, ОпенЛДАП или било шта друго. Ако немате ЛДАП сервер, онда у принципу можете креирати кориснике директно у Кеицлоак интерфејсу или користити јавне оидц провајдере (Гоогле, Гитхуб, Гитлаб), резултат ће бити скоро исти.

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

За складиштење Кеицлоак података биће вам потребна база података. Подразумевано је h2 (сви подаци се чувају локално), али је такође могуће користити postgres, mysql или mariadb.
Ако ипак одлучите да засебно инсталирате Кеицлоак, детаљнија упутства ћете пронаћи у званична документација.

Оснивање федерације

Пре свега, хајде да створимо ново царство. Реалм је простор наше апликације. Свака апликација може имати своје подручје са различитим корисницима и поставкама ауторизације. Мастер царство користи сам Кеицлоак и погрешно је користити га за било шта друго.

Притисни Додајте област

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

Име
kubernetes

Показати име
Kubernetes

ХТМЛ приказано име
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >

Кубернетес подразумевано проверава да ли је имејл корисника потврђен или не. Пошто користимо сопствени ЛДАП сервер, ова провера ће се скоро увек вратити false. Хајде да онемогућимо представљање ове опције у Кубернетес-у:

Опсези клијента -> Е-pošta -> Мапери -> Имејл је верификован (Избриши)

Сада да поставимо федерацију; да бисте то урадили, идите на:

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

Ево примера подешавања за ФрееИПА:

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

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

Продавац
Red Hat Directory Server

УУИД ЛДАП атрибут
ipauniqueid

УРЛ везе
ldaps://freeipa.example.org

Корисници ДН
cn=users,cn=accounts,dc=example,dc=org

Бинд ДН
uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org

Бинд Цредентиал
<password>

Дозволи Керберос аутентификацију:
on

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

Директор сервера:
HTTP/[email protected]

КеиТаб:
/etc/krb5.keytab

Корисник keycloak-svc потребно је унапред креирати на нашем ЛДАП серверу.

У случају Ацтиве Дирецтори, само треба да изаберете Добављач: Ацтиве Дирецтори а неопходна подешавања ће се аутоматски унети у образац.

Притисни саве

Сада идемо даље:

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

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

Лдап атрибут
givenName

Сада омогућимо групно мапирање:

Корисничка федерација -> фрееипа.екампле.орг -> Мапери -> Створити

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

Име
groups

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

ЛДАП групе ДН
cn=groups,cn=accounts,dc=example,dc=org

Корисничке групе преузимају стратегију
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE

Сада када је подешавање федерације завршено, пређимо на подешавање клијента.

Подешавање клијента

Хајде да направимо новог клијента (апликацију која ће примати кориснике са Кеицлоак-а). Идемо даље:

Клијенти -> Створити

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

ИД клијента
kubernetes

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

Роот УРЛ
http://kubernetes.example.org/

Важећи УРИ за преусмеравање
http://kubernetes.example.org/*

Админ УРЛ
http://kubernetes.example.org/

Хајде да направимо и опсег за групе:

Цлиент Сцопес -> Створити

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

Шаблон
No template

Име
groups

Пуна путања групе
false

И подесите мапер за њих:

Цлиент Сцопес -> групе -> Мапери -> Створити

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

Име
groups

Маппер Типе
Group membership

Назив захтева за токен
groups

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

Клијенти -> кубернетес -> Цлиент Сцопес -> Подразумевани опсег клијента

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

Сада да конфигуришемо аутентификацију наше апликације, идите на:

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

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

Ауторизација је омогућена
ON

Хајде да притиснемо сачувати и тиме је подешавање клијента завршено, сада на картици

Клијенти -> кубернетес -> акредитив

можете добити тајна које ћемо даље користити.

Конфигурисање Кубернетеса

Подешавање Кубернетеса за ОИДЦ ауторизацију је прилично тривијално и није много компликовано. Све што треба да урадите је да убаците ЦА сертификат вашег ОИДЦ сервера /etc/kubernetes/pki/oidc-ca.pem и додајте потребне опције за кубе-аписервер.
Да бисте то урадили, ажурирајте /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
...

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

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

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

Прво овлашћење

Након ових корака, већ ћете имати Кубернетес кластер са конфигурисаним ОИДЦ овлашћењем. Једина ствар је да ваши корисници још немају конфигурисан клијент или сопствену кубецонфиг. Да бисте решили овај проблем, потребно је да конфигуришете аутоматску дистрибуцију кубецонфиг корисницима након успешне ауторизације.

Да бисте то урадили, можете користити посебне веб апликације које вам омогућавају да аутентификујете корисника, а затим преузмете готову кубецонфиг. Један од најпогоднијих је Куберос, омогућава вам да опишете све Кубернетес кластере у једној конфигурацији и лако прелазите између њих.

Да бисте конфигурисали Куберос, само опишите шаблон за кубецонфиг и покрените га са следећим параметрима:

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

За детаљније информације погледајте Употреба на Гитхуб-у.

Такође је могуће користити кубелогин ако желите да ауторизујете директно на рачунару корисника. У овом случају, корисник ће отворити претраживач са формуларом за ауторизацију на локалном хосту.

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

Постављање РБАЦ-а

Када конфигуришете РБАЦ, можете се позвати и на корисничко име (поље name у токену јвт) и по групи корисника (поље groups у токену јвт). Ево примера подешавања права за групу kubernetes-default-namespace-admins:

кубернетес-дефаулт-намеспаце-админс.иамл

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

Више примера за РБАЦ може се наћи у званична Кубернетес документација

Подешавање аутх-проксија

Постоји диван пројекат кључар-чувар, који вам омогућава да заштитите било коју апликацију пружајући кориснику могућност да се аутентификује на ОИДЦ серверу. Показаћу вам како да га конфигуришете користећи Кубернетес Дасхбоард као пример:

дасхбоард-проки.иамл

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

Извор: ввв.хабр.цом

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