Aller au contenu principal

Matrice des Permissions RBAC

Référence complète du contrôle d'accès basé sur les rôles de STOA — rôles, scopes, permissions et isolation des tenants.

Rôles

STOA définit 4 rôles, gérés dans Keycloak comme rôles de realm :

RôlePortéeDescription
cpi-adminPlateformeAccès complet à tous les tenants, toutes les opérations
tenant-adminTenantAccès complet à son propre tenant uniquement
devopsTenantDéployer, promouvoir et gérer au sein de son propre tenant
viewerTenantAccès en lecture seule à son propre tenant

Hiérarchie des Rôles

cpi-admin (plateforme entière)
└── tenant-admin (tenant-scoped)
└── devops (deploy-scoped)
└── viewer (lecture seule)

Les rôles supérieurs héritent de toutes les permissions des rôles inférieurs. Un cpi-admin peut tout faire qu'un viewer peut faire, et plus encore.

Scopes OAuth

Le gateway fait correspondre les rôles aux scopes OAuth pour l'autorisation basée sur les tokens :

ScopeDescriptionRôles
stoa:readAccès en lecture seuleviewer, devops, tenant-admin, cpi-admin
stoa:writeCréer, mettre à jour, supprimerdevops, tenant-admin, cpi-admin
stoa:adminAdministration de la plateformecpi-admin

Matrice des Permissions

Gestion des APIs

Permissionviewerdevopstenant-admincpi-admin
Lister les APIsLectureLectureLectureLecture (tous tenants)
Voir les détails d'une APILectureLectureLectureLecture (tous tenants)
Créer une APICréerCréerCréer (n'importe quel tenant)
Mettre à jour une APIMettre à jourMettre à jourMettre à jour (n'importe quel tenant)
Supprimer une APISupprimerSupprimer (n'importe quel tenant)
Déployer une APIDéployerDéployerDéployer (n'importe quel tenant)
Promouvoir une APIPromouvoirPromouvoirPromouvoir (n'importe quel tenant)

Gestion des Abonnements

Permissionviewerdevopstenant-admincpi-admin
Lister les abonnementsLectureLectureLectureLecture (tous tenants)
Créer un abonnementCréerCréerCréer
Approuver un abonnementApprouverApprouver
Suspendre un abonnementSuspendreSuspendre
Révoquer un abonnementRévoquerRévoquer
Rotation de clé APIRotationRotationRotation

Gestion des Consumers

Permissionviewerdevopstenant-admincpi-admin
Lister les consumersLectureLectureLectureLecture (tous tenants)
Créer un consumerCréerCréer
Mettre à jour un consumerMettre à jourMettre à jour
Supprimer un consumerSupprimerSupprimer
Onboarding en masseMasseMasse

Gestion des Tenants

Permissionviewerdevopstenant-admincpi-admin
Lister les tenantsSon tenant uniquementSon tenant uniquementSon tenant uniquementTous les tenants
Voir les détails du tenantSon tenant uniquementSon tenant uniquementSon tenant uniquementTous les tenants
Créer un tenantCréer
Mettre à jour un tenantMettre à jour
Supprimer un tenantSupprimer

Tools MCP

Permissionviewerdevopstenant-admincpi-admin
Lister les toolsLectureLectureLectureLecture
Invoquer un toolInvoquerInvoquerInvoquer
Enregistrer un tool (CRD)EnregistrerEnregistrer

Administration de la Plateforme

Permissionviewerdevopstenant-admincpi-admin
Voir les logs d'auditLectureLectureLectureLecture (tous tenants)
Gérer les utilisateursPropre tenantTous les tenants
Admin gatewayAccès complet
Remplacer l'env lecture seuleRemplacer

Isolation des Tenants

Les rôles tenant-scoped (tenant-admin, devops, viewer) sont limités à leur propre tenant :

  • Un tenant-admin du tenant acme ne peut pas voir les ressources du tenant globex
  • Les requêtes API filtrent automatiquement par le claim tenant_id de l'utilisateur
  • Les tentatives d'accès inter-tenant retournent 403 Forbidden

Seul cpi-admin peut accéder aux ressources de tous les tenants.

Comment le Tenant est Déterminé

Le tenant de l'utilisateur est extrait du token JWT :

  1. Claim tenant (claim personnalisé dans Keycloak) — source principale
  2. Rôle tenant-{id} (pattern de rôle de realm) — fallback
  3. Aucun tenant — valide uniquement pour cpi-admin (accès plateforme entière)

Structure des Claims JWT

STOA valide ces claims JWT depuis Keycloak :

{
"sub": "user-uuid-123",
"preferred_username": "john.doe",
"email": "john.doe@acme.example.com",
"tenant": "acme",
"realm_access": {
"roles": ["tenant-admin", "offline_access"]
},
"scope": "openid stoa:read stoa:write",
"aud": ["stoa-mcp", "account"],
"iss": "https://auth.<YOUR_DOMAIN>/realms/stoa",
"exp": 1708000000,
"iat": 1707999000
}
ClaimObligatoireObjectif
subOuiIdentifiant de l'utilisateur
expOuiExpiration du token
iatOuiToken émis à
issOuiÉmetteur du token (URL Keycloak)
audOuiAudience (doit inclure l'ID client)
tenantNonID du tenant (requis pour les rôles tenant-scoped)
realm_access.rolesOuiRôles de realm Keycloak
scopeNonScopes OAuth (séparés par des espaces)

Exemples de Personas

Alex — Admin Plateforme (cpi-admin)

Alex gère l'ensemble de la plateforme STOA. Elle peut :

  • Créer et configurer des tenants
  • Voir tous les abonnements de tous les tenants
  • Accéder à l'API admin du gateway
  • Remplacer les restrictions de production en lecture seule
  • Voir les logs d'audit à l'échelle de la plateforme

Bob — Admin Tenant (tenant-admin)

Bob gère les APIs pour le tenant acme. Il peut :

  • Créer, modifier et supprimer des APIs dans acme
  • Approuver les demandes d'abonnement aux APIs d'acme
  • Gérer les consumers et leurs certificats
  • Voir les logs d'audit pour acme uniquement
  • Ne peut pas voir les ressources d'autres tenants

Carol — Ingénieure DevOps (devops)

Carol déploie et promeut des APIs pour acme. Elle peut :

  • Créer et mettre à jour des APIs dans acme
  • Déployer des APIs en staging et en production
  • Effectuer des rotations de clés API pour les abonnements
  • Ne peut pas supprimer des APIs ou approuver des abonnements
  • Ne peut pas gérer les consumers

Dave — Observateur (viewer)

Dave surveille la santé des APIs pour acme. Il peut :

  • Parcourir le catalogue d'APIs et la documentation
  • Voir les détails des abonnements et les métriques d'utilisation
  • Lire les logs d'audit pour acme
  • Ne peut pas créer, modifier ou supprimer quoi que ce soit

Voir Aussi