Aller au contenu principal

Sécurité et RBAC


Table des matières

  1. Authentification
  2. RBAC (Role-Based Access Control)
  3. SSO (Single Sign-On)
  4. Bonnes pratiques de sécurité
  5. Exercices pratiques

1 - Authentification

Comptes locaux

# argocd-cm ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-cm
namespace: argocd
data:
# Activer les comptes locaux
accounts.alice: apiKey, login
accounts.bob: login
# argocd-secret pour les mots de passe
apiVersion: v1
kind: Secret
metadata:
name: argocd-secret
namespace: argocd
data:
# bcrypt hash du mot de passe
accounts.alice.password: <bcrypt-hash>

Générer un hash bcrypt

# Via argocd CLI
argocd account bcrypt --password mypassword

# Via htpasswd
htpasswd -nbBC 10 "" mypassword | tr -d ':\n'

Types de comptes

TypeDescription
loginAccès à l'UI
apiKeyGénération de tokens API

Gérer les comptes

# Lister les comptes
argocd account list

# Changer le mot de passe d'un compte
argocd account update-password --account alice

# Générer un token API
argocd account generate-token --account alice

🔝 Retour à la table des matières


2 - RBAC (Role-Based Access Control)

Concepts

Configuration RBAC

# argocd-rbac-cm ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-rbac-cm
namespace: argocd
data:
policy.default: role:readonly
policy.csv: |
# Rôles personnalisés
p, role:admin, applications, *, */*, allow
p, role:admin, clusters, *, *, allow
p, role:admin, repositories, *, *, allow
p, role:admin, projects, *, *, allow

p, role:developer, applications, get, */*, allow
p, role:developer, applications, sync, */*, allow
p, role:developer, applications, action/*, */*, allow

p, role:readonly, applications, get, */*, allow
p, role:readonly, projects, get, *, allow

# Assignation aux utilisateurs
g, alice, role:admin
g, bob, role:developer
g, charlie, role:readonly

Format des règles

p, <role>, <resource>, <action>, <object>, <allow/deny>
g, <user/group>, <role>

Resources et actions

ResourceActions
applicationsget, create, update, delete, sync, override, action/*
clustersget, create, update, delete
repositoriesget, create, update, delete
projectsget, create, update, delete
accountsget, update
gpgkeysget, create, delete
logsget
execcreate

Exemples de politiques

# Lecture seule sur toutes les apps
p, role:viewer, applications, get, */*, allow

# Admin du projet "backend"
p, role:backend-admin, applications, *, backend/*, allow
p, role:backend-admin, projects, get, backend, allow

# Sync uniquement sur production
p, role:prod-deployer, applications, sync, default/prod-*, allow

🔝 Retour à la table des matières


3 - SSO (Single Sign-On)

Dex (intégré)

# argocd-cm
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-cm
namespace: argocd
data:
url: https://argocd.example.com
dex.config: |
connectors:
- type: github
id: github
name: GitHub
config:
clientID: $dex.github.clientID
clientSecret: $dex.github.clientSecret
orgs:
- name: my-org

GitHub OAuth

dex.config: |
connectors:
- type: github
id: github
name: GitHub
config:
clientID: <github-app-client-id>
clientSecret: <github-app-client-secret>
orgs:
- name: my-organization

OIDC (Keycloak, Okta, etc.)

# argocd-cm
data:
oidc.config: |
name: Okta
issuer: https://mycompany.okta.com
clientID: <client-id>
clientSecret: $oidc.okta.clientSecret
requestedScopes: ["openid", "profile", "email", "groups"]

RBAC avec groupes SSO

# Mapper les groupes SSO aux rôles
g, my-org:admin-team, role:admin
g, my-org:developers, role:developer
g, my-org:viewers, role:readonly

🔝 Retour à la table des matières


4 - Bonnes pratiques de sécurité

Principe du moindre privilège

# Éviter
p, role:dev, applications, *, */*, allow

# Préférer
p, role:dev, applications, get, default/*, allow
p, role:dev, applications, sync, default/dev-*, allow

Désactiver le compte admin

# argocd-cm
data:
admin.enabled: "false"

Network Policies

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: argocd-server
namespace: argocd
spec:
podSelector:
matchLabels:
app.kubernetes.io/name: argocd-server
ingress:
- from:
- namespaceSelector:
matchLabels:
name: ingress-nginx
ports:
- port: 8080

Audit

# Configurer les logs d'audit
# Les actions sont loggées automatiquement
# Utiliser un outil de centralisation (ELK, Loki)

kubectl logs -n argocd deployment/argocd-server

TLS

# Ingress avec TLS
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: argocd
annotations:
nginx.ingress.kubernetes.io/ssl-passthrough: "true"
spec:
tls:
- hosts:
- argocd.example.com
secretName: argocd-tls

Checklist sécurité

  • Désactiver admin après configuration SSO
  • Utiliser RBAC granulaire
  • Activer TLS/HTTPS
  • Network Policies pour isolation
  • Audit logging centralisé
  • Rotation régulière des tokens
  • Secrets chiffrés (Sealed Secrets, SOPS)

🔝 Retour à la table des matières


5 - Exercices pratiques

Exercice 1 : Créer un compte développeur

# 1. Ajouter le compte dans argocd-cm
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-cm
namespace: argocd
data:
accounts.developer: login

# 2. Définir les permissions dans argocd-rbac-cm
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-rbac-cm
namespace: argocd
data:
policy.csv: |
p, role:developer, applications, get, */*, allow
p, role:developer, applications, sync, */*, allow
g, developer, role:developer
# 3. Définir le mot de passe
argocd account update-password --account developer

Exercice 2 : Limiter l'accès par projet

# Un utilisateur ne peut voir que le projet "frontend"
p, role:frontend-dev, applications, get, frontend/*, allow
p, role:frontend-dev, applications, sync, frontend/*, allow
p, role:frontend-dev, projects, get, frontend, allow
g, alice, role:frontend-dev

Quiz

Q1. Quelle est la différence entre p et g dans les règles RBAC ?

Réponse
  • p (policy) : Définit les permissions d'un rôle
  • g (group) : Assigne un utilisateur/groupe à un rôle

Exemple :

p, role:admin, applications, *, */*, allow  # Définition
g, alice, role:admin # Assignation

Q2. Comment désactiver le compte admin par défaut ?

Réponse

Dans le ConfigMap argocd-cm :

data:
admin.enabled: "false"

Il faut d'abord configurer SSO ou créer d'autres comptes admin.

🔝 Retour à la table des matières


Points clés à retenir

  • Comptes locaux : ConfigMap argocd-cm + Secret
  • RBAC : ConfigMap argocd-rbac-cm avec règles p et g
  • SSO : Dex intégré ou OIDC externe
  • Moindre privilège : Permissions granulaires
  • Désactiver admin après configuration SSO

← Chapitre précédent | Chapitre suivant : Exercices →