اسان Keycloak استعمال ڪندي Kubernetes ڏانهن ActiveDirectory جي اختيار کي مضبوط ڪريون ٿا

هي مضمون اڳ ۾ ئي وڌائڻ لاء لکيو ويو آهي موجود، پر Microsoft ActiveDirectory سان بنڊل جي خاصيتن جي باري ۾ ڳالهائي ٿو، ۽ ان کي مڪمل ڪري ٿو.

هن آرٽيڪل ۾ آئون توهان کي ٻڌايان ٿو ته ڪيئن انسٽال ۽ ترتيب ڏيڻ:

  • چاٻي هڪ اوپن سورس پروجيڪٽ آهي. جيڪو ايپليڪيشنن لاءِ داخلا جو هڪ واحد نقطو مهيا ڪري ٿو. ڪيترن ئي پروٽوڪولن سان ڪم ڪري ٿو، بشمول LDAP ۽ OpenID جنهن ۾ اسان دلچسپي رکون ٿا.
  • چاٻي جو دربان - ريورس پراکسي ايپليڪيشن جيڪا توهان کي اجازت ڏئي ٿي ڪيڪلوڪ ذريعي اختيار کي ضم ڪرڻ.
  • گنگا وي - هڪ ايپليڪيشن جيڪا kubectl لاءِ هڪ ترتيب ٺاهي ٿي جنهن سان توهان لاگ ان ڪري سگهو ٿا ۽ OpenID ذريعي Kubernetes API سان ڳنڍي سگهو ٿا.

ڪبرنيٽس ۾ اجازتون ڪيئن ڪم ڪن ٿيون.

اسان RBAC استعمال ڪندي صارف / گروپ جي حقن کي منظم ڪري سگھون ٿا، ان بابت اڳ ۾ ئي آرٽيڪل جو هڪ گروپ ٺاهيو ويو آهي، مان ان تي تفصيل سان نه ڳالهائيندس. مسئلو اهو آهي ته توهان صارف جي حقن کي محدود ڪرڻ لاءِ RBAC استعمال ڪري سگهو ٿا، پر ڪبرنيٽس کي صارفين جي باري ۾ ڪا به خبر ناهي. اهو ظاهر ٿئي ٿو ته اسان کي ڪبرنيٽس ۾ صارف جي ترسيل ميڪانيزم جي ضرورت آهي. هن کي ڪرڻ لاء، اسان Kuberntes OpenID ۾ هڪ مهيا ڪندڙ شامل ڪنداسين، جيڪو چوندو ته اهڙي صارف واقعي موجود آهي، ۽ Kubernetes پاڻ کيس حق ڏيندو.

جي تياري

  • توهان کي ڪبرنيٽس ڪلستر يا منيڪوب جي ضرورت پوندي
  • فعال ڊاريڪٽري
  • ڊومين:
    keycloak.example.org
    kubernetes-dashboard.example.org
    gangway.example.org
  • ڊومينز لاءِ سرٽيفڪيٽ يا خود دستخط ٿيل سرٽيفڪيٽ

مان ان ڳالهه تي غور نه ڪندس ته ڪيئن ٺاهيو پاڻمرادو دستخط ٿيل سرٽيفڪيٽ، توهان کي 2 سرٽيفڪيٽ ٺاهڻ گهرجن، هي آهي روٽ (سرٽيفڪيٽ اٿارٽي) ۽ وائلڊ ڪارڊ ڪلائنٽ لاءِ *.example.org ڊومين

توھان کان پوءِ سرٽيفڪيٽ حاصل ڪرڻ / جاري ڪرڻ کان پوءِ، ڪلائنٽ کي Kubernetes ۾ شامل ڪيو وڃي، ان لاءِ اسان ان لاءِ راز ٺاھيون ٿا:

kubectl create secret tls tls-keycloak --cert=example.org.crt --key=example.org.pem

اڳيون، اسان ان کي استعمال ڪنداسين اسان جي Ingress ڪنٽرولر لاء.

Keycloak لڳائڻ

