Créer une clé d'API et brancher votre suite de tests
Créer une clé, l'utiliser depuis une CI, la remplacer sans coupure et la révoquer. Ce qu'elle atteint, et ce qu'elle n'atteindra jamais.
Une clé d'API permet à vos tests d'appeler l'API sans navigateur et sans session. Elle appartient à l'organisation, ce qui veut dire qu'elle survit au départ de la personne qui l'a créée : votre intégration continue ne casse pas parce que quelqu'un change d'entreprise.
Il faut être propriétaire ou administrateur de l'organisation pour en créer une.
Créer une clé
Ouvrez Paramètres → Clés d'API → Créer une clé et remplissez quatre champs.
- Un nom. C'est ce qui vous permettra de savoir laquelle révoquer dans six mois : « CI GitHub », « recette Camille ».
- Ce qu'elle peut faire. Dans les espaces : lire, ou lire et écrire. Sur l'organisation : rien, lire, ou lire et écrire les espaces de travail, pour un script de provisionnement. La lecture seule suffit à une suite de tests.
- Où. Cochez les espaces de travail que la clé atteint, au moins un, ou choisissez tous les espaces, ceux que vous créerez plus tard compris.
- Une durée. 30, 90, 180 ou 365 jours. Passé cette date, la clé cesse de marcher ; vous pouvez la remplacer avant.
Le secret s'affiche une seule fois, juste après la création. Nous n'en gardons qu'une empreinte : ni vous ni nous ne pouvons le retrouver ensuite. Copiez-le directement dans les secrets de votre CI.
L'utiliser
Un en-tête Authorization, et c'est tout :
curl -H "Authorization: Bearer fk_votre_cle" \
https://api.facteur.eu/v1/inboxes
La clé se passe uniquement en Bearer. Le schéma Basic n'existe pas, et les adresses
de l'API ne portent pas de préfixe de version.
Comptez 600 requêtes par minute et par clé. Au-delà, la réponse est
429 RATE_LIMITED, avec l'en-tête Retry-After.
Chaque route, sa permission et ses refus sont dans la référence d'API que l'API publie
elle-même : https://api.facteur.eu/openapi.json en anglais et
https://api.facteur.eu/openapi.fr.json en français. Le portail de documentation
pour développeurs n'est pas encore en ligne.
Choisir la portée
Une clé répond séparément à deux questions, ce qui vous permet de n'en donner que peu à la fois.
Ce qu'elle peut faire, en quatre portées et deux familles :
| Portée | Ce qu'elle ouvre |
|---|---|
ws:read |
Lire les messages des espaces visés |
ws:write |
Y créer et supprimer des inboxes |
org:read |
Lister les espaces de travail, et voir qui accède à chacun |
org:write |
En créer un, le renommer, le marquer, et ajouter ou retirer les collègues qui y accèdent |
Où elle peut le faire : tous vos espaces de travail, ou seulement ceux que vous nommez.
Écrire implique lire dans une famille, et rien ne traverse les familles.
org:write ne donne donc pas accès à votre courrier : un script qui provisionne des
espaces n'a pas à lire les messages qui s'y trouvent.
Si vous choisissez « tous les espaces », la portée inclut aussi ceux que vous créerez plus tard. Une liste figée à la création serait une clé qui cesse silencieusement de couvrir vos nouveaux espaces.
Une clé ne dépasse jamais la personne qui la crée. Les permissions org: et le choix
« tous les espaces » demandent le droit de gérer les espaces de travail, et chaque espace
coché doit être un espace que vous atteignez vous-même.
Ce qu'une clé n'atteint jamais
Quelle que soit sa portée.
| Ce que la clé tente | Le refus | Ce que vous faites |
|---|---|---|
| Créer, remplacer ou révoquer une clé | Aucune route | Passez par l'application. Une clé volée qui se remplace elle-même rendrait sa révocation sans effet |
| Toucher votre compte : mot de passe, second facteur, passkeys | Aucune route | Une clé fuitée ne prend pas le compte |
| Écrire alors qu'elle est en lecture seule | 403 API_ |
La réponse nomme la permission manquante (permission) |
Lister les espaces sans org:* |
403 API_ |
Créez une clé avec org:read |
| Faire entrer quelqu'un dans l'organisation, payer, écrire une destination d'alerte | Aucune route | Invitez depuis l'application. Voir Membres et sièges |
| Supprimer un espace de travail | 403 API_ |
Supprimez depuis l'application : aucune clé, quelle que soit sa permission, n'a ce droit |
| Lire le courrier d'un espace hors de sa portée | 404 |
La clé visant « recette » ne lit pas l'espace principal. C'est la même frontière que celle des membres, voir Espaces de travail |
Une session d'assistance ne peut pas créer de clé non plus, même avec votre accord explicite : la clé serait ensuite indiscernable d'une clé que vous auriez créée vous-même.
Remplacer sans coupure
Remplacer crée une clé neuve et laisse l'ancienne vivre 24 heures par défaut. La nouvelle reprend les permissions et les espaces de l'ancienne, dure 90 jours, et porte le nom de l'ancienne suivi de « (replaced » et de la date du jour. Déployez le nouveau secret, regardez passer un build vert, et l'ancienne s'éteint seule. Une rotation qui coupe est une rotation que personne ne fait.
Une clé déjà révoquée ne se remplace pas : cela la garderait vivante quelques heures de
plus, ce qui annulerait la révocation (409 API_KEY_REVOKED). Une clé échue se remplace.
Révoquer
Immédiat, sans fenêtre de cache : l'appel suivant échoue, y compris celui d'un pipeline en cours.
Avant de révoquer, lisez la colonne « Dernière utilisation » : elle vous dit si la clé sert encore.
Ensuite, le refus distingue trois cas, parce que les gestes qu'ils demandent sont différents :
| Code | Ce que ça veut dire | Ce que vous faites |
|---|---|---|
API_ |
Quelqu'un l'a retirée | Créez-en une nouvelle |
API_ |
Elle a atteint sa date | Remplacez-la |
API_ |
Cette clé n'a jamais existé | Vérifiez ce que votre CI envoie |
Ce sont trois réponses 401.
Supprimer un espace visé par une clé
Refusé, avec 409 WORKSPACE_HAS_ACTIVE_KEYS et le nom des clés qui bloquent.
Deux gestes possibles avant de réessayer : révoquer la clé, ou retirer cet espace de sa portée. Une clé déjà révoquée ou expirée ne bloque rien, puisqu'elle n'ouvre plus rien.
Provisionner un espace de travail par branche
C'est ce que org:write sert à faire :
# Ouvrir un espace pour la branche courante
curl -X POST https://api.facteur.eu/v1/workspaces \
-H "Authorization: Bearer fk_votre_cle" \
-H "content-type: application/json" \
-d '{"name": "recette-PR-1234"}'
Deux choses à savoir :
- L'espace créé n'entre pas dans la portée de la clé. Une clé ne s'élargit pas elle-même. Si vos tests doivent lire le courrier de ce nouvel espace, visez « tous les espaces » à la création de la clé.
- Le plafond du plan s'applique. Un plan qui ne vend pas d'espace de plus répond
402 WORKSPACE_LIMIT_REACHED.
Gérer qui accède à un espace de travail
Une clé portant org:write peut lister les membres d'un espace de travail, en ajouter
un et en retirer un.
Cela ne fait entrer personne dans votre organisation. La personne que vous nommez
doit déjà en être membre ; toute autre est refusée avec NOT_AN_ORGANIZATION_MEMBER. Ce
qui change, c'est quels espaces un collègue déjà présent peut ouvrir.
Inviter reste l'acte qu'une clé n'accomplit jamais.
Limites connues
- Pas de restriction d'adresse IP. Une clé marche depuis n'importe quelle adresse : il n'existe pas de liste d'adresses autorisées, pour les runners qui sortent par une adresse fixe.