Aller au contenu principal

Catalogue des actions

Disponible

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/nom désigne un élément ; type/* désigne la collection (lister, créer). Un Allow sur secret/* couvre la collection ; un Deny partiel (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 readonly et readwrite sont rappelées en colonne : R = couverte par readonly, RW = couverte par readwrite, A = admin seulement.

Déploiements et applications (deploy)​

Commande sngRouteActionRessourceGérée
sng applyPOST /v1/apply, POST /v1/apply/completedeploy:writerelease/*RW
sng apply d'un CDNSiteidemen plus cdn:writecdn/<site>RW
sng validatePOST /v1/validatedeploy:readrelease/*R
sng planPOST /v1/plandeploy:readrelease/*R
sng pullGET /v1/export, POST /v1/exportdeploy:readresource/*R
sng kind list TYPE, sng kind get TYPEGET /v1/resources/{type}deploy:listresource/<type>/*R
sng kind get TYPE NAMEGET /v1/resources/{type}/{name}deploy:readresource/<type>/<name>R
sng kind delete TYPE NAMEDELETE /v1/resources/{type}/{name}deploy:deleteresource/<type>/<name>RW
sng kind delete CDNSite NAMEidemen plus cdn:deletecdn/<site>RW
—POST /v1/deployments, POST /v1/deployments/{id}/completedeploy:writerelease/*RW
—GET /v1/deployments/{id}, GET /v1/operations/{id}deploy:readrelease/*R
—GET /v1/releasesdeploy:listrelease/*R
—POST /v1/releasesdeploy:writerelease/*RW
—POST /v1/releases/{version}/restoredeploy:writerelease/<version>RW
sng app list, sng kind list AppGET /v1/appsdeploy:listapp/*R
sng app describe NAME, sng kind get App NAMEGET /v1/apps/{name}deploy:readapp/<name>R
sng app create NAMEPOST /v1/appsdeploy:writeapp/<name>RW
sng app patch NAME, sng app scale NAME N, sng app restart NAMEPATCH /v1/apps/{name}, POST /v1/apps/{name}/scale, POST /v1/apps/{name}/restartdeploy:writeapp/<name>RW
sng app delete NAMEDELETE /v1/apps/{name}deploy:deleteapp/<name>RW
sng app logs NAMEGET /v1/apps/{name}/logsdeploy:logsapp/<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 sngRouteActionRessourceGérée
sng secret listGET /v1/secretsssm:listsecret/*R
sng secret describe NAME, sng secret versions NAMEGET /v1/secrets/{name}, GET /v1/secrets/{name}/versionsssm:describesecret/<name>R
sng secret get NAMEGET /v1/secrets/{name}/valuessm:readsecret/<name>R
sng secret set NAME, sng secret restore NAMEPUT /v1/secrets/{name}, POST /v1/secrets/{name}/restoressm:writesecret/<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:writesecret/<name>RW
API seulement : rotation immédiate et annulation de la rotation planifiéePOST /v1/secrets/{name}/rotate, POST /v1/secrets/{name}/rotate/cancelssm:rotatesecret/<name>RW
sng secret delete NAMEDELETE /v1/secrets/{name}ssm:deletesecret/<name>RW
sng secret create NAME (manifeste SSMSecret)POST /v1/applydeploy:writerelease/*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 sngRouteActionRessourceGérée
sng kind list CDNSiteGET /v1/cdncdn:listcdn/*R
—POST /v1/cdncdn:writecdn/* puis cdn/<site>RW
—POST /v1/cdn/{site}/enable, POST /v1/cdn/{site}/disablecdn:writecdn/<site>RW
—DELETE /v1/cdn/{site}cdn:deletecdn/<site>RW
publicationPOST /v1/cdn/{site}/uploads, POST /v1/cdn/{site}/uploads/completecdn:uploadcdn/<site>RW
vidage du cachePOST /v1/cdn/{site}/cache/clearcdn:purgecdn/<site>RW

Voir Sites statiques pour les commandes correspondantes.

Environnements (env)​

Commande sngRouteActionRessourceGérée
sng env listGET /v1/envenv:readenv/*R
sng env checkout NAME, sng env refreshPOST /v1/env/checkout, POST /v1/env/refreshenv:writeenv/*RW
sng env restore REFPOST /v1/env/restoreenv:adminenv/*A
sng env create-tenant NAMEPOST /v1/env/create-tenantenv:adminenv/*A

Tier de ressources (tier)​

Commande sngRouteActionRessourceGérée
sng tenant tier listGET /v1/tierstier:listtier/<tenant>R
sng tenant tier showGET /v1/tiertier:readtier/<tenant>R
sng tenant tier set TIERPUT /v1/tiertier:writetier/<tenant>A

tier:write n'est pas dans readwrite : changer le tier demande admin.

Policies et sessions (policy, iam, oidctrust)​

Commande sngRouteActionRessourceGérée
sng tenant use, sng tenant assumePOST /v1/iam/session, POST /v1/iam/session/assumeiam:assumeroletenant/<tenant> (policy du tenant visé)A, assume-role
sng tenant policy list, GET /v1/iam/bindingsGET /v1/iam/policies, GET /v1/iam/bindingspolicy:listpolicy/*R
sng tenant policy get NAME, principals NAMEGET /v1/iam/policies/{name}, …/principalspolicy:readpolicy/<name>R
sng tenant policy create|update|delete NAMEPUT|DELETE /v1/iam/policies/{name}policy:adminpolicy/<name>A
sng tenant policy attach|detach NAMEPOST /v1/iam/policies/{name}/attach|detach, PUT|DELETE /v1/iam/bindings/{name}policy:adminpolicy/<name>A
sng tenant oidc listGET /v1/iam/oidc-trustsoidctrust:listoidctrust/*R
sng tenant oidc get NAMEGET /v1/iam/oidc-trusts/{name}oidctrust:readoidctrust/<name>R
sng tenant oidc create|delete NAMEPUT|DELETE /v1/iam/oidc-trusts/{name}oidctrust:adminoidctrust/<name>A

Vos utilisateurs finaux (auth)​

Routes /v1/auth/… : elles portent toujours sur l'annuaire du tenant de la session.

Commande sngRouteActionRessourceGérée
sng iam user listGET /v1/auth/usersauth:ListUsersauth/users/*R
sng iam user describe IDGET /v1/auth/users/{id}auth:ListUsersauth/users/<id>R
sng iam user disable|enable IDPOST /v1/auth/users/{id}/disable|enableauth:ManageUsersauth/users/<id>A
sng iam user roles IDPUT /v1/auth/users/{id}/rolesauth:ManageUsersauth/users/<id>A
sng iam user delete IDDELETE /v1/auth/users/{id}auth:ManageUsersauth/users/<id>A
sng iam invitation listGET /v1/auth/invitationsauth:ListUsersauth/invitations/*R
sng iam user invite EMAIL, sng iam invitation delete IDPOST /v1/auth/invitations, DELETE …/{id}auth:ManageUsersauth/invitations/*A
sng iam role list|describeGET /v1/auth/roles[/{name}]auth:ListUsersauth/roles/*R
sng iam role create|update|deletePUT|DELETE /v1/auth/roles/{name}auth:ManageRolesauth/roles/<name>A
sng iam login-page showGET /v1/auth/settingsauth:ListUsersauth/settingsR
sng iam login-page setPUT /v1/auth/settingsauth:ManageLoginPageauth/settingsA
sng iam app credentials NAMEGET /v1/auth/applications/{name}/credentialsauth:ReadCredentialsiamapp/<name>R
sng iam app rotate NAMEPOST /v1/auth/applications/{name}/rotateauth:RotateCredentialsiamapp/<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érationActionRessourceGérée
docker pull, lecture d'un manifeste, scan de vulnérabilitésregistry:pullrepository/<dépôt>R
docker pushregistry:pushrepository/<dépôt>RW
suppression d'un manifesteregistry:deleterepository/<dépôt>RW
docker login (vérification de la session seule)registry:pullrepository/login-probeR
sng registry access-key credentials NAME (lecture des identifiants d'une clé d'accès)registry:adminaccesskey/<nom>A
sng registry access-key rotate NAME (renouvellement immédiat d'une clé d'accès)registry:rotateaccesskey/<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)​

Bêta

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 sngRouteActionRessource
sng dns zone listGET /v1/dns/zonesdns:listdnszone/*
sng dns zone create DOMAINPOST /v1/dns/zonesdns:writednszone/*
sng dns zone describe DOMAINGET /v1/dns/zones/{domain}dns:readdnszone/<domain>
sng dns zone delete DOMAINDELETE /v1/dns/zones/{domain}dns:deletednszone/<domain>
sng dns record listGET /v1/dns/recordsdns:listdnsrecord/*
sng dns record set NAMEPUT /v1/dns/recordsdns:writednsrecord/<id>
sng dns record describe IDGET /v1/dns/records/{id}dns:readdnsrecord/<id>
sng dns record delete IDDELETE /v1/dns/records/{id}dns:deletednsrecord/<id>
sng apply d'un DNSRecord / DNSZonePOST /v1/applyen plus dns:writednsrecord/<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 sngRouteQui
sng sso whoamiGET /v1/iam/metout utilisateur connecté
sng sso logoutPOST /v1/iam/logouttout utilisateur connecté
sng tenant listGET /v1/tenantstout utilisateur connecté (liste les tenants où il détient une policy)
sng tenant create NAMEPOST /v1/tenantstout utilisateur inscrit sur StackNGO
sng template list|search|genGET /v1/templates[/{kind}]tout utilisateur connecté
—GET /v1/iam/jwks.jsonpublic

Voir aussi​