IAMPolicyBinding
Fonctionnalité déployée et prise en charge. Les champs et commandes décrits ici sont stables au sein de la version v1alpha1.
apiVersion | iam.stackngo.io/v1alpha1 |
kind | IAMPolicyBinding |
| Appliqué par | sng tenant policy attach / detach (ou POST /v1/iam/policies/{name}/attach, PUT /v1/iam/bindings/{name}), pas par sng apply |
| Commandes liées | sng 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 :
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é
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/nomou une adresse e-mail (lettres, chiffres,.,_,@,+,-).roles: formeorg/nomobligatoire.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.namedésigne une policy existante du tenant ou une policy gérée ; sinon404.
IAMPolicyBinding
IAMPolicyBinding attache une IAMPolicy de votre tenant à des sujets : utilisateurs, rôles, applications ou émetteurs OIDC de confiance.
| Champ | Description | Défaut | Validation |
|---|---|---|---|
apiVersion string | iam.stackngo.io/v1alpha1 | ||
kind string | IAMPolicyBinding | ||
metadata ObjectMeta | Seul metadata.name est à renseigner (nom de la ressource dans votre tenant). | ||
spec IAMPolicyBindingSpec | |||
status IAMPolicyBindingStatus |
IAMPolicyBindingSpec
| Champ | Description | Défaut | Validation |
|---|---|---|---|
policyRef ObjectReference | IAMPolicy à attacher, dans votre tenant. | ||
subjects IAMPolicySubjects | Utilisateurs et rôles auxquels la policy s'applique. | ||
deletionPolicy DeletionPolicy | Delete (défaut) : supprimer l'IAMPolicyBinding détache la policy de ses sujets. Orphan : les rattachements restent en vigueur. | Delete | Enum: [Delete Orphan] Optional: {} |
IAMPolicyBindingStatus
| Champ | Description | Défaut | Validation |
|---|---|---|---|
observedGeneration integer | Dernière version du manifeste (metadata.generation) prise en compte par la plateforme. | ||
provider ProviderStatus | Identité de la ressource dans le service d'authentification. | ||
lastSyncedAt Time | Date de la dernière prise en compte réussie du manifeste. | Optional: {} | |
conditions Condition array | Conditions décrivant l'état actuel de la ressource (Ready…). | ||
tenant string | Tenant auquel appartient le rattachement. Renseigné par la plateforme. | ||
policy string | Policy à laquelle les principaux ci-dessous sont attachés. | ||
appliedPrincipals string array | Principaux attachés par ce binding ("kind:id"), triés. | ||
unresolvedUsers string array | Utilisateurs 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.
| Champ | Description | Défaut | Validation |
|---|---|---|---|
name string | Nom 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.
| Champ | Description | Défaut | Validation |
|---|---|---|---|
users string array | Utilisateurs de l'annuaire : nom (organisation de la plateforme), org/nom ou e-mail. | MaxItems: 256 | |
roles string array | Rôles de l'annuaire, au format org/nom. | MaxItems: 256 | |
applications string array | Applications machine externes, désignées par le nom affiché dans status.provider.name de leur IAMApplication. | MaxItems: 256 | |
oidcTrusts string array | Noms 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]
| Valeur | Description |
|---|---|
Block | Non accepté pour un IAMPolicyBinding : utilisez Delete ou Orphan. |
Orphan | Supprime le manifeste mais conserve la ressource créée. |
Delete | Supprime la ressource avec le manifeste, sans vérifier son usage. |
ProviderStatus
ProviderStatus identifie la ressource dans le service d'authentification.
| Champ | Description | Défaut | Validation |
|---|---|---|---|
owner string | Organisation propriétaire de l'objet dans l'annuaire d'identité. Renseigné par la plateforme. | ||
name string | Nom de l'objet dans l'annuaire d'identité. Renseigné par la plateforme. | ||
resourceID string | Identifiant 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) | Signification | Action corrective |
|---|---|---|
WaitingForPolicy | la policy visée n'est pas encore appliquée | attendre quelques instants |
InvalidReference | un 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 |
UnsupportedConfiguration | le manifeste enfreint une règle de sujet | corriger par detach / attach |
ScopeUnresolved | tenant du binding indéterminé | réessai automatique ; si cela dure, contacter le support |
ProviderUnavailable | service d'identité momentanément injoignable | réessai automatique |
InsufficientRBAC | incident côté plateforme | contacter 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ôme | Cause | Correction |
|---|---|---|
at least one --user, --role, … is required | aucun sujet | ajouter un flag de sujet |
--role "sre": expected org/NAME | rôle sans organisation | --role stackngo/sre |
subjects must be explicit (no empty value, no global *) | joker ou valeur vide | nommer chaque sujet |
404 not found | la policy visée n'existe pas | sng tenant policy list |
L'utilisateur reste en requested seulement | prise 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 use | readonly n'inclut pas iam:assumerole | attach … --with-assume |
--app attaché sans effet | nom du manifeste au lieu du nom SSO | status.provider.name de l'IAMApplication |
Voir aussi
- Guides : Attacher une policy, Machines et comptes de service, Déployer sans secret (OIDC)
- CLI :
sng tenant policy attach - Autres kinds : IAMPolicy, IAMOIDCTrust, IAMApplication