Aller au contenu principal

IAMPolicy

Disponible

Fonctionnalité déployée et prise en charge. Les champs et commandes décrits ici sont stables au sein de la version v1alpha1.

apiVersioniam.stackngo.io/v1alpha1
kindIAMPolicy
Appliqué parsng tenant policy create / update / delete (ou PUT /v1/iam/policies/{name}), pas par sng apply
Commandes liéessng tenant policy list · get · create · update · delete · attach · principals

À quoi ça sert​

Une IAMPolicy est un document de policy de votre tenant : une liste de déclarations Allow ou Deny sur des actions (ssm:read, deploy:write, GET…) et des ressources (secret/prod-*, app/api…). Elle ne fait rien seule : elle s'applique aux sujets que lui attache son IAMPolicyBinding. Vous ne l'écrivez pas dans l'état désiré vous-même : sng tenant policy valide le document, l'écrit dans l'état désiré de votre tenant, et elle entre en vigueur quelques instants plus tard. Le format et l'évaluation sont expliqués dans Écrire une policy.

Exemple minimal​

ops-read.yml
apiVersion: iam.stackngo.io/v1alpha1
kind: IAMPolicy
metadata:
name: ops-read
spec:
statement:
- effect: Allow
actions: ["ssm:read", "ssm:list", "ssm:describe"]
resources: ["secret/*"]
sng tenant policy create ops-read -f ops-read.yml
policy "ops-read" created (pending: …)

Le même document en JSON (sng tenant policy create ops-read -f ops-read.json) :

ops-read.json
{ "Version": "1",
"Statement": [
{ "Effect": "Allow", "Actions": ["ssm:read", "ssm:list", "ssm:describe"], "Resources": ["secret/*"] } ] }
Pas de sng apply

sng apply refuse le kind IAMPolicy : les policies passent toujours par sng tenant policy ou l'API, qui les valident avant de les écrire. sng tenant policy create -f accepte le manifeste ci-dessus et n'en lit que metadata.name (ignoré au profit de NAME), spec.description et spec.statement.

Exemple complet commenté​

ci-publisher.yml
apiVersion: iam.stackngo.io/v1alpha1
kind: IAMPolicy
metadata:
name: ci-publisher # label DNS, 63 caractères ; ni nom géré, ni préfixe bind-
spec:
description: publication du site, sans création ni suppression # 256 caractères max
statement: # 1 à 50 déclarations
- effect: Allow # Allow ou Deny, casse respectée
actions: ["cdn:upload", "cdn:purge"] # 1 à 64 actions : service:verbe, méthode HTTP ou *
resources: ["cdn/*"] # 0 à 64 ressources ; absent ou vide = ["*"]
- effect: Deny # un Deny l'emporte toujours sur un Allow
actions: ["cdn:*"]
resources: ["cdn/prod-*"] # joker * en suffixe d'une ressource type/nom
- effect: Allow
actions: ["GET"] # méthode HTTP : routes de vos API générées
resources: ["https://orders-api.acme.dev.stackngo.app/v1/orders/*"]
sng tenant policy create ci-publisher -f ci-publisher.yml
sng tenant policy attach ci-publisher --oidc-trust gitlab-deploy

Champs​

Règles de validation croisées​

Le schéma ne porte pas de règle CEL. Le document est validé strictement par l'API dès sng tenant policy create / update (400 au moindre écart) :

  • Version vaut "1" (ajouté par la CLI quand elle lit un manifeste) ; aucune autre clé que Version et Statement, aucune autre clé de déclaration que Effect, Actions, Resources.
  • 1 à 50 déclarations ; 1 à 64 actions et au plus 64 ressources par déclaration ; un document pèse au plus 64 Kio.
  • Chaque action est un motif connu (service:verbe avec joker *, une méthode HTTP, ou *) ; chaque ressource est *, type/nom (joker en suffixe seulement), un chemin /… ou une URL https://…. Le détail est dans Écrire une policy.
  • Le nom est un label DNS de 63 caractères au plus, n'est pas celui d'une policy gérée (par exemple assume-role, readonly, readwrite, admin : 409) et ne commence pas par bind-.

IAMPolicy​

IAMPolicy déclare une policy d'autorisation de votre tenant : les actions qu'elle autorise ou refuse, et sur quelles ressources. Seule, elle ne donne aucun droit : un IAMPolicyBinding l'attache à des utilisateurs, rôles ou applications.

ChampDescriptionDéfautValidation
apiVersion stringiam.stackngo.io/v1alpha1
kind stringIAMPolicy
metadata ObjectMetaSeul metadata.name est à renseigner (nom de la ressource dans votre tenant).
spec IAMPolicySpec
status IAMPolicyStatus

IAMPolicySpec​

IAMPolicySpec : document de policy. Un refus explicite (Deny) l'emporte sur une autorisation (Allow) ; sans règle applicable, l'accès est refusé.

