LDAP yetkilendirmesini Kubernetes'e sabitliyoruz

LDAP yetkilendirmesini Kubernetes'e sabitliyoruz

Kubernetes'i LDAP sunucunuza bağlamak ve kullanıcıların ve grupların içe aktarımını ayarlamak için Keycloak'ı nasıl kullanacağınıza dair küçük bir eğitim. Bu, kullanıcılarınız için RBAC kurmanıza ve Kubernetes Dashboard'u ve kendilerini nasıl yetkilendireceğini bilmeyen diğer uygulamaları korumak için auth-proxy kullanmanıza olanak tanır.

Keycloak Kurulumu

Zaten bir LDAP sunucunuz olduğunu varsayalım. Active Directory, FreeIPA, OpenLDAP veya her neyse olabilir. Bir LDAP sunucunuz yoksa, prensipte kullanıcıları doğrudan Keycloak arayüzünde oluşturabilir veya genel oidc sağlayıcılarını (Google, Github, Gitlab) kullanabilirsiniz, sonuç neredeyse aynı olacaktır.

Öncelikle Keycloak'ın kendisini kuralım, kurulum ayrı ayrı yapılabileceği gibi doğrudan Kubernetes kümesine de yapılabilir, kural olarak birden fazla Kubernetes kümeniz varsa ayrı ayrı kurmanız daha kolay olacaktır. Öte yandan, her zaman kullanabilirsiniz resmi dümen haritası ve doğrudan kümenize yükleyin.

Keycloak verilerini depolamak için bir veritabanına ihtiyacınız olacak. Varsayılan: h2 (tüm veriler yerel olarak depolanır), ancak aynı zamanda postgres, mysql veya mariadb.
Yine de Keycloak'ı ayrı olarak yüklemeye karar verirseniz daha ayrıntılı talimatları şurada bulabilirsiniz: resmi belgeler.

Federasyon kurulumu

Öncelikle yeni bir bölge oluşturalım. Realm uygulamamızın alanıdır. Her uygulamanın farklı kullanıcı ve yetkilendirme ayarlarıyla kendine ait bir alanı olabilir. Ana bölge Keycloak'un kendisi tarafından kullanılır ve onu başka herhangi bir şey için kullanmak yanlıştır.

Tıklayın bölge ekle

seçenek
Özellik

Name
kubernetes

<span style="color:white">Görünen İsim</span>
Kubernetes

HTML Görünen Ad
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >

Kubernetes varsayılan olarak kullanıcının e-postasının onaylanıp onaylanmadığını kontrol eder. Kendi LDAP sunucumuzu kullandığımız için bu kontrol neredeyse her zaman geri dönecektir. false. Bu ayarın Kubernetes'teki temsilini devre dışı bırakalım:

İstemci kapsamları -> e-posta -> Haritacılar -> E-posta Doğrulandı (Sil)

Şimdi federasyonu kuralım, bunun için şu adrese gidiyoruz:

Kullanıcı federasyonu -> Sağlayıcı ekle… -> ldap

FreeIPA için örnek bir kurulum:

seçenek
Özellik

Konsol Görünen Adı
freeipa.example.org

Satıcı
Red Hat Directory Server

UUID LDAP özelliği
ipauniqueid

Bağlantı URL'si
ldaps://freeipa.example.org

Kullanıcı DN'si
cn=users,cn=accounts,dc=example,dc=org

DN'yi bağla
uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org

Kimlik Bilgisini Bağla
<password>

Kerberos kimlik doğrulamasına izin ver:
on

Kerberos Bölgesi:
EXAMPLE.ORG

Sunucu Sorumlusu:
HTTP/[email protected]

anahtar sekmesi:
/etc/krb5.keytab

Kullanıcı keycloak-svc LDAP sunucumuzda önceden oluşturulmalıdır.

Active Directory durumunda, yalnızca şunu seçin: Satıcı: Active Directory ve gerekli ayarlar forma otomatik olarak eklenecektir.

Tıklayın İndirim

Şimdi devam edelim:

Kullanıcı federasyonu -> freeipa.example.org -> Haritacılar -> İsim

seçenek
Özellik

Ldap özellikleri
givenName

Şimdi grup eşlemeyi etkinleştirin:

Kullanıcı federasyonu -> freeipa.example.org -> Haritacılar -> oluşturmak

seçenek
Özellik

Name
groups

Eşleyici türü
group-ldap-mapper

LDAP Grupları DN
cn=groups,cn=accounts,dc=example,dc=org

Kullanıcı Grubu Alma Stratejisi
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE

Bu, federasyon kurulumunu tamamlar, hadi istemci kurulumuna geçelim.

İstemci kurulumu

