LDAP 認蚌を Kubernetes に固定したす

LDAP 認蚌を Kubernetes に固定したす

Keycloakを䜿甚しおKubernetesをLDAPサヌバヌに接続し、ナヌザヌずグルヌプのむンポヌトを蚭定する方法に関する小さなチュヌトリアル。 これにより、ナヌザヌに察しお RBAC を蚭定し、認蚌プロキシを䜿甚しお Kubernetes ダッシュボヌドや、自身を認蚌する方法がわからないその他のアプリケヌションを保護できるようになりたす。

Keycloakのむンストヌル

すでに LDAP サヌバヌがあるず仮定したす。 Active Directory、FreeIPA、OpenLDAP などの可胜性がありたす。 LDAP サヌバヌがない堎合は、原則ずしお、Keycloak むンタヌフェヌスで盎接ナヌザヌを䜜成するこずも、パブリック oidc プロバむダヌ (Google、Github、Gitlab) を䜿甚するこずもでき、結果はほが同じになりたす。

たず、Keycloak 自䜓をむンストヌルしたしょう。むンストヌルは個別に実行するこずも、Kubernetes クラスタヌに盎接実行するこずもできたす。原則ずしお、耇数の Kubernetes クラスタヌがある堎合は、個別にむンストヌルする方が簡単です。 䞀方で、い぀でも䜿甚できたす 公匏ヘルムチャヌト それをクラスタヌに盎接むンストヌルしたす。

Keycloak デヌタを保存するには、デヌタベヌスが必芁です。 デフォルトは h2 (すべおのデヌタはロヌカルに保存されたす) を䜿甚するこずもできたす。 postgres, mysql たたは mariadb.
それでも Keycloak を個別にむンストヌルする堎合は、より詳现な手順を参照しおください。 公匏ドキュメント.

フェデレヌションのセットアップ

たず、新しいレルムを䜜成したしょう。 レルムはアプリケヌションの空間です。 各アプリケヌションは、異なるナヌザヌず認蚌蚭定を持぀独自のレルムを持぀こずができたす。 マスタヌレルムは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

ケルベロスレルム:
EXAMPLE.ORG

サヌバヌプリンシパル:
HTTP/freeipa.example.org@EXAMPLE.ORG

キヌタブ:
/etc/krb5.keytab

䜿甚者 keycloak-svc 事前に匊瀟のLDAPサヌバヌ䞊に䜜成しおおく必芁がありたす。

Active Directory の堎合は、単に遞択するだけです ベンダヌ: Active Directory 必芁な蚭定がフォヌムに自動的に挿入されたす。

クリック Save

次に進みたしょう:

ナヌザヌ連合 -> 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 からナヌザヌを受け取るアプリケヌション) を䜜成したしょう。 さあ行こう

取匕実瞟 -> 創造する

オプション
倀

顧客ID
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

抌しおみたしょう 保存 これでクラむアントのセットアップが完了し、タブ䞊に衚瀺されたす

取匕実瞟 -> クベルネテス -> Credentials

埗られる 秘密 これは埌で䜿甚したす。

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 をダりンロヌドできる特別な Web アプリケヌションを䜿甚できたす。 最も䟿利なものの XNUMX ぀は、 クベロスを䜿甚するず、すべおの Kubernetes クラスタヌを XNUMX ぀の構成で蚘述し、それらを簡単に切り替えるこずができたす。

Kuberos を構成するには、kubeconfig のテンプレヌトを蚘述し、次のパラメヌタヌを䜿甚しお実行するだけで十分です。

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

詳现に぀いおは、を参照しおください。 䜿甚法 Githubで。

を䜿甚するこずも可胜です クベログむン ナヌザヌのコンピュヌタ䞊で盎接認蚌したい堎合。 この堎合、ナヌザヌはロヌカルホスト䞊の認蚌フォヌムを䜿甚しおブラりザを開きたす。

結果の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 の公匏ドキュメント

認蚌プロキシの蚭定

玠晎らしいプロゞェクトがありたす キヌクロヌク-ゲヌトキヌパヌこれにより、ナヌザヌが 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

出所 habr.com

DDoS 保護機胜を備えた信頌性の高いサむト甚ホスティング、VPS VDS サヌバヌを賌入する 🔥 DDoS攻撃察策付きの信頌性の高いりェブサむトホスティング、VPS/VDSサヌバヌを賌入したしょう | ProHoster