ChampDescriptionDéfautValidation
description stringDescription libre de ce que la policy autorise ou refuse.MaxLength: 256
statement IAMPolicyStatement arrayRègles de la policy (1 à 50). Chacune autorise (Allow) ou refuse (Deny) des actions sur des ressources.MaxItems: 50
MinItems: 1
deletionPolicy DeletionPolicyBlock (défaut, valeur vide) : la suppression de l'IAMPolicy attend qu'aucun
IAMPolicyBinding de votre tenant ne la référence, puis retire la policy. Delete :
retrait immédiat, même si des bindings la référencent encore. Orphan : la policy
reste en vigueur après la suppression de l'IAMPolicy.
Enum: [Block Delete Orphan]
Optional: {}

IAMPolicyStatus​

ChampDescriptionDéfautValidation
observedGeneration integerDernière version du manifeste (metadata.generation) prise en compte par la plateforme.
provider ProviderStatusIdentité de la ressource dans le service d'authentification.
lastSyncedAt TimeDate de la dernière prise en compte réussie du manifeste.Optional: {}
conditions Condition arrayConditions décrivant l'état actuel de la ressource (Ready…).
tenant stringTenant auquel la policy s'applique.
version integerVersion de la policy après la dernière modification enregistrée.

IAMPolicyStatement​

IAMPolicyStatement autorise ou refuse des actions sur des ressources du tenant.

ChampDescriptionDéfautValidation
effect stringAllow pour autoriser, Deny pour refuser. Un Deny l'emporte sur un Allow.Enum: [Allow Deny]
actions string arrayActions visées : service:verbe (ssm:read, kms:wrap, iam:AssumeRole…), méthode HTTP,
ou * pour toutes.
MinItems: 1
resources string arrayRessources visées : , type/nom (joker * en suffixe), /chemin ou
https://hôte/chemin. Vide : toutes les ressources (
).

DeletionPolicy​

Type sous-jacent : string

DeletionPolicy indique ce que devient la ressource quand vous supprimez son manifeste : Block bloque la suppression tant que la ressource est encore utilisée, Orphan la conserve, Delete la supprime.

Règles de validation :

  • Enum: [Block Orphan Delete]
ValeurDescription
BlockBloque la suppression tant que la ressource est encore utilisée par une autre.
OrphanSupprime le manifeste mais conserve la ressource créée.
DeleteSupprime la ressource avec le manifeste, sans vérifier son usage.

ProviderStatus​

ProviderStatus identifie la ressource dans le service d'authentification.

ChampDescriptionDéfautValidation
owner stringOrganisation propriétaire de l'objet dans l'annuaire d'identité. Renseigné par la plateforme.
name stringNom de l'objet dans l'annuaire d'identité. Renseigné par la plateforme.
resourceID stringIdentifiant de l'objet dans l'annuaire d'identité. Renseigné par la plateforme.

spec.deletionPolicy n'est pas réglable par sng tenant policy : les policies écrites par l'API prennent la valeur par défaut, Delete.

Statut et conditions​

Le plus simple est de lire le statut par la CLI :

Statut (sng tenant policy list)Signification
pendingécrit dans l'état désiré, pas encore appliqué
appliedle document en vigueur est celui demandé ; VERSION donne sa version
deletingsuppression demandée, encore en vigueur quelques instants

Côté objet, status.tenant est le tenant de la policy et status.version sa version après la dernière application. La condition Ready vaut True (raison Reconciled) quand le document est appliqué.

Raison (Ready=False)SignificationAction corrective
InvalidDocumentle document a été refusé à l'applicationcorriger avec sng tenant policy update
UnsupportedConfigurationle manifeste enfreint une règle (nom, déclarations, effet)idem
ScopeUnresolvedle tenant de la policy n'a pas pu être déterminéréessai automatique ; si cela dure, contacter le support
ProviderUnavailableservice d'identité momentanément injoignableréessai automatique
InsufficientRBACincident côté plateformecontacter le support

Une policy qui reste pending plus de quelques minutes signale l'une de ces raisons.

Ce qui se passe à la création et à la suppression​

Création et mise à jour. sng tenant policy create|update → PUT /v1/iam/policies/<nom> : validation, réponse 202 Accepted avec status: "pending". Quelques instants plus tard, le document entre en vigueur et version augmente. Les sessions déjà ouvertes voient le changement dès qu'il est en vigueur (chaque requête est évaluée sur les policies en vigueur).

Suppression. sng tenant policy delete <nom> supprime la policy et son binding bind-<nom> (202). Quelques instants plus tard, ses sujets perdent les droits qu'elle accordait. Les policies gérées ne se suppriment pas (409).

Policies gérées. Les policies créées avec le tenant (default: true) ne se modifient pas mais s'attachent comme les vôtres.

Erreurs fréquentes​

SymptômeCauseCorrection
sng apply refuse le kind IAMPolicyles policies ne passent pas par sng applysng tenant policy create NAME -f FILE
400 policies: invalid request: statement[0]: …action ou ressource mal formée, clé inconnue, effet mal orthographié (allow)corriger le document ; Effect respecte la casse
409 policies: reserved: "admin" is a default policy of the tenant corenom d'une policy géréechoisir un autre nom ; attacher la policy gérée si elle convient
400 … prefix "bind-" is reservednom commençant par bind-renommer
403 forbidden: insufficient permissionspas de policy:admin sur policy/<nom>policy admin (pas readwrite)
Statut pending qui ne passe pas à appliedprise en compte en cours, ou raison d'échec ci-dessusattendre quelques minutes ; sinon contacter le support

Voir aussi​