مون فيصلو ڪيو ته ان لاءِ تيار ڪيل حل استعمال ڪرڻ جو آسان طريقو آهي، يعني هيلم چارٽس.

مخزن کي انسٽال ڪريو ۽ ان کي اپڊيٽ ڪريو:

helm repo add codecentric https://codecentric.github.io/helm-charts
helm repo update

ھيٺ ڏنل مواد سان ھڪڙي keycloak.yml فائل ٺاھيو:

keycloak.yml

keycloak:
  # Имя администратора
  username: "test_admin"
  # Пароль администратор  
  password: "admin"
  # Эти флаги нужны что бы позволить загружать в Keycloak скрипты прямо через web морду. Это нам 
  понадобиться что бы починить один баг, о котором ниже.
  extraArgs: "-Dkeycloak.profile.feature.script=enabled -Dkeycloak.profile.feature.upload_scripts=enabled" 
  # Включаем ingress, указываем имя хоста и сертификат который мы предварительно сохранили в secrets
  ingress:
    enabled: true 
    path: /
    annotations:
      kubernetes.io/ingress.class: nginx
      ingress.kubernetes.io/affinity: cookie
    hosts:
      - keycloak.example.org
    tls:
    - hosts:
        - keycloak.example.org
      secretName: tls-keycloak
  # Keycloak для своей работы требует базу данных, в тестовых целях я разворачиваю Postgresql прямо в Kuberntes, в продакшене так лучше не делать!
  persistence:
    deployPostgres: true
    dbVendor: postgres

postgresql:
  postgresUser: keycloak
  postgresPassword: ""
  postgresDatabase: keycloak
  persistence:
    enabled: true

وفاق جي جوڙجڪ

اڳيون، ويب انٽرفيس ڏانھن وڃو keycloak.example.org

کاٻي ڪنڊ ۾ ڪلڪ ڪريو علائقو شامل ڪريو

چاٻي
قدر

نالو
ڪبرنيٽ

نالي جو نالو
ڪوبنيٿس

صارف جي اي ميل جي تصديق کي بند ڪريو:
ڪلائنٽ اسڪوپس -> اي ميل -> ميپرز -> اي ميل تصديق ٿيل (خارج ڪريو)

اسان ActiveDirectory مان صارفين کي درآمد ڪرڻ لاءِ فيڊريشن قائم ڪيو، مان هيٺ اسڪرين شاٽ ڇڏيندس، مان سمجهان ٿو ته اهو واضح ٿي ويندو.

يوزر فيڊريشن -> فراهم ڪندڙ شامل ڪريو... -> ldap

وفاق جي جوڙجڪاسان Keycloak استعمال ڪندي Kubernetes ڏانهن ActiveDirectory جي اختيار کي مضبوط ڪريون ٿا
اسان Keycloak استعمال ڪندي Kubernetes ڏانهن ActiveDirectory جي اختيار کي مضبوط ڪريون ٿا

جيڪڏهن سڀ ٺيڪ آهي، پوء بٽڻ کي دٻائڻ کان پوء سڀني صارفين کي هم وقت سازي ڪريو توهان صارفين جي ڪامياب درآمد بابت هڪ پيغام ڏسندا.

اڳيون اسان کي اسان جي گروپن کي نقشي ڪرڻ جي ضرورت آهي

يوزر فيڊريشن --> ldap_localhost --> Mappers --> Create

نقش نگاري ٺاهڻاسان Keycloak استعمال ڪندي Kubernetes ڏانهن ActiveDirectory جي اختيار کي مضبوط ڪريون ٿا

ڪسٽمر سيٽ اپ

اهو ضروري آهي ته هڪ ڪلائنٽ ٺاهيو، Keycloak جي لحاظ کان، هي هڪ ايپليڪيشن آهي جيڪو هن کان اختيار ڪيو ويندو. مان ڳاڙهي رنگ ۾ اسڪرين شاٽ ۾ اهم نقطن کي اجاگر ڪندس.

ڪلائنٽ -> ٺاهيو

