Aller au contenu principal

Utilisateurs et RBAC


Objectifs du chapitre

  • Créer et gérer des utilisateurs
  • Configurer les équipes
  • Définir les permissions (RBAC)
  • Contrôler l'accès aux ressources

1 - Gestion des utilisateurs

Liste des utilisateurs

┌─────────────────────────────────────────────────────────────────┐
│ 👥 Users [+ Add user] │
├─────────────────────────────────────────────────────────────────┤
│ Username Role Teams Actions │
│ ──────────────────────────────────────────────────────────────│
│ admin Administrator - [⚙️] │
│ john.doe Standard user Dev, QA [⚙️] [🗑️] │
│ jane.smith Standard user Dev [⚙️] [🗑️] │
│ bob.wilson Standard user Production [⚙️] [🗑️] │
│ │
└─────────────────────────────────────────────────────────────────┘

Créer un utilisateur

┌─────────────────────────────────────────────────────────────────┐
│ + Add user │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Username: [newuser ] │
│ │
│ Password: [•••••••••• ] │
│ Confirm: [•••••••••• ] │
│ │
│ Role: │
│ (•) Standard user │
│ ( ) Administrator │
│ │
│ Teams: [Select teams... ▼] │
│ ☑ Development │
│ ☐ Production │
│ ☐ QA │
│ │
│ [Create user] │
│ │
└─────────────────────────────────────────────────────────────────┘

Rôles utilisateur

RôleDescription
AdministratorAccès complet à tout
Standard userAccès restreint selon les permissions

2 - Gestion des équipes

Liste des équipes

┌─────────────────────────────────────────────────────────────────┐
│ 👥 Teams [+ Add team] │
├─────────────────────────────────────────────────────────────────┤
│ Team name Members Leaders Actions │
│ ──────────────────────────────────────────────────────────────│
│ Development 3 john.doe [⚙️] [🗑️] │
│ Production 2 bob.wilson [⚙️] [🗑️] │
│ QA 2 jane.smith [⚙️] [🗑️] │
│ │
└─────────────────────────────────────────────────────────────────┘

Créer une équipe

┌─────────────────────────────────────────────────────────────────┐
│ + Add team │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Name: [Frontend Team ] │
│ │
│ Leaders: │
│ [Select leaders... ▼] │
│ ☑ john.doe │
│ │
│ [Create team] │
│ │
└─────────────────────────────────────────────────────────────────┘

Rôles dans une équipe

RôlePermissions
LeaderGérer les membres de l'équipe
MemberAccès selon les permissions de l'équipe

3 - Contrôle d'accès aux environnements

Configuration par environnement

┌─────────────────────────────────────────────────────────────────┐
│ Environment access: production-docker │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Access management: │
│ ( ) Public - Accessible to any user │
│ (•) Restricted - Access limited to specific users/teams │
│ │
│ Authorized accesses: │
│ ─────────────────────────────────────────────────────────────│
│ │
│ ☑ Production Team [Environment admin ▼] │
│ ☑ bob.wilson [Environment admin ▼] │
│ ☐ Development Team [Read-only ▼] │
│ │
│ [+ Add access] │
│ │
└─────────────────────────────────────────────────────────────────┘

Niveaux d'accès

NiveauPermissions
Environment adminTout gérer
OperatorGérer les conteneurs, pas la config
HelpdeskVoir et redémarrer
Read-onlyVoir uniquement

4 - RBAC (Role-Based Access Control)

Concept

┌─────────────────────────────────────────────────────────────────┐
│ RBAC Model │
├─────────────────────────────────────────────────────────────────┤
│ │
│ User ────▶ Team ────▶ Role ────▶ Permissions │
│ │
│ john.doe → Dev Team → Operator → Start/Stop containers │
│ View logs │
│ Exec into containers │
│ │
│ bob → Prod Team → Admin → Full access │
│ │
└─────────────────────────────────────────────────────────────────┘

Permissions granulaires (Business Edition)

┌─────────────────────────────────────────────────────────────────┐
│ Role: Custom Operator │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Containers: │
│ ☑ View containers │
│ ☑ Start/Stop containers │
│ ☑ Restart containers │
│ ☑ View logs │
│ ☑ Execute into containers (console) │
│ ☐ Create containers │
│ ☐ Remove containers │
│ │
│ Images: │
│ ☑ View images │
│ ☐ Pull images │
│ ☐ Build images │
│ ☐ Remove images │
│ │
│ Stacks: │
│ ☑ View stacks │
│ ☐ Create/Edit stacks │
│ ☐ Remove stacks │
│ │
└─────────────────────────────────────────────────────────────────┘

5 - Contrôle d'accès aux ressources

Accès aux stacks

┌─────────────────────────────────────────────────────────────────┐
│ Stack access control: wordpress │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Ownership: │
│ ( ) Public - Accessible to environment users │
│ (•) Restricted - Limited access │
│ │
│ Authorized: │
│ ─────────────────────────────────────────────────────────────│
│ ☑ Frontend Team │
│ ☑ john.doe │
│ │
└─────────────────────────────────────────────────────────────────┘

