Сервисные аккаунты и ключи
Сервисные аккаунты для CI и автоматизации, их ключи, политики, делегирование и аудит.
Операции этой группы с правилом доступа, правилом повтора, параметрами и ответами. Каждый запрос несёт ключ: Authorization: Bearer <ключ> (см. «Аутентификация»).
Операции
Перечислить сервисные учётные записи
GET HEAD /api/v1/service-accounts
Доступ: Право администрирования сервисов service-account.read · Повтор: Можно повторять (чтение)
Перечисляет сервисные учётные записи, которые видит вызывающий, в порядке ID, по 50 на страницу, каждую с именем, признаком включения, revision, привязками политики bindings и временем создания; продолжайте с after, равным next. Ключ восстановления (bootstrap) видит все записи, делегат — только цели, делегирование которых включает service-account.read; без этого список пуст, а не отклоняется.
Параметры
| Имя | Где | Тип | Обязателен | Правила |
|---|---|---|---|---|
after | запрос | string (uuid) | нет | — |
Ответ 200
| Поле | Тип | Обязателен | Правила |
|---|---|---|---|
items | массив object | да | не больше 50 элементов |
items[].id | string (uuid) | да | — |
items[].name | string | да | по шаблону ^[a-zA-Z0-9_.-]{3,64}$ |
items[].enabled | boolean | да | — |
items[].revision | integer | да | 1–2147483647 |
items[].bindings | массив object | да | не больше 64 элементов |
items[].bindings[].resource | object | да | — |
items[].bindings[].actions | массив string | да | 1–24 элементов; без повторов; каждый элемент: одно из 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) | да | — |
next | string (uuid) | да | может быть null |
Ответы: 200, 400, 401, 403, 404, 409, 422, 503, 507
Пример
curl -X GET "$ARKVORY_URL/api/v1/service-accounts" \
-H "Authorization: Bearer $ARKVORY_TOKEN"Создать сервисную учётную запись
POST /api/v1/service-accounts
Доступ: Ключ установки (ключ восстановления) · Повтор: Не повторять автоматически
Создаёт машинную учётную запись для CI или приложения с name (3–64 символа: буквы, цифры или _.-) и привязками политики bindings: для каждого репозитория — точные действия, которые могут использовать её ключи (например, upload.create или content.read). Отвечает 201 с учётной записью; затем выдайте ключ через issueServiceKey. Занятое имя — 409 already_exists.
Тело запроса (application/json)
| Поле | Тип | Обязателен | Правила |
|---|---|---|---|
name | string | да | по шаблону ^[a-zA-Z0-9_.-]{3,64}$ |
bindings | массив object | да | не больше 64 элементов |
bindings[].resource | object | да | — |
bindings[].resource.kind | string | да | одно из repository |
bindings[].resource.id | string | да | по шаблону ^[a-z0-9][a-z0-9_-]{0,63}$ |
bindings[].actions | массив string | да | 1–24 элементов; без повторов; каждый элемент: одно из 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 |
Ответ 201
| Поле | Тип | Обязателен | Правила |
|---|---|---|---|
id | string (uuid) | да | — |
name | string | да | по шаблону ^[a-zA-Z0-9_.-]{3,64}$ |
enabled | boolean | да | — |
revision | integer | да | 1–2147483647 |
bindings | массив object | да | не больше 64 элементов |
bindings[].resource | object | да | — |
bindings[].resource.kind | string | да | одно из repository |
bindings[].resource.id | string | да | по шаблону ^[a-z0-9][a-z0-9_-]{0,63}$ |
bindings[].actions | массив string | да | 1–24 элементов; без повторов; каждый элемент: одно из 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) | да | — |
Ответы: 201, 400, 401, 403, 404, 405, 409, 413, 415, 422, 503, 507
Пример
curl -X POST "$ARKVORY_URL/api/v1/service-accounts" \
-H "Authorization: Bearer $ARKVORY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"<name>","bindings":[]}'Получить сервисную учётную запись
GET HEAD /api/v1/service-accounts/{id}
Доступ: Право администрирования сервисов service-account.read · Повтор: Можно повторять (чтение)
Возвращает имя учётной записи, признак включения, revision, привязки политики и время создания. Для делегата не назначенная ему учётная запись отвечает 404, а отсутствие нужного действия у назначенной — 403.
Параметры
| Имя | Где | Тип | Обязателен | Правила |
|---|---|---|---|---|
id | путь | string (uuid) | да | — |
Ответ 200
| Поле | Тип | Обязателен | Правила |
|---|---|---|---|
id | string (uuid) | да | — |
name | string | да | по шаблону ^[a-zA-Z0-9_.-]{3,64}$ |
enabled | boolean | да | — |
revision | integer | да | 1–2147483647 |
bindings | массив object | да | не больше 64 элементов |
bindings[].resource | object | да | — |
bindings[].resource.kind | string | да | одно из repository |
bindings[].resource.id | string | да | по шаблону ^[a-z0-9][a-z0-9_-]{0,63}$ |
bindings[].actions | массив string | да | 1–24 элементов; без повторов; каждый элемент: одно из 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) | да | — |
Ответы: 200, 400, 401, 403, 404, 409, 422, 503, 507
Пример
curl -X GET "$ARKVORY_URL/api/v1/service-accounts/$ID" \
-H "Authorization: Bearer $ARKVORY_TOKEN"Включить или отключить сервисную учётную запись
PATCH /api/v1/service-accounts/{id}
Доступ: Право администрирования сервисов service-account.manage · Повтор: Повтор только с ожидаемой ревизией (compare-and-swap)
Задаёт enabled; expectedRevision должна быть текущей ревизией, иначе 409 revision_mismatch. Здесь меняется только этот признак (имя изменить нельзя). Отключение блокирует все ключи учётной записи со следующего запроса; включение восстанавливает ключи, которые не истекли и не отозваны. Делегат может сделать это, только если вся текущая политика лежит в пределах его ceiling.
Параметры
| Имя | Где | Тип | Обязателен | Правила |
|---|---|---|---|---|
id | путь | string (uuid) | да | — |
Тело запроса (application/json)
| Поле | Тип | Обязателен | Правила |
|---|---|---|---|
expectedRevision | integer | да | 1–2147483646 |
enabled | boolean | да | — |
Ответ 200
| Поле | Тип | Обязателен | Правила |
|---|---|---|---|
id | string (uuid) | да | — |
name | string | да | по шаблону ^[a-zA-Z0-9_.-]{3,64}$ |
enabled | boolean | да | — |
revision | integer | да | 1–2147483647 |
bindings | массив object | да | не больше 64 элементов |
bindings[].resource | object | да | — |
bindings[].resource.kind | string | да | одно из repository |
bindings[].resource.id | string | да | по шаблону ^[a-z0-9][a-z0-9_-]{0,63}$ |
bindings[].actions | массив string | да | 1–24 элементов; без повторов; каждый элемент: одно из 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) | да | — |
Ответы: 200, 400, 401, 403, 404, 405, 409, 413, 415, 422, 503, 507
Пример
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}'Получить политику сервисной учётной записи
GET HEAD /api/v1/service-accounts/{id}/policy
Доступ: Право администрирования сервисов policy.read · Повтор: Можно повторять (чтение)
Возвращает учётную запись с привязками политики bindings и revision, как getServiceAccount, для вызывающего с правом policy.read. Действующие права ключа — пересечение этой политики и собственных привязок ключа по репозиториям и действиям.
Параметры
| Имя | Где | Тип | Обязателен | Правила |
|---|---|---|---|---|
id | путь | string (uuid) | да | — |
Ответ 200
| Поле | Тип | Обязателен | Правила |
|---|---|---|---|
id | string (uuid) | да | — |
name | string | да | по шаблону ^[a-zA-Z0-9_.-]{3,64}$ |
enabled | boolean | да | — |
revision | integer | да | 1–2147483647 |
bindings | массив object | да | не больше 64 элементов |
bindings[].resource | object | да | — |
bindings[].resource.kind | string | да | одно из repository |
bindings[].resource.id | string | да | по шаблону ^[a-z0-9][a-z0-9_-]{0,63}$ |
bindings[].actions | массив string | да | 1–24 элементов; без повторов; каждый элемент: одно из 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) | да | — |
Ответы: 200, 400, 401, 403, 404, 409, 422, 503, 507
Пример
curl -X GET "$ARKVORY_URL/api/v1/service-accounts/$ID/policy" \
-H "Authorization: Bearer $ARKVORY_TOKEN"Заменить политику сервисной учётной записи
PUT /api/v1/service-accounts/{id}/policy
Доступ: Право администрирования сервисов policy.manage · Повтор: Повтор только с ожидаемой ревизией (compare-and-swap)
Заменяет bindings учётной записи (до 64, каждая — репозиторий с точным набором действий); expectedRevision должна быть текущей ревизией, иначе 409 revision_mismatch. Каждый ключ следует за изменением со своего следующего запроса: сужение действует сразу, а расширение никогда не выходит за собственные привязки ключа. Делегату нужно, чтобы и текущая, и новая политика лежали в пределах его ceiling.
Параметры
| Имя | Где | Тип | Обязателен | Правила |
|---|---|---|---|---|
id | путь | string (uuid) | да | — |
Тело запроса (application/json)
| Поле | Тип | Обязателен | Правила |
|---|---|---|---|
expectedRevision | integer | да | 1–2147483646 |
bindings | массив object | да | не больше 64 элементов |
bindings[].resource | object | да | — |
bindings[].resource.kind | string | да | одно из repository |
bindings[].resource.id | string | да | по шаблону ^[a-z0-9][a-z0-9_-]{0,63}$ |
bindings[].actions | массив string | да | 1–24 элементов; без повторов; каждый элемент: одно из 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 |
Ответ 200
| Поле | Тип | Обязателен | Правила |
|---|---|---|---|
id | string (uuid) | да | — |
name | string | да | по шаблону ^[a-zA-Z0-9_.-]{3,64}$ |
enabled | boolean | да | — |
revision | integer | да | 1–2147483647 |
bindings | массив object | да | не больше 64 элементов |
bindings[].resource | object | да | — |
bindings[].resource.kind | string | да | одно из repository |
bindings[].resource.id | string | да | по шаблону ^[a-z0-9][a-z0-9_-]{0,63}$ |
bindings[].actions | массив string | да | 1–24 элементов; без повторов; каждый элемент: одно из 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) | да | — |
Ответы: 200, 400, 401, 403, 404, 405, 409, 413, 415, 422, 503, 507
Пример
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":[]}'Перечислить ключи сервисной учётной записи
GET HEAD /api/v1/service-accounts/{id}/keys
Доступ: Право администрирования сервисов credential.read · Повтор: Можно повторять (чтение)
Перечисляет метаданные ключей учётной записи в порядке ID, по 50 на страницу: имя, состояние state (pending, active, revoked), привязки, время создания, срок действия, срок активации и ключ, из которого этот получен ротацией; никогда не секреты и не их хеши. Продолжайте с after, равным next. Истечение срока не меняет state, поэтому сравнивайте expiresAt с текущим временем.
Параметры
| Имя | Где | Тип | Обязателен | Правила |
|---|---|---|---|---|
id | путь | string (uuid) | да | — |
after | запрос | string (uuid) | нет | — |
Ответ 200
| Поле | Тип | Обязателен | Правила |
|---|---|---|---|
items | массив object | да | не больше 50 элементов |
items[].id | string (uuid) | да | — |
items[].accountId | string (uuid) | да | — |
items[].name | string | да | по шаблону ^[a-zA-Z0-9_.-]{3,64}$ |
items[].state | string | да | одно из pending, active, revoked |
items[].bindings | массив object | да | не больше 64 элементов |
items[].bindings[].resource | object | да | — |
items[].bindings[].actions | массив string | да | 1–24 элементов; без повторов; каждый элемент: одно из 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) | да | — |
items[].expiresAt | string (date-time) | да | — |
items[].activationExpiresAt | string (date-time) | да | — |
items[].rotatedFrom | string (uuid) | да | может быть null |
next | string (uuid) | да | может быть null |
Ответы: 200, 400, 401, 403, 404, 409, 422, 503, 507
Пример
curl -X GET "$ARKVORY_URL/api/v1/service-accounts/$ID/keys" \
-H "Authorization: Bearer $ARKVORY_TOKEN"Выдать ключ сервисной учётной записи
POST /api/v1/service-accounts/{id}/keys
Доступ: Право администрирования сервисов credential.manage · Повтор: Можно повторять с тем же Idempotency-Key
Выдаёт ключ в состоянии pending с name, bindings (действуют, только где их разрешает и политика учётной записи) и необязательным expiresAt (UTC; по умолчанию 90 суток, не более 365, а для делегата — не позже срока его собственного ключа). Первый ответ — 201 с key и secret, который показывается только один раз; повтор с тем же Idempotency-Key и телом даёт 200 только с метаданными, другое тело — 409. Владелец ключа должен вызвать activateServiceKey с этим секретом в течение 15 минут; если секрет потерян, отзовите ключ и выдайте новый с новым Idempotency-Key.
Параметры
| Имя | Где | Тип | Обязателен | Правила |
|---|---|---|---|---|
id | путь | string (uuid) | да | — |
Idempotency-Key | заголовок | string | да | не длиннее 128 символов |
Тело запроса (application/json)
| Поле | Тип | Обязателен | Правила |
|---|---|---|---|
name | string | да | по шаблону ^[a-zA-Z0-9_.-]{3,64}$ |
bindings | массив object | да | не больше 64 элементов |
bindings[].resource | object | да | — |
bindings[].resource.kind | string | да | одно из repository |
bindings[].resource.id | string | да | по шаблону ^[a-z0-9][a-z0-9_-]{0,63}$ |
bindings[].actions | массив string | да | 1–24 элементов; без повторов; каждый элемент: одно из 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) | нет | — |
Ответ 200
| Поле | Тип | Обязателен | Правила |
|---|---|---|---|
key | object | да | — |
key.id | string (uuid) | да | — |
key.accountId | string (uuid) | да | — |
key.name | string | да | по шаблону ^[a-zA-Z0-9_.-]{3,64}$ |
key.state | string | да | одно из pending, active, revoked |
key.bindings | массив object | да | не больше 64 элементов |
key.bindings[].resource | object | да | — |
key.bindings[].actions | массив string | да | 1–24 элементов; без повторов; каждый элемент: одно из 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) | да | — |
key.expiresAt | string (date-time) | да | — |
key.activationExpiresAt | string (date-time) | да | — |
key.rotatedFrom | string (uuid) | да | может быть null |
secret | string | нет | — |
Ответы: 200, 201, 400, 401, 403, 404, 405, 409, 413, 415, 422, 503, 507
Пример
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":[]}'Прочитать аудит сервисной учётной записи
GET HEAD /api/v1/service-accounts/{id}/audit
Доступ: Право администрирования сервисов service-audit.read · Повтор: Можно повторять (чтение)
Возвращает от старых к новым до 100 событий учётной записи после номера after (по умолчанию 0): изменения учётной записи, политики и ключей, такие как выдача, ротация, активация и отзыв, каждое с инициатором, действием, ключом и временем. Чтобы читать дальше, передайте последний sequence как after; поля next нет. Хранятся только новейшие 100 000 событий сервера.
Параметры
| Имя | Где | Тип | Обязателен | Правила |
|---|---|---|---|---|
id | путь | string (uuid) | да | — |
after | запрос | string | нет | целое число десятичными цифрами, передаётся строкой |
Ответ 200
| Поле | Тип | Обязателен | Правила |
|---|---|---|---|
items | массив object | да | не больше 100 элементов |
items[].sequence | string | да | — |
items[].actor | string | да | — |
items[].action | string | да | — |
items[].accountId | string (uuid) | да | — |
items[].keyId | string (uuid) | да | может быть null |
items[].occurredAt | string (date-time) | да | — |
Ответы: 200, 400, 401, 403, 404, 409, 422, 503, 507
Пример
curl -X GET "$ARKVORY_URL/api/v1/service-accounts/$ID/audit" \
-H "Authorization: Bearer $ARKVORY_TOKEN"Получить ключ
GET HEAD /api/v1/api-keys/{id}
Доступ: Право администрирования сервисов credential.read · Повтор: Можно повторять (чтение)
Возвращает метаданные одного управляемого ключа: его учётную запись, имя, состояние, привязки, время создания, срок действия, срок активации и ключ, из которого он получен ротацией; никогда не секрет и не его хеш.
Параметры
| Имя | Где | Тип | Обязателен | Правила |
|---|---|---|---|---|
id | путь | string (uuid) | да | — |
Ответ 200
| Поле | Тип | Обязателен | Правила |
|---|---|---|---|
id | string (uuid) | да | — |
accountId | string (uuid) | да | — |
name | string | да | по шаблону ^[a-zA-Z0-9_.-]{3,64}$ |
state | string | да | одно из pending, active, revoked |
bindings | массив object | да | не больше 64 элементов |
bindings[].resource | object | да | — |
bindings[].resource.kind | string | да | одно из repository |
bindings[].resource.id | string | да | по шаблону ^[a-z0-9][a-z0-9_-]{0,63}$ |
bindings[].actions | массив string | да | 1–24 элементов; без повторов; каждый элемент: одно из 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) | да | — |
expiresAt | string (date-time) | да | — |
activationExpiresAt | string (date-time) | да | — |
rotatedFrom | string (uuid) | да | может быть null |
Ответы: 200, 400, 401, 403, 404, 409, 422, 503, 507
Пример
curl -X GET "$ARKVORY_URL/api/v1/api-keys/$ID" \
-H "Authorization: Bearer $ARKVORY_TOKEN"Ротировать ключ
POST /api/v1/api-keys/{id}/rotate
Доступ: Право администрирования сервисов credential.manage · Повтор: Можно повторять с тем же Idempotency-Key
Выдаёт для той же учётной записи ключ-преемник ключа id в состоянии pending с теми же или более узкими bindings и отвечает как issueServiceKey: 201 с одноразовым secret, а при повторе с тем же Idempotency-Key — 200 только с метаданными. После активации преемника старый ключ остаётся действительным ещё не более 24 часов; отзовите его явно, когда новый заработает, но только после завершения заданий, которые он запустил. Делегирования, принадлежащие ключу оператора, преемнику не копируются.
Параметры
| Имя | Где | Тип | Обязателен | Правила |
|---|---|---|---|---|
id | путь | string (uuid) | да | — |
Idempotency-Key | заголовок | string | да | не длиннее 128 символов |
Тело запроса (application/json)
| Поле | Тип | Обязателен | Правила |
|---|---|---|---|
name | string | да | по шаблону ^[a-zA-Z0-9_.-]{3,64}$ |
bindings | массив object | да | не больше 64 элементов |
bindings[].resource | object | да | — |
bindings[].resource.kind | string | да | одно из repository |
bindings[].resource.id | string | да | по шаблону ^[a-z0-9][a-z0-9_-]{0,63}$ |
bindings[].actions | массив string | да | 1–24 элементов; без повторов; каждый элемент: одно из 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) | нет | — |
Ответ 200
| Поле | Тип | Обязателен | Правила |
|---|---|---|---|
key | object | да | — |
key.id | string (uuid) | да | — |
key.accountId | string (uuid) | да | — |
key.name | string | да | по шаблону ^[a-zA-Z0-9_.-]{3,64}$ |
key.state | string | да | одно из pending, active, revoked |
key.bindings | массив object | да | не больше 64 элементов |
key.bindings[].resource | object | да | — |
key.bindings[].actions | массив string | да | 1–24 элементов; без повторов; каждый элемент: одно из 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) | да | — |
key.expiresAt | string (date-time) | да | — |
key.activationExpiresAt | string (date-time) | да | — |
key.rotatedFrom | string (uuid) | да | может быть null |
secret | string | нет | — |
Ответы: 200, 201, 400, 401, 403, 404, 405, 409, 413, 415, 422, 503, 507
Пример
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":[]}'Отозвать ключ
POST /api/v1/api-keys/{id}/revoke
Доступ: Право администрирования сервисов credential.manage · Повтор: Можно повторять: тот же запрос даёт тот же результат
Отзывает ключ навсегда: его следующий запрос завершится ошибкой, а уже идущее скачивание не прерывается. Повтор успешен и возвращает 204. Ключи, которые выдал отозванный ключ оператора и которые уже активированы, остаются действительными; отзовите их отдельно.
Параметры
| Имя | Где | Тип | Обязателен | Правила |
|---|---|---|---|---|
id | путь | string (uuid) | да | — |
Ответы: 204, 400, 401, 403, 404, 405, 409, 422, 503, 507
Пример
curl -X POST "$ARKVORY_URL/api/v1/api-keys/$ID/revoke" \
-H "Authorization: Bearer $ARKVORY_TOKEN"Активировать ключ
POST /api/v1/auth/activate-key
Доступ: Выданный ключ до или после активации · Повтор: Можно повторять: тот же запрос даёт тот же результат
Подтверждает, что владелец получил только что выданный ключ: вызовите операцию с этим ключом в Authorization: Bearer в течение 15 минут после выдачи, и ключ станет активным (204). Повтор безопасен и не продлевает срок действия. Активация ключа, полученного ротацией, сокращает оставшийся срок заменяемого ключа не более чем до 24 часов.
Ответы: 204, 400, 401, 403, 404, 405, 409, 422, 503, 507
Пример
curl -X POST "$ARKVORY_URL/api/v1/auth/activate-key" \
-H "Authorization: Bearer $ARKVORY_TOKEN"Перечислить делегирования ключа
GET HEAD /api/v1/api-keys/{id}/delegations
Доступ: Ключ установки или сам этот ключ · Повтор: Можно повторять (чтение)
Возвращает делегирования ключа оператора id, до 64, включая отключённые: для каждой целевой учётной записи — revision, признак enabled, actions администрирования (например, credential.manage) и ceiling привязок к репозиториям, которые ключ вправе выдавать. Делегат читает здесь свои собственные (ID его ключа — credentialId в getOwnPermissions); список другого ключа — 403.
Параметры
| Имя | Где | Тип | Обязателен | Правила |
|---|---|---|---|---|
id | путь | string (uuid) | да | — |
Ответ 200
| Поле | Тип | Обязателен | Правила |
|---|---|---|---|
items | массив object | да | не больше 64 элементов |
items[].keyId | string (uuid) | да | — |
items[].targetAccountId | string (uuid) | да | — |
items[].enabled | boolean | да | — |
items[].revision | integer | да | 1–2147483647 |
items[].actions | массив string | да | не больше 7 элементов; без повторов; каждый элемент: одно из service-account.read, service-account.manage, policy.read, policy.manage, credential.read, credential.manage, service-audit.read |
items[].ceiling | массив object | да | не больше 16 элементов |
items[].ceiling[].resource | object | да | — |
items[].ceiling[].actions | массив string | да | 1–24 элементов; без повторов; каждый элемент: одно из 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 |
Ответы: 200, 400, 401, 403, 404, 409, 422, 503, 507
Пример
curl -X GET "$ARKVORY_URL/api/v1/api-keys/$ID/delegations" \
-H "Authorization: Bearer $ARKVORY_TOKEN"Делегировать администрирование сервисной учётной записи
PUT /api/v1/api-keys/{id}/delegations/{accountId}
Доступ: Ключ установки (ключ восстановления) · Повтор: Повтор только с ожидаемой ревизией (compare-and-swap)
Позволяет ключу id администрировать сервисную учётную запись accountId с заданными actions (service-account.read, service-account.manage, policy.read, policy.manage, credential.read, credential.manage, service-audit.read) в пределах ceiling — до 16 привязок к репозиториям, которые он вправе выдавать; право manage не включает read. expectedRevision равна 0 для создания и текущей ревизии записи для изменения или повторного включения, иначе 409. Ключ должен быть активен и выдан ключом восстановления (bootstrap), а учётная запись не может одновременно иметь делегирования и быть целью делегирования, поэтому делегирование не образует цепочек.
Параметры
| Имя | Где | Тип | Обязателен | Правила |
|---|---|---|---|---|
id | путь | string (uuid) | да | — |
accountId | путь | string (uuid) | да | — |
Тело запроса (application/json)
| Поле | Тип | Обязателен | Правила |
|---|---|---|---|
expectedRevision | integer | да | 0–2147483646 |
actions | массив string | да | 1–7 элементов; без повторов; каждый элемент: одно из service-account.read, service-account.manage, policy.read, policy.manage, credential.read, credential.manage, service-audit.read |
ceiling | массив object | да | не больше 16 элементов |
ceiling[].resource | object | да | — |
ceiling[].resource.kind | string | да | одно из repository |
ceiling[].resource.id | string | да | по шаблону ^[a-z0-9][a-z0-9_-]{0,63}$ |
ceiling[].actions | массив string | да | 1–24 элементов; без повторов; каждый элемент: одно из 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 |
Ответ 200
| Поле | Тип | Обязателен | Правила |
|---|---|---|---|
keyId | string (uuid) | да | — |
targetAccountId | string (uuid) | да | — |
enabled | boolean | да | — |
revision | integer | да | 1–2147483647 |
actions | массив string | да | не больше 7 элементов; без повторов; каждый элемент: одно из service-account.read, service-account.manage, policy.read, policy.manage, credential.read, credential.manage, service-audit.read |
ceiling | массив object | да | не больше 16 элементов |
ceiling[].resource | object | да | — |
ceiling[].resource.kind | string | да | одно из repository |
ceiling[].resource.id | string | да | по шаблону ^[a-z0-9][a-z0-9_-]{0,63}$ |
ceiling[].actions | массив string | да | 1–24 элементов; без повторов; каждый элемент: одно из 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 |
Ответы: 200, 400, 401, 403, 404, 405, 409, 413, 415, 422, 503, 507
Пример
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":[]}'Отозвать делегирование
DELETE /api/v1/api-keys/{id}/delegations/{accountId}
Доступ: Ключ установки (ключ восстановления) · Повтор: Повтор только с ожидаемой ревизией (compare-and-swap)
Отключает делегирование ключа id над accountId; в теле JSON передаётся expectedRevision — текущая ревизия записи. Запись остаётся как отключённая, без действий и с более высокой ревизией, и возвращается с 200; после потерянного ответа прочитайте её через listServiceDelegations, а не повторяйте запрос, так как старая ревизия даст 409. Ключи, которые делегат уже выдал и активировал, продолжают работать: отзовите их или отключите учётную запись отдельно.
Параметры
| Имя | Где | Тип | Обязателен | Правила |
|---|---|---|---|---|
id | путь | string (uuid) | да | — |
accountId | путь | string (uuid) | да | — |
Тело запроса (application/json)
| Поле | Тип | Обязателен | Правила |
|---|---|---|---|
expectedRevision | integer | да | 1–2147483646 |
Ответ 200
| Поле | Тип | Обязателен | Правила |
|---|---|---|---|
keyId | string (uuid) | да | — |
targetAccountId | string (uuid) | да | — |
enabled | boolean | да | — |
revision | integer | да | 1–2147483647 |
actions | массив string | да | не больше 7 элементов; без повторов; каждый элемент: одно из service-account.read, service-account.manage, policy.read, policy.manage, credential.read, credential.manage, service-audit.read |
ceiling | массив object | да | не больше 16 элементов |
ceiling[].resource | object | да | — |
ceiling[].resource.kind | string | да | одно из repository |
ceiling[].resource.id | string | да | по шаблону ^[a-z0-9][a-z0-9_-]{0,63}$ |
ceiling[].actions | массив string | да | 1–24 элементов; без повторов; каждый элемент: одно из 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 |
Ответы: 200, 400, 401, 403, 404, 405, 409, 413, 415, 422, 503, 507
Пример
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}'