ڪسٽمر سيٽ اپاسان Keycloak استعمال ڪندي Kubernetes ڏانهن ActiveDirectory جي اختيار کي مضبوط ڪريون ٿا

اچو ته گروپن لاءِ اسڪوپ ٺاهيون:

ڪلائنٽ اسڪوپس -> ٺاهيو

گنجائش ٺاهيواسان Keycloak استعمال ڪندي Kubernetes ڏانهن ActiveDirectory جي اختيار کي مضبوط ڪريون ٿا

۽ انھن لاء ھڪڙو نقشو ٺاھيو:

ڪلائنٽ اسڪوپس -> گروپس -> ميپرز -> ٺاھيو

ماپيندڙاسان Keycloak استعمال ڪندي Kubernetes ڏانهن ActiveDirectory جي اختيار کي مضبوط ڪريون ٿا

اسان جي گروپن جي نقشي کي ڊفالٽ ڪلائنٽ اسڪوپس ۾ شامل ڪريو:

ڪلائنٽ -> ڪبرنيٽس -> ڪلائنٽ اسڪوپس -> ڊفالٽ ڪلائنٽ اسڪوپس
چونڊيو گروهن в دستياب ڪلائنٽ اسڪوپس، دٻايو منتخب ٿيل شامل ڪريو

اسان اهو راز حاصل ڪريون ٿا (۽ ان کي ٿريڊ ۾ لکو) جيڪو اسان ڪيڪلوڪ ۾ اختيار ڪرڻ لاءِ استعمال ڪنداسين:

ڪلائنٽ -> ڪبرنيٽس -> سندون -> راز
هي سيٽ اپ مڪمل ڪري ٿو، پر مون کي هڪ غلطي هئي جڏهن، ڪامياب اختيار کان پوء، مون کي هڪ غلطي 403 ملي. بگ رپورٽ.

درست ڪريو:

ڪلائنٽ اسڪوپس -> ڪردار -> ميپرز -> ٺاھيو

ميپراسان Keycloak استعمال ڪندي Kubernetes ڏانهن ActiveDirectory جي اختيار کي مضبوط ڪريون ٿا

اسڪرپٽ ڪوڊ

// add current client-id to token audience
token.addAudience(token.getIssuedFor());

// return token issuer as dummy result assigned to iss again
token.getIssuer();

Kubernetes ترتيب ڏيڻ

اسان کي بيان ڪرڻ جي ضرورت آهي ته اسان جي روٽ سرٽيفڪيٽ سائيٽ مان ڪٿي آهي، ۽ OIDC فراهم ڪندڙ ڪٿي واقع آهي.
ائين ڪرڻ لاءِ، فائل کي ايڊٽ ڪريو /etc/kubernetes/manifests/kube-apiserver.yaml

kube-apiserver.yaml


...
spec:
  containers:
  - command:
    - kube-apiserver
...
    - --oidc-ca-file=/var/lib/minikube/certs/My_Root.crt
    - --oidc-client-id=kubernetes
    - --oidc-groups-claim=groups
    - --oidc-issuer-url=https://keycloak.example.org/auth/realms/kubernetes
    - --oidc-username-claim=email
...

ڪلستر ۾ kubeadm config کي اپڊيٽ ڪريو:

kubeadmconfig

kubectl edit -n kube-system configmaps kubeadm-config


...
data:
  ClusterConfiguration: |
    apiServer:
      extraArgs:
        oidc-ca-file: /var/lib/minikube/certs/My_Root.crt
        oidc-client-id: kubernetes
        oidc-groups-claim: groups
        oidc-issuer-url: https://keycloak.example.org/auth/realms/kubernetes
        oidc-username-claim: email
...

تصنيف پراڪسي ترتيب ڏيڻ

