LDAP авторизациясын Kubernetesке бекитебиз

LDAP авторизациясын Kubernetesке бекитебиз

Kubernetesти LDAP сервериңизге туташтыруу жана колдонуучулардын жана топтордун импортун конфигурациялоо үчүн Keycloak кантип колдонсоңуз болору боюнча кыскача окуу куралы. Бул сизге RBACти колдонуучуларыңыз үчүн конфигурациялоого жана Kubernetes Dashboard жана өздөрүн аутентификациялай албаган башка колдонмолорду коргоо үчүн аутентификациялык проксиди колдонууга мүмкүндүк берет.

Keycloak орнотуу

Келиңиз, сизде LDAP сервери бар деп коёлу. Бул Active Directory, FreeIPA, OpenLDAP же башка нерсе болушу мүмкүн. Эгерде сизде LDAP сервери жок болсо, анда сиз колдонуучуларды түздөн-түз Keycloak интерфейсинде түзө аласыз же коомдук oidc провайдерлерин (Google, Github, Gitlab) колдоно аласыз, натыйжа дээрлик бирдей болот.

Биринчиден, Keycloakтин өзүн орнотуп алалы. Орнотуу өзүнчө же түздөн-түз Kubernetes кластеринде аткарылышы мүмкүн. Эреже катары, бир нече Kubernetes кластериңиз болсо, аны өзүнчө орнотуу оңой болмок. Башка жагынан алганда, сиз ар дайым колдоно аласыз расмий руль диаграммасы жана аны түздөн-түз кластериңизге орнотуңуз.

Keycloak маалыматтарын сактоо үчүн сизге маалымат базасы керек болот. Демейки болуп саналат h2 (бардык маалыматтар жергиликтүү сакталат), бирок аны колдонууга да болот postgres, mysql же mariadb.
Эгер сиз дагы эле Keycloakти өзүнчө орнотууну чечсеңиз, анда кененирээк нускамаларды таба аласыз расмий документтер.

Федерацияны түзүү

Биринчиден, жаңы чөйрөнү түзөлү. Realm - бул биздин колдонмонун мейкиндиги. Ар бир колдонмо ар кандай колдонуучулар жана авторизация орнотуулары менен өз чөйрөсүнө ээ болушу мүмкүн. Master чөйрөсүн Keycloak өзү колдонот жана аны башка нерсе үчүн колдонуу туура эмес.

басма сөз Аймак кошуу

тандоо
маани

ысым
kubernetes

Дисплей аты
Kubernetes

HTML дисплей аты
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >

Kubernetes демейки боюнча колдонуучунун электрондук почтасынын ырасталган же ырасталбаганын текшерет. Биз өзүбүздүн LDAP серверибизди колдонгондуктан, бул текшерүү дээрлик дайыма кайтып келет false. Келгиле, бул параметрдин Kubernetesтеги өкүлчүлүгүн өчүрөлү:

Кардар чөйрөлөрү -> электрондук почта -> Картачылар -> Электрондук почта ырасталды (Жок кылуу)

Эми федерацияны түзөлү; бул үчүн төмөнкүгө өтүңүз:

Колдонуучулардын федерациясы -> Провайдерди кошуу… -> лап

Бул жерде 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

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

Байланыш маалымат
<password>

Kerberos аутентификациясына уруксат берүү:
on

Kerberos Realm:
EXAMPLE.ORG

Сервердин директору:
HTTP/[email protected]

KeyTab:
/etc/krb5.keytab

мүчө keycloak-svc LDAP серверибизде алдын ала түзүлүшү керек.

Active Directory учурда, сиз жөн гана тандоо керек Сатуучу: Active Directory жана керектүү орнотуулар формага автоматтык түрдө киргизилет.

басма сөз Сактоо

Эми уланталы:

Колдонуучулардын федерациясы -> freeipa.example.org -> Картачылар -> Биринчи аты

тандоо
маани

Ldap атрибуту
givenName

Эми топтун картасын иштетели:

Колдонуучулардын федерациясы -> freeipa.example.org -> Картачылар -> түзүү

тандоо
маани

ысым
groups

Картачтын түрү
group-ldap-mapper

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

Колдонуучу топторунун алуу стратегиясы
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE

Эми федерацияны орнотуу аяктагандан кийин, кардарды орнотууга өтөлү.

Кардар орнотуу

Келгиле, жаңы кардарды түзөлү (Keycloak колдонуучуларын кабыл ала турган тиркеме). Улантайлы:

Кардарлар -> түзүү

тандоо
маани

Кардардын ID
kubernetes

Кирүү түрү
confidenrial

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

Жарактуу Redirect URI'лери
http://kubernetes.example.org/*

Админ URL
http://kubernetes.example.org/

Келгиле, топтор үчүн аймакты түзөлү:

Client Scopes -> түзүү

тандоо
маани

Калып
No template

ысым
groups

Толук топ жолу
false

Жана алар үчүн карта түзүүчүнү орнотуңуз:

Client Scopes -> топтор -> Картачылар -> түзүү

тандоо
маани

ысым
groups

Картачынын түрү
Group membership

Токен доо аты
groups

Эми биз кардарлардын чөйрөсүндө карта тобун иштетишибиз керек:

Кардарлар -> kubernetes -> Client Scopes -> Демейки кардар чөйрөлөрү

тандоо топтор в Жеткиликтүү кардар чөйрөлөрүчыкылдатуу Тандалган кошуу

Эми биздин колдонмонун аутентификациясын конфигурациялайлы, өтүңүз:

Кардарлар -> kubernetes

тандоо
маани

Авторизация иштетилген
ON

басалы куткаруу жана муну менен кардар орнотуу аяктады, азыр өтмөктө

Кардарлар -> kubernetes -> ишеним грамоталары

ала аласыз сыр аны биз мындан ары колдонобуз.

Kubernetes конфигурацияланууда

OIDC авторизациясы үчүн Kubernetes орнотуу өтө маанилүү жана өтө татаал эмес. Болгону OIDC сервериңиздин CA сертификатын салсаңыз болот /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 кластерлериңизде кайталасаңыз болот.

Баштапкы уруксат

Бул кадамдардан кийин сизде конфигурацияланган OIDC авторизациясы бар Kubernetes кластери болот. Бир гана нерсе, колдонуучуларыңызда конфигурацияланган кардар же өздөрүнүн kubeconfig жок. Бул көйгөйдү чечүү үчүн сиз ийгиликтүү авторизациядан кийин kubeconfig колдонуучуларга автоматтык түрдө бөлүштүрүүнү конфигурациялашыңыз керек.

Бул үчүн, сиз колдонуучунун аутентификациясын жана андан кийин даяр kubeconfig жүктөп алууга мүмкүндүк берген атайын веб-тиркемелерди колдоно аласыз. Эң ыңгайлууларынын бири Kuberos, ал бардык Kubernetes кластерлерин бир конфигурацияда сүрөттөп, алардын ортосунда оңой которулууга мүмкүндүк берет.

Kuberos конфигурациялоо үчүн, жөн гана kubeconfig үчүн шаблонду сүрөттөп, аны төмөнкү параметрлер менен иштетиңиз:

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

Көбүрөөк маалымат алуу үчүн караңыз колдонуу Github боюнча.

Аны колдонууга да болот kubelogin эгер сиз түздөн-түз колдонуучунун компьютеринде авторизациялоону кааласаңыз. Бул учурда, колдонуучу 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 документтери

Auth-proxy орнотуу

Керемет проект бар ачкыч-дарбазачы, бул колдонуучуну OIDC серверине аутентификациялоо мүмкүнчүлүгүн берүү менен каалаган тиркемени коргоого мүмкүндүк берет. Мен сизге мисал катары Kubernetes Dashboard аркылуу аны кантип конфигурациялоону көрсөтөм:

башкаруу панели-прокси.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

Source: www.habr.com

Комментарий кошуу