Accès aux volumes

┌─────────────────────────────────────────────────────────────────┐
│ Volume access control: postgres_data │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Ownership: │
│ ( ) Public │
│ (•) Restricted │
│ │
│ Authorized teams/users: │
│ ☑ Database Team │
│ │
└─────────────────────────────────────────────────────────────────┘

6 - Authentification externe

OAuth/OpenID Connect

┌─────────────────────────────────────────────────────────────────┐
│ Authentication: OAuth │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Provider: [Custom ▼] │
│ │
│ Client ID: [your-client-id ] │
│ Client Secret: [your-client-secret ] │
│ │
│ Authorization URL: │
│ [https://auth.example.com/authorize ] │
│ │
│ Token URL: │
│ [https://auth.example.com/token ] │
│ │
│ User identifier: [email ] │
│ │
│ Scopes: [openid email profile ] │
│ │
│ ☑ Auto-create users │
│ Default team: [None ▼] │
│ │
└─────────────────────────────────────────────────────────────────┘

LDAP (Business Edition)

┌─────────────────────────────────────────────────────────────────┐
│ Authentication: LDAP │
├─────────────────────────────────────────────────────────────────┤
│ │
│ LDAP Server: │
│ URL: [ldap://ldap.example.com:389 ] │
│ │
│ Reader DN: [cn=reader,dc=example,dc=com] │
│ Password: [•••••••••• ] │
│ │
│ User Search: │
│ Base DN: [ou=users,dc=example,dc=com] │
│ Filter: [(uid={0}) ] │
│ Username attribute: [uid ] │
│ │
│ Group Search (optional): │
│ Base DN: [ou=groups,dc=example,dc=com] │
│ Filter: [(member={0}) ] │
│ │
│ Admin group: [cn=portainer-admins ] │
│ │
└─────────────────────────────────────────────────────────────────┘

7 - Audit logs (Business Edition)

Visualisation des logs

┌─────────────────────────────────────────────────────────────────┐
│ Audit Logs │
├─────────────────────────────────────────────────────────────────┤
│ Filter: [All users ▼] [All actions ▼] [Last 7 days ▼] │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Timestamp User Action Resource │
│ ──────────────────────────────────────────────────────────────│
│ 2024-01-15 14:30 john.doe Started container/nginx │
│ 2024-01-15 14:25 jane.smith Deployed stack/wordpress │
│ 2024-01-15 14:20 bob.wilson Created volume/data │
│ 2024-01-15 14:15 admin Updated user/john.doe │
│ 2024-01-15 14:10 john.doe Logged in - │
│ │
└─────────────────────────────────────────────────────────────────┘

Actions tracées

CatégorieActions
AuthLogin, logout, failed login
UsersCreate, update, delete
TeamsCreate, update, delete, membership
ContainersStart, stop, remove, exec
StacksDeploy, update, remove
SettingsConfiguration changes

8 - Bonnes pratiques

Sécurité des comptes

# ✅ Bonnes pratiques

- Mots de passe forts (12+ caractères)
- Utiliser des équipes pour regrouper les utilisateurs
- Appliquer le principe du moindre privilège
- Séparer les environnements dev/staging/prod
- Activer l'authentification externe si possible
- Revue régulière des accès
- Activer l'audit logging (Business)

Organisation des équipes

┌─────────────────────────────────────────────────────────────────┐
│ Organisation recommandée │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Par fonction: │
│ • Developers → accès dev/staging │
│ • QA Team → accès staging (read-only prod) │
│ • Ops Team → accès production │
│ • DBA Team → accès databases uniquement │
│ │
│ Par projet: │
│ • Project-A Team → ressources projet A │
│ • Project-B Team → ressources projet B │
│ │
└─────────────────────────────────────────────────────────────────┘

Matrice des permissions

EnvironnementDev TeamQA TeamOps Team
DevelopmentAdminRead-onlyAdmin
StagingOperatorAdminAdmin
ProductionRead-onlyRead-onlyAdmin

Résumé

FonctionnalitéDescription
UsersComptes individuels
TeamsGroupes d'utilisateurs
RolesNiveaux de permission
Access controlPar environnement/ressource
OAuth/LDAPAuthentification externe
Audit logsTraçabilité des actions
Points clés
  • Utilisez les équipes pour simplifier la gestion
  • Appliquez le principe du moindre privilège
  • Séparez les accès par environnement
  • L'authentification externe améliore la sécurité

Exercices pratiques

  1. Créez une équipe "Developers" avec 2 utilisateurs
  2. Configurez un environnement avec accès restreint
  3. Testez les différents niveaux de permission
  4. Configurez l'authentification OAuth (si disponible)

← Stacks et templates | Bonnes pratiques →