Catalogue des actions
Fonctionnalité déployée et prise en charge. Les champs et commandes décrits ici sont stables au sein de la version v1alpha1.
Chaque route de l'API vérifie une action sur une ressource avant de répondre. Ce catalogue vous dit lesquelles, pour écrire des policies au plus juste : autoriser ssm:read sur secret/app-* sans ouvrir ssm:write, laisser une CI publier un site sans pouvoir le supprimer.
Exemple : autoriser la lecture des logs et le redémarrage des apps, rien d'autre.
{ "Version": "1", "Statement": [
{ "Effect": "Allow", "Actions": ["deploy:list", "deploy:read", "deploy:logs"], "Resources": ["app/*"] },
{ "Effect": "Allow", "Actions": ["deploy:write"], "Resources": ["app/*"] },
{ "Effect": "Deny", "Actions": ["deploy:delete"], "Resources": ["app/*"] } ] }
Comment lire les tableaux
- Ressource :
type/nomdésigne un élément ;type/*désigne la collection (lister, créer). UnAllowsursecret/*couvre la collection ; unDenypartiel (secret/prod-*) ne la bloque pas, le service filtre ensuite élément par élément. - Tout se passe dans le tenant de la session : une policy d'un autre tenant ne compte pas.
- Les policies gérées
readonlyetreadwritesont rappelées en colonne :R= couverte parreadonly,RW= couverte parreadwrite,A=adminseulement.
Déploiements et applications (deploy)
Commande sng | Route | Action | Ressource | Gérée |
|---|---|---|---|---|
sng apply | POST /v1/apply, POST /v1/apply/complete | deploy:write | release/* | RW |
sng apply d'un CDNSite | idem | en plus cdn:write | cdn/<site> | RW |
sng validate | POST /v1/validate | deploy:read | release/* | R |
sng plan | POST /v1/plan | deploy:read | release/* | R |
sng pull | GET /v1/export, POST /v1/export | deploy:read | resource/* | R |
sng kind list TYPE, sng kind get TYPE | GET /v1/resources/{type} | deploy:list | resource/<type>/* | R |
sng kind get TYPE NAME | GET /v1/resources/{type}/{name} | deploy:read | resource/<type>/<name> | R |
sng kind delete TYPE NAME | DELETE /v1/resources/{type}/{name} | deploy:delete | resource/<type>/<name> | RW |
sng kind delete CDNSite NAME | idem | en plus cdn:delete | cdn/<site> | RW |
| — | POST /v1/deployments, POST /v1/deployments/{id}/complete | deploy:write | release/* | RW |
| — | GET /v1/deployments/{id}, GET /v1/operations/{id} | deploy:read | release/* | R |
| — | GET /v1/releases | deploy:list | release/* | R |
| — | POST /v1/releases | deploy:write | release/* | RW |
| — | POST /v1/releases/{version}/restore | deploy:write | release/<version> | RW |
sng app list, sng kind list App | GET /v1/apps | deploy:list | app/* | R |
sng app describe NAME, sng kind get App NAME | GET /v1/apps/{name} | deploy:read | app/<name> | R |
sng app create NAME | POST /v1/apps | deploy:write | app/<name> | RW |
sng app patch NAME, sng app scale NAME N, sng app restart NAME | PATCH /v1/apps/{name}, POST /v1/apps/{name}/scale, POST /v1/apps/{name}/restart | deploy:write | app/<name> | RW |
sng app delete NAME | DELETE /v1/apps/{name} | deploy:delete | app/<name> | RW |
sng app logs NAME | GET /v1/apps/{name}/logs | deploy:logs | app/<name> | R |
Les commandes sng app … sont activées progressivement ; sng apply, sng kind list App et sng kind get App couvrent les mêmes routes.
Secrets (ssm:*)
Commande sng | Route | Action | Ressource | Gérée |
|---|---|---|---|---|
sng secret list | GET /v1/secrets | ssm:list | secret/* | R |
sng secret describe NAME, sng secret versions NAME | GET /v1/secrets/{name}, GET /v1/secrets/{name}/versions | ssm:describe | secret/<name> | R |
sng secret get NAME | GET /v1/secrets/{name}/value | ssm:read | secret/<name> | R |
sng secret set NAME, sng secret restore NAME | PUT /v1/secrets/{name}, POST /v1/secrets/{name}/restore | ssm:write | secret/<name> | RW |
sng secret rotate NAME (lit la valeur actuelle, puis écrit la nouvelle) | GET /v1/secrets/{name}/value, PUT /v1/secrets/{name} | ssm:read et ssm:write | secret/<name> | RW |
| API seulement : rotation immédiate et annulation de la rotation planifiée | POST /v1/secrets/{name}/rotate, POST /v1/secrets/{name}/rotate/cancel | ssm:rotate | secret/<name> | RW |
sng secret delete NAME | DELETE /v1/secrets/{name} | ssm:delete | secret/<name> | RW |
sng secret create NAME (manifeste SSMSecret) | POST /v1/apply | deploy:write | release/* | RW |
Le service de secrets vérifie les mêmes actions quand une de vos applications l'appelle directement avec une session : lecture ssm:read, écriture ssm:write, déclaration ssm:declare, rotation ssm:rotate, suppression ssm:delete, toujours sur secret/<name>.
Sites statiques (cdn)
Commande sng | Route | Action | Ressource | Gérée |
|---|---|---|---|---|
sng kind list CDNSite | GET /v1/cdn | cdn:list | cdn/* | R |
| — | POST /v1/cdn | cdn:write | cdn/* puis cdn/<site> | RW |
| — | POST /v1/cdn/{site}/enable, POST /v1/cdn/{site}/disable | cdn:write | cdn/<site> | RW |
| — | DELETE /v1/cdn/{site} | cdn:delete | cdn/<site> | RW |
| publication | POST /v1/cdn/{site}/uploads, POST /v1/cdn/{site}/uploads/complete | cdn:upload | cdn/<site> | RW |
| vidage du cache | POST /v1/cdn/{site}/cache/clear | cdn:purge | cdn/<site> | RW |
Voir Sites statiques pour les commandes correspondantes.
Environnements (env)
Commande sng | Route | Action | Ressource | Gérée |
|---|---|---|---|---|
sng env list | GET /v1/env | env:read | env/* | R |
sng env checkout NAME, sng env refresh | POST /v1/env/checkout, POST /v1/env/refresh | env:write | env/* | RW |
sng env restore REF | POST /v1/env/restore | env:admin | env/* | A |
sng env create-tenant NAME | POST /v1/env/create-tenant | env:admin | env/* | A |
Tier de ressources (tier)
Commande sng | Route | Action | Ressource | Gérée |
|---|---|---|---|---|
sng tenant tier list | GET /v1/tiers | tier:list | tier/<tenant> | R |
sng tenant tier show | GET /v1/tier | tier:read | tier/<tenant> | R |
sng tenant tier set TIER | PUT /v1/tier | tier:write | tier/<tenant> | A |
tier:write n'est pas dans readwrite : changer le tier demande admin.
Policies et sessions (policy, iam, oidctrust)
Commande sng | Route | Action | Ressource | Gérée |
|---|---|---|---|---|
sng tenant use, sng tenant assume | POST /v1/iam/session, POST /v1/iam/session/assume | iam:assumerole | tenant/<tenant> (policy du tenant visé) | A, assume-role |
sng tenant policy list, GET /v1/iam/bindings | GET /v1/iam/policies, GET /v1/iam/bindings | policy:list | policy/* | R |
sng tenant policy get NAME, principals NAME | GET /v1/iam/policies/{name}, …/principals | policy:read | policy/<name> | R |
sng tenant policy create|update|delete NAME | PUT|DELETE /v1/iam/policies/{name} | policy:admin | policy/<name> | A |
sng tenant policy attach|detach NAME | POST /v1/iam/policies/{name}/attach|detach, PUT|DELETE /v1/iam/bindings/{name} | policy:admin | policy/<name> | A |
sng tenant oidc list | GET /v1/iam/oidc-trusts | oidctrust:list | oidctrust/* | R |
sng tenant oidc get NAME | GET /v1/iam/oidc-trusts/{name} | oidctrust:read | oidctrust/<name> | R |
sng tenant oidc create|delete NAME | PUT|DELETE /v1/iam/oidc-trusts/{name} | oidctrust:admin | oidctrust/<name> | A |
Vos utilisateurs finaux (auth)
Routes /v1/auth/… : elles portent toujours sur l'annuaire du tenant de la session.
Commande sng | Route | Action | Ressource | Gérée |
|---|---|---|---|---|
sng iam user list | GET /v1/auth/users | auth:ListUsers | auth/users/* | R |
sng iam user describe ID | GET /v1/auth/users/{id} | auth:ListUsers | auth/users/<id> | R |
sng iam user disable|enable ID | POST /v1/auth/users/{id}/disable|enable | auth:ManageUsers | auth/users/<id> | A |
sng iam user roles ID | PUT /v1/auth/users/{id}/roles | auth:ManageUsers | auth/users/<id> | A |
sng iam user delete ID | DELETE /v1/auth/users/{id} | auth:ManageUsers | auth/users/<id> | A |
sng iam invitation list | GET /v1/auth/invitations | auth:ListUsers | auth/invitations/* | R |
sng iam user invite EMAIL, sng iam invitation delete ID | POST /v1/auth/invitations, DELETE …/{id} | auth:ManageUsers | auth/invitations/* | A |
sng iam role list|describe | GET /v1/auth/roles[/{name}] | auth:ListUsers | auth/roles/* | R |
sng iam role create|update|delete | PUT|DELETE /v1/auth/roles/{name} | auth:ManageRoles | auth/roles/<name> | A |
sng iam login-page show | GET /v1/auth/settings | auth:ListUsers | auth/settings | R |
sng iam login-page set | PUT /v1/auth/settings | auth:ManageLoginPage | auth/settings | A |
sng iam app credentials NAME | GET /v1/auth/applications/{name}/credentials | auth:ReadCredentials | iamapp/<name> | R |
sng iam app rotate NAME | POST /v1/auth/applications/{name}/rotate | auth:RotateCredentials | iamapp/<name> | A |
auth:ReadCredentials et auth:RotateCredentials ne sont ni dans readonly ni dans readwrite : seule la policy admin lit ou renouvelle les identifiants d'une application. Les commandes sng iam app list\|describe et sng iam provider list\|describe lisent les objets IAMApplication et IAMProvider de l'état désiré ; elles lisent des ressources comme sng get et relèvent des actions de lecture de ces kinds.
sng tenant destroy NAME : DELETE /v1/tenants/{tenant}, iam:admin, tenant/<tenant>.
Registre d'images (registry)
Le registre vérifie chaque opération docker / sng registry avec votre session. La ressource est le dépôt déclaré par un RegistryRepository.
| Opération | Action | Ressource | Gérée |
|---|---|---|---|
docker pull, lecture d'un manifeste, scan de vulnérabilités | registry:pull | repository/<dépôt> | R |
docker push | registry:push | repository/<dépôt> | RW |
| suppression d'un manifeste | registry:delete | repository/<dépôt> | RW |
docker login (vérification de la session seule) | registry:pull | repository/login-probe | R |
sng registry access-key credentials NAME (lecture des identifiants d'une clé d'accès) | registry:admin | accesskey/<nom> | A |
sng registry access-key rotate NAME (renouvellement immédiat d'une clé d'accès) | registry:rotate | accesskey/<nom> | A |
Les clés d'accès au registre (RegistryAccessKey) et le pull anonyme des dépôts publics ne passent pas par les policies : une clé a exactement les droits déclarés dans son manifeste. Voir Registre OCI.
Chiffrement (kms:*)
Les actions kms:wrap, kms:unwrap et kms:rewrap sont acceptées dans une policy, mais le chiffrement est réservé à la plateforme dans cette version : elle chiffre vos secrets pour vous. Une policy kms:* dans votre tenant n'ouvre aucun accès.
DNS (dns)
Fonctionnalité en cours de déploiement. L'interface décrite ici est celle de la prochaine livraison : elle peut encore évoluer, et n'est pas forcément activée sur votre tenant.
Activée progressivement sur les tenants, avec la gestion DNS.
Commande sng | Route | Action | Ressource |
|---|---|---|---|
sng dns zone list | GET /v1/dns/zones | dns:list | dnszone/* |
sng dns zone create DOMAIN | POST /v1/dns/zones | dns:write | dnszone/* |
sng dns zone describe DOMAIN | GET /v1/dns/zones/{domain} | dns:read | dnszone/<domain> |
sng dns zone delete DOMAIN | DELETE /v1/dns/zones/{domain} | dns:delete | dnszone/<domain> |
sng dns record list | GET /v1/dns/records | dns:list | dnsrecord/* |
sng dns record set NAME | PUT /v1/dns/records | dns:write | dnsrecord/<id> |
sng dns record describe ID | GET /v1/dns/records/{id} | dns:read | dnsrecord/<id> |
sng dns record delete ID | DELETE /v1/dns/records/{id} | dns:delete | dnsrecord/<id> |
sng apply d'un DNSRecord / DNSZone | POST /v1/apply | en plus dns:write | dnsrecord/<name> / dnszone/* |
Avec le DNS, readwrite gagne dns:write et dns:delete. Voir DNS et domaines.
Supervision
Les ressources de supervision (Monitor, NotificationChannel, StatusPage) passent par sng apply : ce sont les actions deploy:* ci-dessus. Aucune action monitoring:* dédiée n'existe dans cette version.
Routes hors policies
Quelques routes ne vérifient pas de policy : elles portent votre identité, pas une session.
Commande sng | Route | Qui |
|---|---|---|
sng sso whoami | GET /v1/iam/me | tout utilisateur connecté |
sng sso logout | POST /v1/iam/logout | tout utilisateur connecté |
sng tenant list | GET /v1/tenants | tout utilisateur connecté (liste les tenants où il détient une policy) |
sng tenant create NAME | POST /v1/tenants | tout utilisateur inscrit sur StackNGO |
sng template list|search|gen | GET /v1/templates[/{kind}] | tout utilisateur connecté |
| — | GET /v1/iam/jwks.json | public |