Securiser avec Keycloak 25 min de lecture

Keycloak dans l'ecosysteme DevOps

Pourquoi Keycloak ?

Dans un ecosysteme DevOps, de nombreux services ont besoin d'authentification : GitLab, Grafana, vos applications, les APIs. Keycloak centralise tout cela.

Architecture Keycloak dans l'ecosysteme

+---------------------------------------------------------------+
|                      KEYCLOAK (IAM)                            |
|  Realm: devops-platform                                        |
|                                                                |
|  Clients:           Utilisateurs:        Roles:               |
|  - gitlab           - dev1@company.com   - admin              |
|  - grafana          - dev2@company.com   - developer          |
|  - mon-app          - ops1@company.com   - viewer             |
|  - prometheus       - lead@company.com   - ops               |
+---------------------------------------------------------------+
         |              |              |              |
    OAuth2/OIDC    OAuth2/OIDC    OAuth2/OIDC    OAuth2/OIDC
         |              |              |              |
    +--------+    +---------+    +---------+    +--------+
    | GitLab |    | Grafana |    | Mon App |    | Prom.  |
    +--------+    +---------+    +---------+    +--------+

  L'utilisateur se connecte UNE SEULE FOIS (SSO)
  et accede a TOUS les services avec le meme compte.

Deployer Keycloak sur Kubernetes

# keycloak-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: keycloak
  namespace: auth
spec:
  replicas: 2
  selector:
    matchLabels:
      app: keycloak
  template:
    metadata:
      labels:
        app: keycloak
    spec:
      containers:
        - name: keycloak
          image: quay.io/keycloak/keycloak:23.0
          args: ["start"]
          env:
            - name: KC_DB
              value: postgres
            - name: KC_DB_URL
              value: jdbc:postgresql://postgres:5432/keycloak
            - name: KC_DB_USERNAME
              valueFrom:
                secretKeyRef:
                  name: keycloak-db
                  key: username
            - name: KC_DB_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: keycloak-db
                  key: password
            - name: KC_HOSTNAME
              value: auth.example.com
            - name: KEYCLOAK_ADMIN
              value: admin
            - name: KEYCLOAK_ADMIN_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: keycloak-admin
                  key: password
          ports:
            - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: keycloak
  namespace: auth
spec:
  selector:
    app: keycloak
  ports:
    - port: 80
      targetPort: 8080

Concepts cles Keycloak

  • Realm : Un espace isole avec ses propres utilisateurs, clients et roles
  • Client : Une application qui utilise Keycloak pour s'authentifier
  • Role : Un ensemble de permissions assignables aux utilisateurs
  • SSO : Single Sign-On, une seule connexion pour tous les services
  • OIDC : OpenID Connect, le protocole d'authentification
SSO en action : Un developpeur se connecte a GitLab le matin. Sans ressaisir son mot de passe, il accede aussi a Grafana, a l'application, et a tous les services proteges par Keycloak.