ما مجوز LDAP را به Kubernetes متصل می کنیم

ما مجوز LDAP را به Kubernetes متصل می کنیم

یک آموزش کوچک در مورد نحوه استفاده از Keycloak برای اتصال Kubernetes به سرور LDAP و راه اندازی واردات کاربران و گروه ها. این به شما امکان می‌دهد RBAC را برای کاربران خود راه‌اندازی کنید و از auth-proxy برای محافظت از داشبورد Kubernetes و سایر برنامه‌هایی که نمی‌دانند چگونه خود را مجاز کنند، استفاده کنید.

نصب Keycloak

بیایید فرض کنیم که شما از قبل یک سرور 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 غیرفعال کنیم:

محدوده های مشتری -> پست الکترونیک (ایمیل) -> نقشه برداران -> ایمیل تأییده شده است (حذف)

حالا بیایید فدراسیون را راه اندازی کنیم، برای این کار می رویم:

فدراسیون کاربران -> افزودن ارائه دهنده… -> 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

قلمرو 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/*

آدرس ادمین
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.

امکان استفاده نیز وجود دارد kubelogin اگر می خواهید مستقیماً روی رایانه کاربر مجوز دهید. در این صورت، کاربر یک مرورگر با فرم مجوز در لوکال هاست باز می کند.

نتیجه 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-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

منبع: www.habr.com

اضافه کردن نظر