Sécurité et RBAC
Table des matières
- Authentification
- RBAC (Role-Based Access Control)
- SSO (Single Sign-On)
- Bonnes pratiques de sécurité
- 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
| Type | Description |
|---|---|
login | Accès à l'UI |
apiKey | Gé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
| Resource | Actions |
|---|---|
applications | get, create, update, delete, sync, override, action/* |
clusters | get, create, update, delete |
repositories | get, create, update, delete |
projects | get, create, update, delete |
accounts | get, update |
gpgkeys | get, create, delete |
logs | get |
exec | create |
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