Dépôts, groupes et accès
Décider qui peut construire depuis un dépôt, gérer les groupes de permissions et savoir qui détient quoi, depuis le terminal.
Deux groupes de commandes couvrent l'accès. isogrid repos décide qui, dans
l'organisation, peut utiliser un dépôt connecté. isogrid iam liste les membres
et gère les groupes de permissions. Les deux font ce que font les pages d'accès
de la console, et peuvent donc être scriptés : pour intégrer une équipe, ou pour
vérifier lors d'une revue qui détient quoi.
Les principes sous-jacents sont expliqués dans Rôles, groupes de permissions et accès et Dépôts Git. Cette page présente les commandes.
Dépôts : isogrid repos
repos répond aussi à repo et repositories. Un dépôt se désigne par son nom
complet (acme/api, ou platform/backend/api pour un projet GitLab dans des
groupes imbriqués), par une URL collée depuis le navigateur, ou par son
identifiant.
Les lister
isogrid repos list [--provider github|gitlab] [--search TEXT] [--json]
REPOSITORY PROVIDER ACCESS OWNER YOU
acme/api github organization samir@acme.example view,create-app,deploy,update,delete,share
acme/website github private (default) aziz@acme.example view,create-app,deploy
platform/billing gitlab administrators lina@acme.example view
- ACCESS indique qui peut accéder au dépôt :
private,administratorsouorganization.(default)signifie que le dépôt n'a pas de réglage propre et suit la valeur par défaut de sa connexion. - OWNER est le membre par le compte GitHub ou GitLab duquel le dépôt arrive. C'est lui qui décide qui d'autre peut l'utiliser.
- YOU est ce que vous pouvez faire avec, sans le préfixe
repo:.
Seuls les dépôts que vous pouvez voir sont listés. Le dépôt privé d'un collègue n'apparaît pas et ne répond pas non plus à son nom, sauf s'il vous l'accorde.
Définir qui peut y accéder
isogrid repos access <repo> [--visibility private|administrators|organization|inherit]
[--org-capabilities CAP,...]
--visibility |
Qui peut y accéder |
|---|---|
private |
Le propriétaire, et toute personne à qui il a été accordé. |
administrators |
En plus, le propriétaire de l'organisation et ses administrateurs. |
organization |
En plus, chaque membre, avec les capacités indiquées dans --org-capabilities. |
inherit |
Supprime le réglage propre au dépôt et suit la valeur par défaut de la connexion. |
--org-capabilities est ce que chaque membre détient sous organization. Sans
cette option, les membres peuvent voir le dépôt, créer des applications à partir
de lui, les déployer et modifier leur configuration, mais pas supprimer les
applications des autres ni partager le dépôt plus loin.
Seul le propriétaire peut modifier ce réglage, ou un administrateur une fois que le propriétaire a quitté l'organisation.
# Open the API to everyone, but only to deploy what exists
isogrid repos access acme/api --visibility organization \
--org-capabilities repo:view,repo:deploy
# Close it again
isogrid repos access acme/api --visibility private
L'accorder à un membre ou à un groupe
isogrid repos grant <repo> (--member EMAIL | --group SLUG) [--preset NAME] [--capabilities CAP,...]
Indiquez un préréglage, une liste de capacités, ou les deux ; c'est l'union qui est accordée.
| Préréglage | Capacités |
|---|---|
repo-viewer |
repo:view |
repo-deployer |
repo:view, repo:create-app, repo:deploy |
repo-maintainer |
les précédentes, et repo:update |
repo-admin |
les précédentes, et repo:delete |
Aucun préréglage n'inclut repo:share : décider qui d'autre peut entrer reste
l'affaire de la personne qui a connecté le compte. Vous ne pouvez accorder que
des capacités que vous détenez vous-même.
# A contractor who may deploy the applications built from the API
isogrid repos grant acme/api --member contractor@partner.example --preset repo-deployer
# The QA group may see the code and redeploy, but not create applications
isogrid repos grant acme/api --group qa --capabilities repo:view,repo:deploy
Un accès accordé couvre toutes les applications construites à partir du dépôt, y compris celles créées après.
Voir et retirer les accès accordés
isogrid repos grants <repo> [--json]
isogrid repos revoke <repo> <grant-id|email|group>
isogrid repos grants acme/api
# ID SUBJECT WHO CAPABILITIES GRANTED
# 9c1e4a2b user contractor@partner.example view,create-app,deploy 3 days ago
# 51aa07fe group qa view,deploy 1 hour ago
isogrid repos revoke acme/api contractor@partner.example
isogrid repos revoke acme/api 51aa
Un accès se désigne par le début de son identifiant (quatre caractères ou plus), ou par l'adresse e-mail ou le groupe à qui il a été accordé. Vous ne pouvez retirer qu'un accès qui ne donne pas plus que ce que vous détenez vous-même.
Membres et groupes : isogrid iam
Membres
isogrid iam members [--search TEXT] [--role owner|administrator|developer]
[--status active|suspended] [--group SLUG] [--limit N] [--page N] [--json]
isogrid iam members --role administrator
isogrid iam members --group deployers
isogrid iam members --search @partner.example --status active
Les résultats sont paginés, 50 par page par défaut et 200 au maximum. Inviter des membres et changer leur rôle se fait dans la console.
Groupes
isogrid iam groups list
isogrid iam groups get <group>
isogrid iam groups create --name NAME [--slug SLUG] [--description TEXT] [--permissions P,...] [--inherits GROUP,...]
isogrid iam groups update <group> [--name NAME] [--description TEXT] [--permissions P,...] [--inherits GROUP,...]
isogrid iam groups delete <group> [--yes]
isogrid iam groups add-member <group> <email>
isogrid iam groups remove-member <group> <email>
groups répond aussi à group.
get affiche les permissions propres d'un groupe, celles dont il hérite et
ses membres. C'est la commande à lancer pour savoir ce que rejoindre un groupe
donnerait réellement à quelqu'un.
create prend des permissions d'organisation et les slugs des groupes dont
hériter. Les membres du nouveau groupe détiennent ses permissions propres et
tout ce que détiennent ses parents, de manière transitive.
update ne modifie que ce que vous indiquez, mais --permissions et
--inherits remplacent la liste entière. --inherits "" la vide.
Les groupes intégrés ne peuvent être ni modifiés ni supprimés. Pour en ajuster un, créez votre propre groupe qui en hérite et ajoute ce dont vous avez besoin.
delete demande confirmation, et exige --yes sans terminal. Les membres
restent dans l'organisation mais perdent ce que le groupe leur donnait, et les
accès accordés au groupe sont supprimés avec lui.
Modifier des groupes exige la permission iam:manage, et chaque modification
est vérifiée par rapport à ce que vous détenez : vous ne pouvez pas créer un
groupe avec une permission que vous n'avez pas, faire hériter un groupe d'un
autre qui détient plus que vous, ni ajouter quelqu'un à un tel groupe.
# Release managers: deploy anything, and read billing
isogrid iam groups create --name "Release managers" \
--inherits deployers --permissions billing:read
isogrid iam groups add-member release-managers lina@acme.example
isogrid iam groups get release-managers
Ce qui peut être accordé
isogrid iam permissions [--json]
Affiche chaque permission d'organisation, en signalant celles que seul le
propriétaire peut détenir ; puis, pour chaque type de ressource, ses capacités
et les préréglages qui les regroupent. C'est la référence des valeurs acceptées
par --permissions, --capabilities et --org-capabilities, et elle
correspond toujours à la plateforme à laquelle vous êtes connecté.
Scripter les accès
Chaque listing accepte --json, qui affiche la réponse de l'API sur la sortie
standard. Les messages vont sur la sortie d'erreur.
Une revue périodique de qui peut construire depuis quel dépôt :
for repo in $(isogrid repos list --json | jq -r '.[].full_name'); do
echo "== $repo"
isogrid repos grants "$repo"
done
Intégrer une équipe à partir d'un fichier d'adresses e-mail :
while read -r email; do
isogrid iam groups add-member deployers "$email"
done < new-team.txt
Identifiants délégués et commandes d'accès
Un identifiant de la CLI ne porte iam:manage et member:manage que si vous
les avez cochées lors de son approbation ; elles sont désactivées par défaut.
Sans iam:manage, les commandes iam groups qui modifient quelque chose sont
refusées, tandis que les listings fonctionnent toujours.
Accorder et retirer un accès sur un dépôt ne dépend pas de iam:manage : cela
dépend de la détention de repo:share sur ce dépôt, ce qui est toujours le cas
de son propriétaire.
Cas particuliers à connaître avant d'y être confronté
« is not a repository you have been given access to ». Ne rien détenir sur un dépôt revient au même que s'il n'existait pas : un dépôt privé ne peut donc pas être découvert en devinant son nom. Demandez l'accès à son propriétaire.
« You cannot grant capabilities you do not hold yourself ». Vous avez tenté de donner plus que ce que vous avez. L'erreur liste ce qui manque.
« These permissions belong to the owner alone ». Nommer des administrateurs et modifier les informations légales de l'organisation ne peuvent être placés dans un groupe, par personne.
« A group cannot inherit from itself, even indirectly ». L'héritage demandé formerait une boucle.
repos access est refusé sur un dépôt que vous administrez. Les
administrateurs accèdent aux dépôts qui leur sont ouverts, mais le choix de qui
d'autre peut entrer reste à la personne qui a connecté le compte, tant qu'elle
est membre.