Aller au contenu principal

IAMPolicyBinding

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
kindIAMPolicyBinding
Appliqué parsng tenant policy attach / detach (ou POST /v1/iam/policies/{name}/attach, PUT /v1/iam/bindings/{name}), pas par sng apply
Commandes liéessng tenant policy attach · detach · principals, sng tenant policy delete

À quoi ça sert​

Un IAMPolicyBinding dit à qui s'applique une IAMPolicy du tenant : des utilisateurs, des rôles du SSO, des applications machine, des trusts OIDC de CI. Chaque policy a au plus un binding écrit par l'API, nommé bind-<policy>. Vous ne l'écrivez pas : sng tenant policy attach et detach le maintiennent, et sng tenant policy principals le lit. C'est aussi par lui qu'on ajoute quelqu'un à un tenant (attacher assume-role).

Exemple minimal​

sng tenant policy attach readonly --user bob --with-assume

produit, dans l'état désiré du tenant :

bind-readonly.yml (écrit par l'API)
apiVersion: iam.stackngo.io/v1alpha1
kind: IAMPolicyBinding
metadata:
name: bind-readonly
spec:
policyRef:
name: readonly
subjects:
users: [bob]

(et un bind-assume-role équivalent pour --with-assume).

Exemple complet commenté​

bind-ops-read.yml (écrit par l'API, lecture seule)
apiVersion: iam.stackngo.io/v1alpha1
kind: IAMPolicyBinding
metadata:
name: bind-ops-read # toujours bind-<policy>
spec:
policyRef:
name: ops-read # IAMPolicy du même tenant (ou une policy gérée)
subjects: # au moins un sujet ; 256 au plus par liste ; pas de joker
users: # --user : nom, org/nom ou e-mail ; résolu en sub
- bob
- alice@acme.example
roles: # --role : rôle du SSO de la plateforme, org/nom
- stackngo/sre
applications: # --app : nom SSO d'une IAMApplication (status.provider.name)
- sng-1a2b3c4d-5e6f7a8b-app-ci-deployer
oidcTrusts: [gitlab-deploy] # --oidc-trust : IAMOIDCTrust du tenant (Bêta)

Équivalent CLI :

sng tenant policy attach ops-read \
--user bob --user alice@acme.example --role stackngo/sre \
--app sng-1a2b3c4d-5e6f7a8b-app-ci-deployer \
--oidc-trust gitlab-deploy

Champs​

Règles de validation croisées​

Pas de règle CEL. L'API vérifie chaque sujet dès sng tenant policy attach (400 sinon), et la CLI avant elle :

  • users : un nom, org/nom ou une adresse e-mail (lettres, chiffres, ., _, @, +, -).
  • roles : forme org/nom obligatoire.
  • applications : un nom d'application du SSO.
  • oidcTrusts : un nom de trust du tenant (label DNS, sans /).
  • Aucune valeur vide, aucun * global : un groupe d'utilisateurs se représente par un rôle.
  • policyRef.name désigne une policy existante du tenant ou une policy gérée ; sinon 404.

IAMPolicyBinding​

IAMPolicyBinding attache une IAMPolicy de votre tenant à des sujets : utilisateurs, rôles, applications ou émetteurs OIDC de confiance.

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

IAMPolicyBindingSpec​

ChampDescriptionDéfautValidation
policyRef ObjectReferenceIAMPolicy à attacher, dans votre tenant.
subjects IAMPolicySubjectsUtilisateurs et rôles auxquels la policy s'applique.
deletionPolicy DeletionPolicyDelete (défaut) : supprimer l'IAMPolicyBinding détache la policy de ses sujets.
Orphan : les rattachements restent en vigueur.
DeleteEnum: [Delete Orphan]
Optional: {}

IAMPolicyBindingStatus​

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 appartient le rattachement. Renseigné par la plateforme.
policy stringPolicy à laquelle les principaux ci-dessous sont attachés.
appliedPrincipals string arrayPrincipaux attachés par ce binding ("kind:id"), triés.
unresolvedUsers string arrayUtilisateurs de spec.subjects.users sans compte (ou référence invalide), ignorés
tant qu'ils ne sont pas résolus ; les autres sujets sont appliqués. Les
64 premiers, dans l'ordre de la spec.
MaxItems: 64
Optional: {}

ObjectReference​

ObjectReference désigne une autre ressource IAM de votre tenant.

ChampDescriptionDéfautValidation
name stringNom de la ressource désignée, dans votre tenant.MaxLength: 253
MinLength: 1

IAMPolicySubjects​

IAMPolicySubjects : sujets auxquels la policy s'applique. Aucun joker global n'est accepté ; pour viser un groupe d'utilisateurs, utilisez un rôle.

ChampDescriptionDéfautValidation
users string arrayUtilisateurs de l'annuaire : nom (organisation de la plateforme), org/nom ou e-mail.MaxItems: 256
roles string arrayRôles de l'annuaire, au format org/nom.MaxItems: 256
applications string arrayApplications machine externes, désignées par le nom affiché dans
status.provider.name de leur IAMApplication.
MaxItems: 256
oidcTrusts string arrayNoms d'IAMOIDCTrust du tenant du binding ; leurs sessions ont pour principal
oidc:<tenant>/<nom>.
MaxItems: 256

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
BlockNon accepté pour un IAMPolicyBinding : utilisez Delete ou Orphan.
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.

Statut et conditions​

La lecture se fait par la CLI :

sng tenant policy principals ops-read
STATE KIND ID
applied user 7f3e2c1a-0b5d-4c1e-9a77-2d0c4e8f1b23
requested user bob
  • applied : principaux en vigueur, identifiants résolus (user:<sub>, role:org/nom, app:<nom>, oidc:<tenant>/<trust>) ;
  • requested : sujets tels que demandés dans l'état désiré.

Côté objet : status.policy, status.tenant, status.appliedPrincipals (principaux attachés par ce binding, kind:id), condition Ready.

Raison (Ready=False)SignificationAction corrective
WaitingForPolicyla policy visée n'est pas encore appliquéeattendre quelques instants
InvalidReferenceun sujet n'a pas pu être résolu (utilisateur inconnu du SSO, par exemple) ou a été refusésng tenant policy detach du sujet fautif
UnsupportedConfigurationle manifeste enfreint une règle de sujetcorriger par detach / attach
ScopeUnresolvedtenant du binding indéterminéréessai automatique ; si cela dure, contacter le support
ProviderUnavailableservice d'identité momentanément injoignableréessai automatique
InsufficientRBACincident côté plateformecontacter le support

Ce qui se passe quand vous attachez, détachez ou supprimez​

Attacher. sng tenant policy attach ajoute les sujets au binding bind-<policy> (202, status: "pending"). Quelques instants plus tard, les sujets passent en applied : un utilisateur est reconnu par son identifiant stable (sub), même s'il est renommé.

Détacher. sng tenant policy detach retire les sujets ; un binding sans sujet est supprimé. Un sujet garde la permission tant qu'un autre binding de la même policy le porte : les attachements créés avec le tenant (le créateur sur admin et assume-role, les accès propres à la plateforme) restent en place à côté du vôtre.

Supprimer la policy. sng tenant policy delete supprime aussi bind-<policy>. Supprimer un trust OIDC ou un utilisateur laisse le binding en place, sans effet : un utilisateur supprimé apparaît en InvalidReference.

Erreurs fréquentes​

SymptômeCauseCorrection
at least one --user, --role, … is requiredaucun sujetajouter un flag de sujet
--role "sre": expected org/NAMErôle sans organisation--role stackngo/sre
subjects must be explicit (no empty value, no global *)joker ou valeur videnommer chaque sujet
404 not foundla policy visée n'existe passng tenant policy list
L'utilisateur reste en requested seulementprise en compte en cours, ou utilisateur inconnu du SSO (InvalidReference)attendre ; vérifier l'orthographe
Un utilisateur attaché à readonly ne peut pas faire sng tenant usereadonly n'inclut pas iam:assumeroleattach … --with-assume
--app attaché sans effetnom du manifeste au lieu du nom SSOstatus.provider.name de l'IAMApplication

Voir aussi​