Attacher une policy
Fonctionnalité déployée et prise en charge. Les champs et commandes décrits ici sont stables au sein de la version v1alpha1.
Une policy ne fait rien tant qu'elle n'est pas attachée à un sujet. sng tenant policy attach lie une policy (la vôtre ou une policy gérée) à des utilisateurs, des rôles, des machines ; detach défait le lien. C'est aussi par là que vous ajoutez quelqu'un à votre tenant.
sng tenant policy attach readonly --user bob --with-assume
policy "readonly" bound to user:bob (pending: applied in a few minutes)
policy "assume-role" bound to user:bob (pending: applied in a few minutes)
Bob peut maintenant faire sng tenant use acme (grâce à assume-role) et lire (grâce à readonly), quelques minutes plus tard.
Prérequis
- Une session sur le tenant :
sng tenant use acme. - L'action
policy:adminsur la policy visée (policy géréeadmin). - Pour
--oidc-trust, un trust déclaré (CI sans secret).
Étapes
1. Choisir le sujet
| Flag (répétable) | Sujet | Forme attendue | Principal résolu |
|---|---|---|---|
--user | un utilisateur de StackNGO | bob, stackngo/bob ou bob@example.com | user:<sub> (stable même si l'utilisateur est renommé) |
--role | un rôle porté par des utilisateurs de StackNGO | org/NOM, ex. stackngo/sre | role:org/NOM |
--app | une application machine (client_credentials) | nom complet de l'application, donné par status.provider.name (sng kind get IAMApplication NOM --json) | app:<nom> |
--oidc-trust | les jobs CI fédérés par un trust du tenant | gitlab-deploy (nom seul, sans /) | oidc:acme/gitlab-deploy |
Règles :
- au moins un sujet ; les valeurs vides et le joker
*sont refusés (« un groupe d'utilisateurs est un rôle ») ; --roleexige la formeorg/NOM;--appattend le nom complet de l'application (sng-<empreinte>-app-<nom>), lu dansstatus.provider.namede l'IAMApplication(voir Identités machine).
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.
Le flag --oidc-trust est activé progressivement avec la fédération CI.
2. Attacher
sng tenant policy attach NAME [sujets...] [--with-assume] [-t TENANT]
--with-assumeattache en plus la policy géréeassume-roleaux mêmes sujets : sans elle, un utilisateur ou une application machine ne peut pas ouvrir de session sur le tenant. Les jobs CI fédérés par un trust du tenant n'en ont pas besoin.-t TENANTvise un autre tenant que le courant :sngouvre une session sur ce tenant pour la commande (il vous fautiam:AssumeRolelà-bas).- Attacher est cumulatif : les sujets s'ajoutent à ceux déjà liés.
Exemples :
# un rôle complet en lecture-écriture, avec entrée dans le tenant
sng tenant policy attach readwrite --role stackngo/dev --with-assume
# une CI GitLab fédérée : publie le CDN, rien d'autre
sng tenant policy attach cdn-publisher --oidc-trust gitlab-deploy
# une application machine lit les secrets
sng tenant policy attach ops-read --app sng-1a2b3c4d-5e6f7a8b-app-ci-deployer --with-assume
3. Détacher
sng tenant policy detach readonly --user bob --with-assume
policy "readonly" unbound from user:bob (pending: applied in a few minutes)
policy "assume-role" unbound from user:bob (pending: applied in a few minutes)
Avec detach, --with-assume retire aussi assume-role. Détacher le dernier sujet supprime le binding.
Vérification
sng tenant policy principals readonly
STATE KIND ID
applied user 7f3e2c1a-…
requested user bob
applied: principaux réellement en vigueur, identifiants résolus (un utilisateur apparaît par sonsub) ;requested: sujets tels que vous les avez demandés, en attente ou déjà appliqués.
Tant qu'un sujet n'apparaît que dans requested, il n'est pas encore en vigueur (quelques minutes). sng tenant list, côté utilisateur, montre les tenants où il détient une policy.
L'équivalent déclaratif : IAMPolicyBinding
Chaque attach écrit un binding nommé bind-<policy> dans l'état désiré de votre tenant :
apiVersion: iam.stackngo.io/v1alpha1
kind: IAMPolicyBinding
metadata:
name: bind-readonly
spec:
policyRef:
name: readonly
subjects:
users: [bob]
roles: [stackngo/dev]
applications: [sng-1a2b3c4d-5e6f7a8b-app-ci-deployer]
oidcTrusts: [gitlab-deploy]
Vous n'écrivez pas ce fichier : sng tenant policy attach/detach le maintiennent, et sng tenant policy principals le lit. Voir IAMPolicyBinding.
Erreurs fréquentes
| Message | Cause | Correction |
|---|---|---|
at least one --user, --role, … is required | aucun sujet | ajouter un flag de sujet |
--role "dev": expected org/NAME | rôle sans organisation | --role stackngo/dev |
subjects must be explicit (no empty value, no global *) | joker | nommer chaque sujet, ou créer un rôle |
not found | la policy n'existe pas dans le tenant | sng tenant policy list |
forbidden (no policy of this tenant allows it: see sng tenant policy list) | pas de policy:admin | demander la policy admin |
policies: reserved … | tenant réservé à la plateforme | viser votre propre tenant |
Pour aller plus loin
- Les attachements créés avec le tenant (le créateur sur
assume-roleetadmin) appartiennent à la plateforme ; vosattachsur ces policies créent un second bindingbind-<policy>à côté. Un principal n'est détaché d'une policy que si plus aucun binding ne le porte. - Un utilisateur renommé garde ses droits : le binding est résolu en
sub. Un utilisateur supprimé n'a plus d'effet (InvalidReference) ; retirez-le du binding. - Supprimer un trust OIDC laisse ses bindings en place, sans effet : plus aucune identité ne peut les porter.