توھان استعمال ڪري سگھو ٿا keycloak gatekeper to protect your web application. انهي حقيقت کان علاوه ته هي ريورس پراکسي صارف کي اجازت ڏيندو ته صفحو ڏيکارڻ کان اڳ، اهو پڻ توهان جي باري ۾ معلومات کي هيڊر ۾ آخري ايپليڪيشن تائين پهچائيندو. اهڙيء طرح، جيڪڏهن توهان جي ايپليڪيشن OpenID کي سپورٽ ڪري ٿي، پوء صارف کي فوري طور تي مجاز آهي. ڪبرنيٽس ڊيش بورڊ جي مثال تي غور ڪريو

انسٽال ڪرڻ Kubernetes ڊيش بورڊ


helm install stable/kubernetes-dashboard --name dashboard -f values_dashboard.yaml

values_dashboard.yaml

enableInsecureLogin: true
service:
  externalPort: 80
rbac:
  clusterAdminRole: true
  create: true
serviceAccount:
  create: true
  name: 'dashboard-test'

رسائي جا حق مقرر ڪرڻ:

اچو ته هڪ ClusterRoleBinding ٺاهيون جيڪو DataOPS گروپ ۾ استعمال ڪندڙن لاءِ ڪلسٽر منتظم حق (معياري ClusterRole cluster-admin) ڏيندو.


kubectl apply -f rbac.yaml

rbac.yaml


apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: dataops_group
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: Group
  name: DataOPS

انسٽال ڪريو keycloak دربان:


helm repo add gabibbo97 https://gabibbo97.github.io/charts/
helm repo update
helm install gabibbo97/keycloak-gatekeeper --version 2.1.0 --name keycloak-gatekeeper -f values_proxy.yaml

values_proxy.yaml



# Включаем ingress
ingress:
  enabled: true
  annotations:
    kubernetes.io/ingress.class: nginx
  path: /
  hosts:
    - kubernetes-dashboard.example.org
  tls:
   - secretName: tls-keycloak
     hosts:
       - kubernetes-dashboard.example.org

# Говорим где мы будем авторизовываться у OIDC провайдера
discoveryURL: "https://keycloak.example.org/auth/realms/kubernetes"
# Имя клиента которого мы создали в Keycloak
ClientID: "kubernetes"
# Secret который я просил записать
ClientSecret: "c6ec03b8-d0b8-4cb6-97a0-03becba1d727"
# Куда перенаправить в случае успешной авторизации. Формат <SCHEMA>://<SERVICE_NAME>.><NAMESAPCE>.<CLUSTER_NAME>
upstreamURL: "http://dashboard-kubernetes-dashboard.default.svc.cluster.local"
# Пропускаем проверку сертификата, если у нас самоподписанный
skipOpenidProviderTlsVerify: true
# Настройка прав доступа, пускаем на все path если мы в группе DataOPS
rules:
  - "uri=/*|groups=DataOPS"

ان کان پوء، جڏھن اوھان کي وڃڻ جي ڪوشش ڪئي kubernetes-dashboard.example.org، اسان کي ڪيڪلوڪ ڏانهن منتقل ڪيو ويندو ۽ ڪامياب اختيار جي صورت ۾ اسان اڳ ۾ ئي لاگ ان ٿيل ڊيش بورڊ ڏانهن ويندا.

gangway لڳائڻ

سهولت لاءِ، توهان هڪ گنگ وي شامل ڪري سگهو ٿا جيڪو kubectl لاءِ هڪ config فائل ٺاهيندو، جنهن جي مدد سان اسان پنهنجي صارف جي تحت Kubernetes ۾ حاصل ڪنداسين.


helm install --name gangway stable/gangway -f values_gangway.yaml

values_gangway.yaml


