Comptes de service et clés
Comptes de service pour la CI et l’automatisation, leurs clés, politiques, délégations et audit.
Opérations de ce groupe, avec leur règle d’accès, leur règle de nouvelle tentative, leurs paramètres et leurs réponses. Chaque requête porte une clé : Authorization: Bearer <clé> (voir « Authentification »).
Opérations
Lister les comptes de service
GET HEAD /api/v1/service-accounts
Accès: Autorisation d’administration des services service-account.read · Nouvelle tentative: Peut être répétée sans risque (lecture)
Liste les comptes de service que l’appelant peut voir, triés par ID, 50 par page, chacun avec nom, indicateur d’activation, revision, bindings de politique et date de création ; poursuivez avec after défini sur next. La clé d’amorçage les voit tous, un délégué seulement les cibles pour lesquelles sa délégation inclut service-account.read ; sinon la liste est vide plutôt que refusée.
Paramètres
| Nom | Emplacement | Type | Obligatoire | Règles |
|---|---|---|---|---|
after | requête | string (uuid) | non | — |
Réponse 200
| Champ | Type | Obligatoire | Règles |
|---|---|---|---|
items | tableau de object | oui | jusqu’à 50 éléments |
items[].id | string (uuid) | oui | — |
items[].name | string | oui | correspond à ^[a-zA-Z0-9_.-]{3,64}$ |
items[].enabled | boolean | oui | — |
items[].revision | integer | oui | 1–2147483647 |
items[].bindings | tableau de object | oui | jusqu’à 64 éléments |
items[].bindings[].resource | object | oui | — |
items[].bindings[].actions | tableau de string | oui | 1–24 éléments; aucun élément répété; chaque élément : une valeur parmi repository.read, storage.read, storage.manage, diagnostics.read, artifact.read, artifact.list, artifact.delete, artifact.promote, content.read, upload.create, upload.read, upload.write, upload.complete, upload.cancel, job.read, package.read, package.publish, asset.read, asset.write, asset.restore, annotation.read, annotation.write, reference.write, audit.read |
items[].createdAt | string (date-time) | oui | — |
next | string (uuid) | oui | peut être null |
Réponses: 200, 400, 401, 403, 404, 409, 422, 503, 507
Exemple
curl -X GET "$ARKVORY_URL/api/v1/service-accounts" \
-H "Authorization: Bearer $ARKVORY_TOKEN"Créer un compte de service
POST /api/v1/service-accounts
Accès: Clé d’amorçage (clé de récupération de l’installation) · Nouvelle tentative: Ne pas répéter automatiquement
Crée une identité machine pour le CI ou une application avec name (3–64 lettres, chiffres ou _.-) et les bindings de sa politique : pour chaque dépôt, les actions exactes que ses clés peuvent utiliser (comme upload.create ou content.read). Répond 201 avec le compte ; émettez ensuite une clé avec issueServiceKey. Un nom déjà pris donne 409 already_exists.
Corps de la requête (application/json)
| Champ | Type | Obligatoire | Règles |
|---|---|---|---|
name | string | oui | correspond à ^[a-zA-Z0-9_.-]{3,64}$ |
bindings | tableau de object | oui | jusqu’à 64 éléments |
bindings[].resource | object | oui | — |
bindings[].resource.kind | string | oui | une valeur parmi repository |
bindings[].resource.id | string | oui | correspond à ^[a-z0-9][a-z0-9_-]{0,63}$ |
bindings[].actions | tableau de string | oui | 1–24 éléments; aucun élément répété; chaque élément : une valeur parmi repository.read, storage.read, storage.manage, diagnostics.read, artifact.read, artifact.list, artifact.delete, artifact.promote, content.read, upload.create, upload.read, upload.write, upload.complete, upload.cancel, job.read, package.read, package.publish, asset.read, asset.write, asset.restore, annotation.read, annotation.write, reference.write, audit.read |
Réponse 201
| Champ | Type | Obligatoire | Règles |
|---|---|---|---|
id | string (uuid) | oui | — |
name | string | oui | correspond à ^[a-zA-Z0-9_.-]{3,64}$ |
enabled | boolean | oui | — |
revision | integer | oui | 1–2147483647 |
bindings | tableau de object | oui | jusqu’à 64 éléments |
bindings[].resource | object | oui | — |
bindings[].resource.kind | string | oui | une valeur parmi repository |
bindings[].resource.id | string | oui | correspond à ^[a-z0-9][a-z0-9_-]{0,63}$ |
bindings[].actions | tableau de string | oui | 1–24 éléments; aucun élément répété; chaque élément : une valeur parmi repository.read, storage.read, storage.manage, diagnostics.read, artifact.read, artifact.list, artifact.delete, artifact.promote, content.read, upload.create, upload.read, upload.write, upload.complete, upload.cancel, job.read, package.read, package.publish, asset.read, asset.write, asset.restore, annotation.read, annotation.write, reference.write, audit.read |
createdAt | string (date-time) | oui | — |
Réponses: 201, 400, 401, 403, 404, 405, 409, 413, 415, 422, 503, 507
Exemple
curl -X POST "$ARKVORY_URL/api/v1/service-accounts" \
-H "Authorization: Bearer $ARKVORY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"<name>","bindings":[]}'Obtenir un compte de service
GET HEAD /api/v1/service-accounts/{id}
Accès: Autorisation d’administration des services service-account.read · Nouvelle tentative: Peut être répétée sans risque (lecture)
Renvoie le nom du compte, son indicateur d’activation, sa revision, les liaisons de sa politique et sa date de création. Pour un délégué, un compte qui ne lui est pas attribué répond 404, et une action manquante sur un compte attribué 403.
Paramètres
| Nom | Emplacement | Type | Obligatoire | Règles |
|---|---|---|---|---|
id | chemin | string (uuid) | oui | — |
Réponse 200
| Champ | Type | Obligatoire | Règles |
|---|---|---|---|
id | string (uuid) | oui | — |
name | string | oui | correspond à ^[a-zA-Z0-9_.-]{3,64}$ |
enabled | boolean | oui | — |
revision | integer | oui | 1–2147483647 |
bindings | tableau de object | oui | jusqu’à 64 éléments |
bindings[].resource | object | oui | — |
bindings[].resource.kind | string | oui | une valeur parmi repository |
bindings[].resource.id | string | oui | correspond à ^[a-z0-9][a-z0-9_-]{0,63}$ |
bindings[].actions | tableau de string | oui | 1–24 éléments; aucun élément répété; chaque élément : une valeur parmi repository.read, storage.read, storage.manage, diagnostics.read, artifact.read, artifact.list, artifact.delete, artifact.promote, content.read, upload.create, upload.read, upload.write, upload.complete, upload.cancel, job.read, package.read, package.publish, asset.read, asset.write, asset.restore, annotation.read, annotation.write, reference.write, audit.read |
createdAt | string (date-time) | oui | — |
Réponses: 200, 400, 401, 403, 404, 409, 422, 503, 507
Exemple
curl -X GET "$ARKVORY_URL/api/v1/service-accounts/$ID" \
-H "Authorization: Bearer $ARKVORY_TOKEN"Activer ou désactiver un compte de service
PATCH /api/v1/service-accounts/{id}
Accès: Autorisation d’administration des services service-account.manage · Nouvelle tentative: Répéter uniquement avec la révision attendue (compare-and-swap)
Définit enabled ; expectedRevision doit être la révision actuelle, sinon 409 revision_mismatch. Seul cet indicateur change ici (le nom ne peut pas changer). Désactiver bloque toutes les clés du compte dès la prochaine requête ; activer rétablit les clés qui ne sont ni expirées ni révoquées. Un délégué ne peut le faire que si toute la politique actuelle reste dans son plafond.
Paramètres
| Nom | Emplacement | Type | Obligatoire | Règles |
|---|---|---|---|---|
id | chemin | string (uuid) | oui | — |
Corps de la requête (application/json)
| Champ | Type | Obligatoire | Règles |
|---|---|---|---|
expectedRevision | integer | oui | 1–2147483646 |
enabled | boolean | oui | — |
Réponse 200
| Champ | Type | Obligatoire | Règles |
|---|---|---|---|
id | string (uuid) | oui | — |
name | string | oui | correspond à ^[a-zA-Z0-9_.-]{3,64}$ |
enabled | boolean | oui | — |
revision | integer | oui | 1–2147483647 |
bindings | tableau de object | oui | jusqu’à 64 éléments |
bindings[].resource | object | oui | — |
bindings[].resource.kind | string | oui | une valeur parmi repository |
bindings[].resource.id | string | oui | correspond à ^[a-z0-9][a-z0-9_-]{0,63}$ |
bindings[].actions | tableau de string | oui | 1–24 éléments; aucun élément répété; chaque élément : une valeur parmi repository.read, storage.read, storage.manage, diagnostics.read, artifact.read, artifact.list, artifact.delete, artifact.promote, content.read, upload.create, upload.read, upload.write, upload.complete, upload.cancel, job.read, package.read, package.publish, asset.read, asset.write, asset.restore, annotation.read, annotation.write, reference.write, audit.read |
createdAt | string (date-time) | oui | — |
Réponses: 200, 400, 401, 403, 404, 405, 409, 413, 415, 422, 503, 507
Exemple
curl -X PATCH "$ARKVORY_URL/api/v1/service-accounts/$ID" \
-H "Authorization: Bearer $ARKVORY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"expectedRevision":1,"enabled":false}'Obtenir la politique d’un compte de service
GET HEAD /api/v1/service-accounts/{id}/policy
Accès: Autorisation d’administration des services policy.read · Nouvelle tentative: Peut être répétée sans risque (lecture)
Renvoie le compte avec les bindings et la revision de sa politique, comme getServiceAccount, pour un appelant qui détient policy.read. Les autorisations effectives d’une clé sont l’intersection de cette politique et des liaisons propres à la clé, par dépôt et par action.
Paramètres
| Nom | Emplacement | Type | Obligatoire | Règles |
|---|---|---|---|---|
id | chemin | string (uuid) | oui | — |
Réponse 200
| Champ | Type | Obligatoire | Règles |
|---|---|---|---|
id | string (uuid) | oui | — |
name | string | oui | correspond à ^[a-zA-Z0-9_.-]{3,64}$ |
enabled | boolean | oui | — |
revision | integer | oui | 1–2147483647 |
bindings | tableau de object | oui | jusqu’à 64 éléments |
bindings[].resource | object | oui | — |
bindings[].resource.kind | string | oui | une valeur parmi repository |
bindings[].resource.id | string | oui | correspond à ^[a-z0-9][a-z0-9_-]{0,63}$ |
bindings[].actions | tableau de string | oui | 1–24 éléments; aucun élément répété; chaque élément : une valeur parmi repository.read, storage.read, storage.manage, diagnostics.read, artifact.read, artifact.list, artifact.delete, artifact.promote, content.read, upload.create, upload.read, upload.write, upload.complete, upload.cancel, job.read, package.read, package.publish, asset.read, asset.write, asset.restore, annotation.read, annotation.write, reference.write, audit.read |
createdAt | string (date-time) | oui | — |
Réponses: 200, 400, 401, 403, 404, 409, 422, 503, 507
Exemple
curl -X GET "$ARKVORY_URL/api/v1/service-accounts/$ID/policy" \
-H "Authorization: Bearer $ARKVORY_TOKEN"Remplacer la politique d’un compte de service
PUT /api/v1/service-accounts/{id}/policy
Accès: Autorisation d’administration des services policy.manage · Nouvelle tentative: Répéter uniquement avec la révision attendue (compare-and-swap)
Remplace les bindings du compte (64 au plus, chacune étant un dépôt avec ses actions exactes) ; expectedRevision doit être la révision actuelle, sinon 409 revision_mismatch. Chaque clé suit la modification dès sa prochaine requête : un rétrécissement prend effet aussitôt, un élargissement ne dépasse jamais les liaisons propres à la clé. Un délégué doit rester dans son plafond, tant avec la politique actuelle qu’avec la nouvelle.
Paramètres
| Nom | Emplacement | Type | Obligatoire | Règles |
|---|---|---|---|---|
id | chemin | string (uuid) | oui | — |
Corps de la requête (application/json)
| Champ | Type | Obligatoire | Règles |
|---|---|---|---|
expectedRevision | integer | oui | 1–2147483646 |
bindings | tableau de object | oui | jusqu’à 64 éléments |
bindings[].resource | object | oui | — |
bindings[].resource.kind | string | oui | une valeur parmi repository |
bindings[].resource.id | string | oui | correspond à ^[a-z0-9][a-z0-9_-]{0,63}$ |
bindings[].actions | tableau de string | oui | 1–24 éléments; aucun élément répété; chaque élément : une valeur parmi repository.read, storage.read, storage.manage, diagnostics.read, artifact.read, artifact.list, artifact.delete, artifact.promote, content.read, upload.create, upload.read, upload.write, upload.complete, upload.cancel, job.read, package.read, package.publish, asset.read, asset.write, asset.restore, annotation.read, annotation.write, reference.write, audit.read |
Réponse 200
| Champ | Type | Obligatoire | Règles |
|---|---|---|---|
id | string (uuid) | oui | — |
name | string | oui | correspond à ^[a-zA-Z0-9_.-]{3,64}$ |
enabled | boolean | oui | — |
revision | integer | oui | 1–2147483647 |
bindings | tableau de object | oui | jusqu’à 64 éléments |
bindings[].resource | object | oui | — |
bindings[].resource.kind | string | oui | une valeur parmi repository |
bindings[].resource.id | string | oui | correspond à ^[a-z0-9][a-z0-9_-]{0,63}$ |
bindings[].actions | tableau de string | oui | 1–24 éléments; aucun élément répété; chaque élément : une valeur parmi repository.read, storage.read, storage.manage, diagnostics.read, artifact.read, artifact.list, artifact.delete, artifact.promote, content.read, upload.create, upload.read, upload.write, upload.complete, upload.cancel, job.read, package.read, package.publish, asset.read, asset.write, asset.restore, annotation.read, annotation.write, reference.write, audit.read |
createdAt | string (date-time) | oui | — |
Réponses: 200, 400, 401, 403, 404, 405, 409, 413, 415, 422, 503, 507
Exemple
curl -X PUT "$ARKVORY_URL/api/v1/service-accounts/$ID/policy" \
-H "Authorization: Bearer $ARKVORY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"expectedRevision":1,"bindings":[]}'Lister les clés d’un compte de service
GET HEAD /api/v1/service-accounts/{id}/keys
Accès: Autorisation d’administration des services credential.read · Nouvelle tentative: Peut être répétée sans risque (lecture)
Liste les métadonnées des clés du compte triées par ID, 50 par page : nom, state (pending, active, revoked), liaisons, création, expiration, échéance d’activation et clé dont elle est issue par renouvellement ; jamais les secrets ni les empreintes. Poursuivez avec after défini sur next. L’expiration ne modifie pas state : comparez donc expiresAt à l’heure actuelle.
Paramètres
| Nom | Emplacement | Type | Obligatoire | Règles |
|---|---|---|---|---|
id | chemin | string (uuid) | oui | — |
after | requête | string (uuid) | non | — |
Réponse 200
| Champ | Type | Obligatoire | Règles |
|---|---|---|---|
items | tableau de object | oui | jusqu’à 50 éléments |
items[].id | string (uuid) | oui | — |
items[].accountId | string (uuid) | oui | — |
items[].name | string | oui | correspond à ^[a-zA-Z0-9_.-]{3,64}$ |
items[].state | string | oui | une valeur parmi pending, active, revoked |
items[].bindings | tableau de object | oui | jusqu’à 64 éléments |
items[].bindings[].resource | object | oui | — |
items[].bindings[].actions | tableau de string | oui | 1–24 éléments; aucun élément répété; chaque élément : une valeur parmi repository.read, storage.read, storage.manage, diagnostics.read, artifact.read, artifact.list, artifact.delete, artifact.promote, content.read, upload.create, upload.read, upload.write, upload.complete, upload.cancel, job.read, package.read, package.publish, asset.read, asset.write, asset.restore, annotation.read, annotation.write, reference.write, audit.read |
items[].createdAt | string (date-time) | oui | — |
items[].expiresAt | string (date-time) | oui | — |
items[].activationExpiresAt | string (date-time) | oui | — |
items[].rotatedFrom | string (uuid) | oui | peut être null |
next | string (uuid) | oui | peut être null |
Réponses: 200, 400, 401, 403, 404, 409, 422, 503, 507
Exemple
curl -X GET "$ARKVORY_URL/api/v1/service-accounts/$ID/keys" \
-H "Authorization: Bearer $ARKVORY_TOKEN"Émettre une clé pour un compte de service
POST /api/v1/service-accounts/{id}/keys
Accès: Autorisation d’administration des services credential.manage · Nouvelle tentative: Peut être répétée sans risque avec la même Idempotency-Key
Émet une clé en attente avec name, bindings (effectives seulement là où la politique du compte les autorise aussi) et expiresAt facultatif (UTC ; 90 jours par défaut, 365 au plus et, pour un délégué, jamais au-delà de sa propre clé). La première réponse est 201 avec key et le secret, montré une seule fois ; une répétition avec la même Idempotency-Key et le même corps donne 200 avec les métadonnées seules, un corps différent 409. Le détenteur doit appeler activateServiceKey avec le secret dans les 15 minutes ; si le secret est perdu, révoquez la clé et émettez-en une nouvelle sous une nouvelle Idempotency-Key.
Paramètres
| Nom | Emplacement | Type | Obligatoire | Règles |
|---|---|---|---|---|
id | chemin | string (uuid) | oui | — |
Idempotency-Key | en-tête | string | oui | jusqu’à 128 caractères |
Corps de la requête (application/json)
| Champ | Type | Obligatoire | Règles |
|---|---|---|---|
name | string | oui | correspond à ^[a-zA-Z0-9_.-]{3,64}$ |
bindings | tableau de object | oui | jusqu’à 64 éléments |
bindings[].resource | object | oui | — |
bindings[].resource.kind | string | oui | une valeur parmi repository |
bindings[].resource.id | string | oui | correspond à ^[a-z0-9][a-z0-9_-]{0,63}$ |
bindings[].actions | tableau de string | oui | 1–24 éléments; aucun élément répété; chaque élément : une valeur parmi repository.read, storage.read, storage.manage, diagnostics.read, artifact.read, artifact.list, artifact.delete, artifact.promote, content.read, upload.create, upload.read, upload.write, upload.complete, upload.cancel, job.read, package.read, package.publish, asset.read, asset.write, asset.restore, annotation.read, annotation.write, reference.write, audit.read |
expiresAt | string (date-time) | non | — |
Réponse 200
| Champ | Type | Obligatoire | Règles |
|---|---|---|---|
key | object | oui | — |
key.id | string (uuid) | oui | — |
key.accountId | string (uuid) | oui | — |
key.name | string | oui | correspond à ^[a-zA-Z0-9_.-]{3,64}$ |
key.state | string | oui | une valeur parmi pending, active, revoked |
key.bindings | tableau de object | oui | jusqu’à 64 éléments |
key.bindings[].resource | object | oui | — |
key.bindings[].actions | tableau de string | oui | 1–24 éléments; aucun élément répété; chaque élément : une valeur parmi repository.read, storage.read, storage.manage, diagnostics.read, artifact.read, artifact.list, artifact.delete, artifact.promote, content.read, upload.create, upload.read, upload.write, upload.complete, upload.cancel, job.read, package.read, package.publish, asset.read, asset.write, asset.restore, annotation.read, annotation.write, reference.write, audit.read |
key.createdAt | string (date-time) | oui | — |
key.expiresAt | string (date-time) | oui | — |
key.activationExpiresAt | string (date-time) | oui | — |
key.rotatedFrom | string (uuid) | oui | peut être null |
secret | string | non | — |
Réponses: 200, 201, 400, 401, 403, 404, 405, 409, 413, 415, 422, 503, 507
Exemple
curl -X POST "$ARKVORY_URL/api/v1/service-accounts/$ID/keys" \
-H "Authorization: Bearer $ARKVORY_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"name":"<name>","bindings":[]}'Lire l’audit d’un compte de service
GET HEAD /api/v1/service-accounts/{id}/audit
Accès: Autorisation d’administration des services service-audit.read · Nouvelle tentative: Peut être répétée sans risque (lecture)
Renvoie, du plus ancien au plus récent, jusqu’à 100 événements du compte après la séquence after (0 par défaut) : modifications du compte, de la politique et des clés, comme l’émission, le renouvellement, l’activation et la révocation, chacune avec l’acteur, l’action, la clé et l’heure. Pour lire la suite, passez le dernier sequence comme after ; il n’y a pas de champ next. Seuls les 100 000 événements les plus récents du serveur sont conservés.
Paramètres
| Nom | Emplacement | Type | Obligatoire | Règles |
|---|---|---|---|---|
id | chemin | string (uuid) | oui | — |
after | requête | string | non | un nombre entier en chiffres décimaux, transmis sous forme de chaîne |
Réponse 200
| Champ | Type | Obligatoire | Règles |
|---|---|---|---|
items | tableau de object | oui | jusqu’à 100 éléments |
items[].sequence | string | oui | — |
items[].actor | string | oui | — |
items[].action | string | oui | — |
items[].accountId | string (uuid) | oui | — |
items[].keyId | string (uuid) | oui | peut être null |
items[].occurredAt | string (date-time) | oui | — |
Réponses: 200, 400, 401, 403, 404, 409, 422, 503, 507
Exemple
curl -X GET "$ARKVORY_URL/api/v1/service-accounts/$ID/audit" \
-H "Authorization: Bearer $ARKVORY_TOKEN"Obtenir une clé
GET HEAD /api/v1/api-keys/{id}
Accès: Autorisation d’administration des services credential.read · Nouvelle tentative: Peut être répétée sans risque (lecture)
Renvoie les métadonnées d’une clé gérée : son compte, son nom, son état, ses liaisons, sa création, son expiration, son échéance d’activation et la clé dont elle est issue par renouvellement ; jamais le secret ni son empreinte.
Paramètres
| Nom | Emplacement | Type | Obligatoire | Règles |
|---|---|---|---|---|
id | chemin | string (uuid) | oui | — |
Réponse 200
| Champ | Type | Obligatoire | Règles |
|---|---|---|---|
id | string (uuid) | oui | — |
accountId | string (uuid) | oui | — |
name | string | oui | correspond à ^[a-zA-Z0-9_.-]{3,64}$ |
state | string | oui | une valeur parmi pending, active, revoked |
bindings | tableau de object | oui | jusqu’à 64 éléments |
bindings[].resource | object | oui | — |
bindings[].resource.kind | string | oui | une valeur parmi repository |
bindings[].resource.id | string | oui | correspond à ^[a-z0-9][a-z0-9_-]{0,63}$ |
bindings[].actions | tableau de string | oui | 1–24 éléments; aucun élément répété; chaque élément : une valeur parmi repository.read, storage.read, storage.manage, diagnostics.read, artifact.read, artifact.list, artifact.delete, artifact.promote, content.read, upload.create, upload.read, upload.write, upload.complete, upload.cancel, job.read, package.read, package.publish, asset.read, asset.write, asset.restore, annotation.read, annotation.write, reference.write, audit.read |
createdAt | string (date-time) | oui | — |
expiresAt | string (date-time) | oui | — |
activationExpiresAt | string (date-time) | oui | — |
rotatedFrom | string (uuid) | oui | peut être null |
Réponses: 200, 400, 401, 403, 404, 409, 422, 503, 507
Exemple
curl -X GET "$ARKVORY_URL/api/v1/api-keys/$ID" \
-H "Authorization: Bearer $ARKVORY_TOKEN"Renouveler une clé
POST /api/v1/api-keys/{id}/rotate
Accès: Autorisation d’administration des services credential.manage · Nouvelle tentative: Peut être répétée sans risque avec la même Idempotency-Key
Émet un successeur en attente de la clé id pour le même compte, avec des bindings identiques ou plus étroites, en répondant comme issueServiceKey : 201 avec le secret à usage unique, 200 avec les métadonnées seules lors d’une répétition avec la même Idempotency-Key. Une fois le successeur activé, l’ancienne clé reste valable 24 heures au plus ; révoquez-la explicitement lorsque la nouvelle fonctionne, mais seulement après la fin des tâches qu’elle a lancées. Les délégations détenues par une clé d’opérateur ne sont pas copiées vers son successeur.
Paramètres
| Nom | Emplacement | Type | Obligatoire | Règles |
|---|---|---|---|---|
id | chemin | string (uuid) | oui | — |
Idempotency-Key | en-tête | string | oui | jusqu’à 128 caractères |
Corps de la requête (application/json)
| Champ | Type | Obligatoire | Règles |
|---|---|---|---|
name | string | oui | correspond à ^[a-zA-Z0-9_.-]{3,64}$ |
bindings | tableau de object | oui | jusqu’à 64 éléments |
bindings[].resource | object | oui | — |
bindings[].resource.kind | string | oui | une valeur parmi repository |
bindings[].resource.id | string | oui | correspond à ^[a-z0-9][a-z0-9_-]{0,63}$ |
bindings[].actions | tableau de string | oui | 1–24 éléments; aucun élément répété; chaque élément : une valeur parmi repository.read, storage.read, storage.manage, diagnostics.read, artifact.read, artifact.list, artifact.delete, artifact.promote, content.read, upload.create, upload.read, upload.write, upload.complete, upload.cancel, job.read, package.read, package.publish, asset.read, asset.write, asset.restore, annotation.read, annotation.write, reference.write, audit.read |
expiresAt | string (date-time) | non | — |
Réponse 200
| Champ | Type | Obligatoire | Règles |
|---|---|---|---|
key | object | oui | — |
key.id | string (uuid) | oui | — |
key.accountId | string (uuid) | oui | — |
key.name | string | oui | correspond à ^[a-zA-Z0-9_.-]{3,64}$ |
key.state | string | oui | une valeur parmi pending, active, revoked |
key.bindings | tableau de object | oui | jusqu’à 64 éléments |
key.bindings[].resource | object | oui | — |
key.bindings[].actions | tableau de string | oui | 1–24 éléments; aucun élément répété; chaque élément : une valeur parmi repository.read, storage.read, storage.manage, diagnostics.read, artifact.read, artifact.list, artifact.delete, artifact.promote, content.read, upload.create, upload.read, upload.write, upload.complete, upload.cancel, job.read, package.read, package.publish, asset.read, asset.write, asset.restore, annotation.read, annotation.write, reference.write, audit.read |
key.createdAt | string (date-time) | oui | — |
key.expiresAt | string (date-time) | oui | — |
key.activationExpiresAt | string (date-time) | oui | — |
key.rotatedFrom | string (uuid) | oui | peut être null |
secret | string | non | — |
Réponses: 200, 201, 400, 401, 403, 404, 405, 409, 413, 415, 422, 503, 507
Exemple
curl -X POST "$ARKVORY_URL/api/v1/api-keys/$ID/rotate" \
-H "Authorization: Bearer $ARKVORY_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"name":"<name>","bindings":[]}'Révoquer une clé
POST /api/v1/api-keys/{id}/revoke
Accès: Autorisation d’administration des services credential.manage · Nouvelle tentative: Peut être répétée sans risque : la même requête a le même effet
Révoque définitivement la clé : sa prochaine requête échoue, tandis qu’un téléchargement déjà en cours n’est pas interrompu. Répéter l’opération réussit avec 204. Les clés qu’une clé d’opérateur révoquée a émises et qui étaient déjà activées restent valables ; révoquez-les séparément.
Paramètres
| Nom | Emplacement | Type | Obligatoire | Règles |
|---|---|---|---|---|
id | chemin | string (uuid) | oui | — |
Réponses: 204, 400, 401, 403, 404, 405, 409, 422, 503, 507
Exemple
curl -X POST "$ARKVORY_URL/api/v1/api-keys/$ID/revoke" \
-H "Authorization: Bearer $ARKVORY_TOKEN"Activer une clé
POST /api/v1/auth/activate-key
Accès: La clé émise, avant ou après activation · Nouvelle tentative: Peut être répétée sans risque : la même requête a le même effet
Prouve que le détenteur a reçu une clé nouvellement émise : appelez l’opération en présentant cette clé dans Authorization: Bearer dans les 15 minutes suivant l’émission, et la clé devient active (204). La répéter est sans risque et ne prolonge pas l’expiration. Activer une clé renouvelée réduit à 24 heures au plus la durée de vie restante de la clé qu’elle remplace.
Réponses: 204, 400, 401, 403, 404, 405, 409, 422, 503, 507
Exemple
curl -X POST "$ARKVORY_URL/api/v1/auth/activate-key" \
-H "Authorization: Bearer $ARKVORY_TOKEN"Lister les délégations d’une clé
GET HEAD /api/v1/api-keys/{id}/delegations
Accès: Clé d’amorçage, ou la clé elle-même · Nouvelle tentative: Peut être répétée sans risque (lecture)
Renvoie les délégations détenues par la clé d’opérateur id, jusqu’à 64 y compris les délégations désactivées : pour chaque compte cible, sa revision, si elle est enabled, les actions d’administration (comme credential.manage) et le ceiling des liaisons de dépôts qu’elle peut transmettre. Un délégué lit ici les siennes (l’ID de sa clé est credentialId dans getOwnPermissions) ; la liste d’une autre clé donne 403.
Paramètres
| Nom | Emplacement | Type | Obligatoire | Règles |
|---|---|---|---|---|
id | chemin | string (uuid) | oui | — |
Réponse 200
| Champ | Type | Obligatoire | Règles |
|---|---|---|---|
items | tableau de object | oui | jusqu’à 64 éléments |
items[].keyId | string (uuid) | oui | — |
items[].targetAccountId | string (uuid) | oui | — |
items[].enabled | boolean | oui | — |
items[].revision | integer | oui | 1–2147483647 |
items[].actions | tableau de string | oui | jusqu’à 7 éléments; aucun élément répété; chaque élément : une valeur parmi service-account.read, service-account.manage, policy.read, policy.manage, credential.read, credential.manage, service-audit.read |
items[].ceiling | tableau de object | oui | jusqu’à 16 éléments |
items[].ceiling[].resource | object | oui | — |
items[].ceiling[].actions | tableau de string | oui | 1–24 éléments; aucun élément répété; chaque élément : une valeur parmi repository.read, storage.read, storage.manage, diagnostics.read, artifact.read, artifact.list, artifact.delete, artifact.promote, content.read, upload.create, upload.read, upload.write, upload.complete, upload.cancel, job.read, package.read, package.publish, asset.read, asset.write, asset.restore, annotation.read, annotation.write, reference.write, audit.read |
Réponses: 200, 400, 401, 403, 404, 409, 422, 503, 507
Exemple
curl -X GET "$ARKVORY_URL/api/v1/api-keys/$ID/delegations" \
-H "Authorization: Bearer $ARKVORY_TOKEN"Déléguer l’administration d’un compte de service
PUT /api/v1/api-keys/{id}/delegations/{accountId}
Accès: Clé d’amorçage (clé de récupération de l’installation) · Nouvelle tentative: Répéter uniquement avec la révision attendue (compare-and-swap)
Permet à la clé id d’administrer le compte de service accountId avec les actions données (service-account.read, service-account.manage, policy.read, policy.manage, credential.read, credential.manage, service-audit.read) dans les limites de ceiling, 16 liaisons de dépôts au plus qu’elle peut transmettre ; manage n’implique pas read. expectedRevision vaut 0 pour créer et la révision actuelle de l’enregistrement pour le modifier ou le réactiver, sinon 409. La clé doit être active et émise par la clé d’amorçage, et un compte ne peut pas à la fois détenir des délégations et être la cible de l’une d’elles : la délégation n’est donc jamais chaînée.
Paramètres
| Nom | Emplacement | Type | Obligatoire | Règles |
|---|---|---|---|---|
id | chemin | string (uuid) | oui | — |
accountId | chemin | string (uuid) | oui | — |
Corps de la requête (application/json)
| Champ | Type | Obligatoire | Règles |
|---|---|---|---|
expectedRevision | integer | oui | 0–2147483646 |
actions | tableau de string | oui | 1–7 éléments; aucun élément répété; chaque élément : une valeur parmi service-account.read, service-account.manage, policy.read, policy.manage, credential.read, credential.manage, service-audit.read |
ceiling | tableau de object | oui | jusqu’à 16 éléments |
ceiling[].resource | object | oui | — |
ceiling[].resource.kind | string | oui | une valeur parmi repository |
ceiling[].resource.id | string | oui | correspond à ^[a-z0-9][a-z0-9_-]{0,63}$ |
ceiling[].actions | tableau de string | oui | 1–24 éléments; aucun élément répété; chaque élément : une valeur parmi repository.read, storage.read, storage.manage, diagnostics.read, artifact.read, artifact.list, artifact.delete, artifact.promote, content.read, upload.create, upload.read, upload.write, upload.complete, upload.cancel, job.read, package.read, package.publish, asset.read, asset.write, asset.restore, annotation.read, annotation.write, reference.write, audit.read |
Réponse 200
| Champ | Type | Obligatoire | Règles |
|---|---|---|---|
keyId | string (uuid) | oui | — |
targetAccountId | string (uuid) | oui | — |
enabled | boolean | oui | — |
revision | integer | oui | 1–2147483647 |
actions | tableau de string | oui | jusqu’à 7 éléments; aucun élément répété; chaque élément : une valeur parmi service-account.read, service-account.manage, policy.read, policy.manage, credential.read, credential.manage, service-audit.read |
ceiling | tableau de object | oui | jusqu’à 16 éléments |
ceiling[].resource | object | oui | — |
ceiling[].resource.kind | string | oui | une valeur parmi repository |
ceiling[].resource.id | string | oui | correspond à ^[a-z0-9][a-z0-9_-]{0,63}$ |
ceiling[].actions | tableau de string | oui | 1–24 éléments; aucun élément répété; chaque élément : une valeur parmi repository.read, storage.read, storage.manage, diagnostics.read, artifact.read, artifact.list, artifact.delete, artifact.promote, content.read, upload.create, upload.read, upload.write, upload.complete, upload.cancel, job.read, package.read, package.publish, asset.read, asset.write, asset.restore, annotation.read, annotation.write, reference.write, audit.read |
Réponses: 200, 400, 401, 403, 404, 405, 409, 413, 415, 422, 503, 507
Exemple
curl -X PUT "$ARKVORY_URL/api/v1/api-keys/$ID/delegations/$ACCOUNTID" \
-H "Authorization: Bearer $ARKVORY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"expectedRevision":0,"actions":["service-account.read"],"ceiling":[]}'Retirer une délégation
DELETE /api/v1/api-keys/{id}/delegations/{accountId}
Accès: Clé d’amorçage (clé de récupération de l’installation) · Nouvelle tentative: Répéter uniquement avec la révision attendue (compare-and-swap)
Désactive la délégation de la clé id sur accountId ; le corps JSON porte expectedRevision, la révision actuelle de l’enregistrement. L’enregistrement subsiste comme entrée désactivée, sans actions et avec une révision plus élevée, renvoyée avec 200 ; après une réponse perdue, lisez-le avec listServiceDelegations plutôt que de répéter l’appel, car l’ancienne révision donne 409. Les clés que le délégué a déjà émises et activées continuent de fonctionner : révoquez-les ou désactivez le compte séparément.
Paramètres
| Nom | Emplacement | Type | Obligatoire | Règles |
|---|---|---|---|---|
id | chemin | string (uuid) | oui | — |
accountId | chemin | string (uuid) | oui | — |
Corps de la requête (application/json)
| Champ | Type | Obligatoire | Règles |
|---|---|---|---|
expectedRevision | integer | oui | 1–2147483646 |
Réponse 200
| Champ | Type | Obligatoire | Règles |
|---|---|---|---|
keyId | string (uuid) | oui | — |
targetAccountId | string (uuid) | oui | — |
enabled | boolean | oui | — |
revision | integer | oui | 1–2147483647 |
actions | tableau de string | oui | jusqu’à 7 éléments; aucun élément répété; chaque élément : une valeur parmi service-account.read, service-account.manage, policy.read, policy.manage, credential.read, credential.manage, service-audit.read |
ceiling | tableau de object | oui | jusqu’à 16 éléments |
ceiling[].resource | object | oui | — |
ceiling[].resource.kind | string | oui | une valeur parmi repository |
ceiling[].resource.id | string | oui | correspond à ^[a-z0-9][a-z0-9_-]{0,63}$ |
ceiling[].actions | tableau de string | oui | 1–24 éléments; aucun élément répété; chaque élément : une valeur parmi repository.read, storage.read, storage.manage, diagnostics.read, artifact.read, artifact.list, artifact.delete, artifact.promote, content.read, upload.create, upload.read, upload.write, upload.complete, upload.cancel, job.read, package.read, package.publish, asset.read, asset.write, asset.restore, annotation.read, annotation.write, reference.write, audit.read |
Réponses: 200, 400, 401, 403, 404, 405, 409, 413, 415, 422, 503, 507
Exemple
curl -X DELETE "$ARKVORY_URL/api/v1/api-keys/$ID/delegations/$ACCOUNTID" \
-H "Authorization: Bearer $ARKVORY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"expectedRevision":1}'