Yeni bir client (Keycloak'tan kullanıcı alacak bir uygulama) oluşturalım. Hadi gidelim:

Müşteriler -> oluşturmak

seçenek
Özellik

müşteri kimliği
kubernetes

Erişim türü
confidenrial

Kök URL
http://kubernetes.example.org/

Geçerli Yönlendirme URI'leri
http://kubernetes.example.org/*

Yönetici URL'si
http://kubernetes.example.org/

Ayrıca gruplar için bir kapsam oluşturacağız:

İstemci kapsamları -> oluşturmak

seçenek
Özellik

şablon
No template

Name
groups

Tam grup yolu
false

Ve onlar için bir eşleştirici kurun:

İstemci kapsamları -> gruplar -> Haritacılar -> oluşturmak

seçenek
Özellik

Name
groups

Eşleyici Türü
Group membership

Token Talebi Adı
groups

Şimdi müşteri kapsamımızda grup eşlemeyi etkinleştirmemiz gerekiyor:

Müşteriler -> Kubernetes -> İstemci kapsamları -> Varsayılan İstemci Kapsamları

Seçme gruplar в Kullanılabilir İstemci Kapsamlarıbasın Seçileni ekle

Şimdi uygulamamızın kimlik doğrulamasını ayarlayalım, şu adrese gidin:

Müşteriler -> Kubernetes

seçenek
Özellik

Yetkilendirme Etkinleştirildi
ON

Hadi itelim kayıt etmek ve bu, istemci kurulumunu tamamlar, artık sekmededir

Müşteriler -> Kubernetes -> Tanıtım

alabilirsiniz Gizli bunu daha sonra kullanacağız.

Kubernet'leri Yapılandırma

OIDC yetkilendirmesi için Kubernetes'i ayarlamak oldukça önemsizdir ve çok karmaşık bir şey değildir. Tek yapmanız gereken OIDC sunucunuzun CA sertifikasını /etc/kubernetes/pki/oidc-ca.pem ve kube-apserver için gerekli seçenekleri ekleyin.
Bunu yapmak için güncelleyin /etc/kubernetes/manifests/kube-apiserver.yaml tüm ustalarınızda:

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

Ayrıca güncelleme sırasında bu ayarları kaybetmemek için kümedeki kubeadm yapılandırmasını da güncelleyin:

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

Bu, Kubernetes kurulumunu tamamlar. Bu adımları tüm Kubernetes kümelerinizde tekrarlayabilirsiniz.

İlk Yetkilendirme

Bu adımlardan sonra zaten OIDC yetkilendirmesi yapılandırılmış bir Kubernetes kümesine sahip olacaksınız. Tek nokta, kullanıcılarınızın henüz kendi kubeconfig'lerinin yanı sıra yapılandırılmış bir istemciye sahip olmamasıdır. Bu sorunu çözmek için, başarılı yetkilendirmenin ardından kubeconfig'in kullanıcılara otomatik olarak verilmesini yapılandırmanız gerekir.

Bunu yapmak için, kullanıcının kimliğini doğrulamanıza ve ardından bitmiş kubeconfig'i indirmenize olanak tanıyan özel web uygulamalarını kullanabilirsiniz. En uygun olanlardan biri Kuberolar, tüm Kubernetes kümelerini tek bir yapılandırmada tanımlamanıza ve bunlar arasında kolayca geçiş yapmanıza olanak tanır.

Kuberos'u yapılandırmak için kubeconfig şablonunu tanımlamak ve aşağıdaki parametrelerle çalıştırmak yeterlidir:

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

Daha fazla ayrıntı için bkz. kullanım Github'da.

Bunu kullanmak da mümkündür kubegiriş yap doğrudan kullanıcının bilgisayarında yetkilendirmek istiyorsanız. Bu durumda kullanıcı localhost üzerinde yetkilendirme formu bulunan bir tarayıcı açacaktır.

Ortaya çıkan kubeconfig sitede kontrol edilebilir jwt.io. Sadece değeri kopyalayın users[].user.auth-provider.config.id-token kubeconfig'inizden sitedeki bir forma gönderin ve transkripti hemen alın.

RBAC kurulumu

RBAC'ı yapılandırırken hem kullanıcı adına (alan name jwt belirtecinde) ve bir grup kullanıcı için (alan groups jwt jetonunda). Burada bir grup için izinlerin ayarlanmasına ilişkin bir örnek verilmiştir kubernetes-default-namespace-admins:

kubernetes-varsayılan-ad alanı-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 için daha fazla örneği şu adreste bulabilirsiniz: resmi Kubernetes belgeleri

au-proxy ayarı

Harika bir proje var anahtar pelerin bekçisiBu, kullanıcının OIDC sunucusunda kimlik doğrulaması yapmasına izin vererek herhangi bir uygulamanın güvenliğini sağlamanıza olanak tanır. Örnek olarak Kubernetes Dashboard'u kullanarak bunu nasıl ayarlayabileceğinizi size göstereceğim:

gösterge paneli-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

Kaynak: habr.com

Yorum ekle