gangway:
  # Произвольное имя кластера
  clusterName: "my-k8s"
  # Где у нас OIDC провайдер
  authorizeURL: "https://keycloak.example.org/auth/realms/kubernetes/protocol/openid-connect/auth"
  tokenURL: "https://keycloak.example.org/auth/realms/kubernetes/protocol/openid-connect/token"
  audience: "https://keycloak.example.org/auth/realms/kubernetes/protocol/openid-connect/userinfo"
  # Теоритически сюда можно добавить groups которые мы замапили
  scopes: ["openid", "profile", "email", "offline_access"]
  redirectURL: "https://gangway.example.org/callback"
  # Имя клиента
  clientID: "kubernetes"
  # Секрет
  clientSecret: "c6ec03b8-d0b8-4cb6-97a0-03becba1d727"
  # Если оставить дефолтное значние, то за имя пользователя будет братья <b>Frist name</b> <b>Second name</b>, а при "sub" его логин
  usernameClaim: "sub"
  # Доменное имя или IP адресс API сервера
  apiServerURL: "https://192.168.99.111:8443"

# Включаем Ingress
ingress:
  enabled: true
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/proxy-buffer-size: "64k"
  path: /
  hosts:
  - gangway.example.org
  tls:
  - secretName: tls-keycloak
    hosts:
      - gangway.example.org

# Если используем самоподписанный сертификат, то его(открытый корневой сертификат) надо указать.
trustedCACert: |-
 -----BEGIN CERTIFICATE-----
 MIIDVzCCAj+gAwIBAgIBATANBgkqhkiG9w0BAQsFADA1MQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRGF0YU9QUzEUMBIGA1UEAxMLbXkgcm9vdCBrZXkwHhcNMjAwMjE0MDkxODAwWhcNMzAwMjE0MDkxODAwWjA1MQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRGF0YU9QUzEUMBIGA1UEAxMLbXkgcm9vdCBrZXkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDyP749PqqIRwNSqaK6qr0Zsi03G4PTCUlgaYTPZuMrwUVPK8xX2dWWs9MPRMOdXpgr8aSTZnVfmelIlVz4D7o2vK5rfmAe9GPcK0WbwKwXyhFU0flS9sU/g46ogHFrk03SZxQAeJhMLfEmAJm8LF5HghtGDs3t4uwGsB95o+lqPLiBvxRB8ZS3jSpYpvPgXAuZWKdZUQ3UUZf0X3hGLp7uIcIwJ7i4MduOGaQEO4cePeEJy9aDAO6qV78YmHbyh9kaW+1DL/Sgq8NmTgHGV6UOnAPKHTnMKXl6KkyUz8uLBGIdVhPxrlzG1EzXresJbJenSZ+FZqm3oLqZbw54Yp5hAgMBAAGjcjBwMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFHISTOU/6BQqqnOZj+1xJfxpjiG0MAsGA1UdDwQEAwIBBjARBglghkgBhvhCAQEEBAMCAAcwHgYJYIZIAYb4QgENBBEWD3hjYSBjZXJ0aWZpY2F0ZTANBgkqhkiG9w0BAQsFAAOCAQEAj7HC8ObibwOLT4ZYmISJZwub9lcE0AZ5cWkPW39j/syhdbbqjK/6jy2D3WUEbR+s1Vson5Ov7JhN5In2yfZ/ByDvBnoj7CP8Q/ZMjTJgwN7j0rgmEb3CTZvnDPAz8Ijw3FP0cjxfoZ1Z0V2F44Ry7gtLJWr06+MztXVyto3aIz1/XbMQnXYlzc3c3B5yUQIy44Ce5aLRVsAjmXNqVRmDJ2QPNLicvrhnUJsO0zFWI+zZ2hc4Ge1RotCrjfOc9hQY63jZJ17myCZ6QCD7yzMzAob4vrgmkD4q7tpGrhPY/gDcE+lUNhC7DO3l0oPy2wsnT2TEn87eyWmDiTFG9zWDew==
 -----END CERTIFICATE-----

ائين لڳي ٿو. توهان کي فوري طور تي ترتيب واري فائل کي ڊائون لوڊ ڪرڻ جي اجازت ڏئي ٿي ۽ ان کي حڪمن جو هڪ سيٽ استعمال ڪندي ٺاهي ٿو:

اسان Keycloak استعمال ڪندي Kubernetes ڏانهن ActiveDirectory جي اختيار کي مضبوط ڪريون ٿا

جو ذريعو: www.habr.com

تبصرو شامل ڪريو