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

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

Kubernetes-ті LDAP серверіне қосу және пайдаланушылар мен топтарды импорттауды орнату үшін Keycloak қолданбасын пайдалану туралы шағын оқулық. Бұл пайдаланушыларыңыз үшін RBAC орнатуға және Kubernetes бақылау тақтасын және өзін авторизациялауды білмейтін басқа қолданбаларды қорғау үшін аутентификациялық проксиді пайдалануға мүмкіндік береді.

Пернелерді орнату

Сізде LDAP сервері бар деп есептейік. Бұл Active Directory, FreeIPA, OpenLDAP немесе кез келген нәрсе болуы мүмкін. Егер сізде LDAP сервері болмаса, пайдаланушыларды тікелей Keycloak интерфейсінде жасай аласыз немесе жалпыға қолжетімді oidc провайдерлерін (Google, Github, Gitlab) пайдалана аласыз, нәтиже дерлік бірдей болады.

Ең алдымен, Keycloak-тың өзін орнатайық, орнатуды бөлек немесе тікелей Kubernetes кластеріне орындауға болады, әдетте, егер сізде бірнеше Kubernetes кластері болса, оны бөлек орнату оңайырақ болар еді. Екінші жағынан, сіз әрқашан пайдалана аласыз ресми руль диаграммасы және оны тікелей кластеріңізге орнатыңыз.

Keycloak деректерін сақтау үшін сізге дерекқор қажет. Әдепкі болып табылады h2 (барлық деректер жергілікті жерде сақталады), бірақ оны пайдалану да мүмкін postgres, mysql немесе mariadb.
Егер сіз әлі де Keycloak бағдарламасын бөлек орнатуды шешсеңіз, толығырақ нұсқауларды мына жерден таба аласыз ресми құжаттама.

Федерацияны құру

Ең алдымен, жаңа патшалық құрайық. Realm - бұл біздің қолданбаның кеңістігі. Әрбір қолданбаның әртүрлі пайдаланушылары мен авторизация параметрлері бар өз аймағы болуы мүмкін. Негізгі аймақты 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

DN байланыстыру
uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org

Тіркелгі деректерін байланыстыру
<password>

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

Kerberos патшалығы:
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 пайдаланушыларын қабылдайтын қолданба) жасайық. Барайық:

клиенттер -> жасау

таңдау
құн

Тұтынушы идентификаторы
kubernetes

Кіру түрі
confidenrial

Түбірлік URL
http://kubernetes.example.org/

Жарамды қайта бағыттау URI мекенжайлары
http://kubernetes.example.org/*

Әкімші URL мекенжайы
http://kubernetes.example.org/

Біз сондай-ақ топтар үшін аумақты жасаймыз:

Клиент ауқымдары -> жасау

таңдау
құн

Үлгі
No template

Толық аты-жөніңіз
groups

Толық топтық жол
false

Және олар үшін карта жасаушыны орнатыңыз:

Клиент ауқымдары -> топтар -> Карта жасаушылар -> жасау

таңдау
құн

Толық аты-жөніңіз
groups

Карташы түрі
Group membership

Токен шағымының атауы
groups

Енді біз клиент ауқымында салыстыру тобын қосуымыз керек:

клиенттер -> кубернеттер -> Клиент ауқымдары -> Әдепкі клиент аумақтары

Біз таңдаймыз топтар в Қолжетімді тұтынушы аумақтарыбіз басамыз Таңдалған қосу

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

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

таңдау
құн

Авторизация қосулы
ON

Итерейік Сақтау және осымен клиентті орнату аяқталды, енді қойындыда

клиенттер -> кубернеттер -> куәлік

ала аласыз құпия оны кейінірек қолданамыз.

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 файлын жүктеп алуға болады. Ең қолайлыларының бірі Куберос, ол барлық 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 құжаттамасы

Auth-proxy орнату

Керемет жоба бар қақпашы, ол пайдаланушыға 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

пікір қалдыру