Перейти к содержимому

Сервисные аккаунты и ключи ​

Сервисные аккаунты для 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[].idstring (uuid)да—
items[].namestringдапо шаблону ^[a-zA-Z0-9_.-]{3,64}$
items[].enabledbooleanда—
items[].revisionintegerда1–2147483647
items[].bindingsмассив objectдане больше 64 элементов
items[].bindings[].resourceobjectда—
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[].createdAtstring (date-time)да—
nextstring (uuid)даможет быть null

Ответы: 200, 400, 401, 403, 404, 409, 422, 503, 507

Пример

bash
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)

ПолеТипОбязателенПравила
namestringдапо шаблону ^[a-zA-Z0-9_.-]{3,64}$
bindingsмассив objectдане больше 64 элементов
bindings[].resourceobjectда—
bindings[].resource.kindstringдаодно из repository
bindings[].resource.idstringдапо шаблону ^[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

ПолеТипОбязателенПравила
idstring (uuid)да—
namestringдапо шаблону ^[a-zA-Z0-9_.-]{3,64}$
enabledbooleanда—
revisionintegerда1–2147483647
bindingsмассив objectдане больше 64 элементов
bindings[].resourceobjectда—
bindings[].resource.kindstringдаодно из repository
bindings[].resource.idstringдапо шаблону ^[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
createdAtstring (date-time)да—

Ответы: 201, 400, 401, 403, 404, 405, 409, 413, 415, 422, 503, 507

Пример

bash
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

ПолеТипОбязателенПравила
idstring (uuid)да—
namestringдапо шаблону ^[a-zA-Z0-9_.-]{3,64}$
enabledbooleanда—
revisionintegerда1–2147483647
bindingsмассив objectдане больше 64 элементов
bindings[].resourceobjectда—
bindings[].resource.kindstringдаодно из repository
bindings[].resource.idstringдапо шаблону ^[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
createdAtstring (date-time)да—

Ответы: 200, 400, 401, 403, 404, 409, 422, 503, 507

Пример

bash
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)

ПолеТипОбязателенПравила
expectedRevisionintegerда1–2147483646
enabledbooleanда—

Ответ 200

ПолеТипОбязателенПравила
idstring (uuid)да—
namestringдапо шаблону ^[a-zA-Z0-9_.-]{3,64}$
enabledbooleanда—
revisionintegerда1–2147483647
bindingsмассив objectдане больше 64 элементов
bindings[].resourceobjectда—
bindings[].resource.kindstringдаодно из repository
bindings[].resource.idstringдапо шаблону ^[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
createdAtstring (date-time)да—

Ответы: 200, 400, 401, 403, 404, 405, 409, 413, 415, 422, 503, 507

Пример

bash
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

ПолеТипОбязателенПравила
idstring (uuid)да—
namestringдапо шаблону ^[a-zA-Z0-9_.-]{3,64}$
enabledbooleanда—
revisionintegerда1–2147483647
bindingsмассив objectдане больше 64 элементов
bindings[].resourceobjectда—
bindings[].resource.kindstringдаодно из repository
bindings[].resource.idstringдапо шаблону ^[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
createdAtstring (date-time)да—

Ответы: 200, 400, 401, 403, 404, 409, 422, 503, 507

Пример

bash
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)

ПолеТипОбязателенПравила
expectedRevisionintegerда1–2147483646
bindingsмассив objectдане больше 64 элементов
bindings[].resourceobjectда—
bindings[].resource.kindstringдаодно из repository
bindings[].resource.idstringдапо шаблону ^[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

ПолеТипОбязателенПравила
idstring (uuid)да—
namestringдапо шаблону ^[a-zA-Z0-9_.-]{3,64}$
enabledbooleanда—
revisionintegerда1–2147483647
bindingsмассив objectдане больше 64 элементов
bindings[].resourceobjectда—
bindings[].resource.kindstringдаодно из repository
bindings[].resource.idstringдапо шаблону ^[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
createdAtstring (date-time)да—

Ответы: 200, 400, 401, 403, 404, 405, 409, 413, 415, 422, 503, 507

Пример

bash
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[].idstring (uuid)да—
items[].accountIdstring (uuid)да—
items[].namestringдапо шаблону ^[a-zA-Z0-9_.-]{3,64}$
items[].statestringдаодно из pending, active, revoked
items[].bindingsмассив objectдане больше 64 элементов
items[].bindings[].resourceobjectда—
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[].createdAtstring (date-time)да—
items[].expiresAtstring (date-time)да—
items[].activationExpiresAtstring (date-time)да—
items[].rotatedFromstring (uuid)даможет быть null
nextstring (uuid)даможет быть null

Ответы: 200, 400, 401, 403, 404, 409, 422, 503, 507

Пример

bash
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)

ПолеТипОбязателенПравила
namestringдапо шаблону ^[a-zA-Z0-9_.-]{3,64}$
bindingsмассив objectдане больше 64 элементов
bindings[].resourceobjectда—
bindings[].resource.kindstringдаодно из repository
bindings[].resource.idstringдапо шаблону ^[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
expiresAtstring (date-time)нет—

Ответ 200

ПолеТипОбязателенПравила
keyobjectда—
key.idstring (uuid)да—
key.accountIdstring (uuid)да—
key.namestringдапо шаблону ^[a-zA-Z0-9_.-]{3,64}$
key.statestringдаодно из pending, active, revoked
key.bindingsмассив objectдане больше 64 элементов
key.bindings[].resourceobjectда—
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.createdAtstring (date-time)да—
key.expiresAtstring (date-time)да—
key.activationExpiresAtstring (date-time)да—
key.rotatedFromstring (uuid)даможет быть null
secretstringнет—

Ответы: 200, 201, 400, 401, 403, 404, 405, 409, 413, 415, 422, 503, 507

Пример

bash
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[].sequencestringда—
items[].actorstringда—
items[].actionstringда—
items[].accountIdstring (uuid)да—
items[].keyIdstring (uuid)даможет быть null
items[].occurredAtstring (date-time)да—

Ответы: 200, 400, 401, 403, 404, 409, 422, 503, 507

Пример

bash
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

ПолеТипОбязателенПравила
idstring (uuid)да—
accountIdstring (uuid)да—
namestringдапо шаблону ^[a-zA-Z0-9_.-]{3,64}$
statestringдаодно из pending, active, revoked
bindingsмассив objectдане больше 64 элементов
bindings[].resourceobjectда—
bindings[].resource.kindstringдаодно из repository
bindings[].resource.idstringдапо шаблону ^[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
createdAtstring (date-time)да—
expiresAtstring (date-time)да—
activationExpiresAtstring (date-time)да—
rotatedFromstring (uuid)даможет быть null

Ответы: 200, 400, 401, 403, 404, 409, 422, 503, 507

Пример

bash
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)

ПолеТипОбязателенПравила
namestringдапо шаблону ^[a-zA-Z0-9_.-]{3,64}$
bindingsмассив objectдане больше 64 элементов
bindings[].resourceobjectда—
bindings[].resource.kindstringдаодно из repository
bindings[].resource.idstringдапо шаблону ^[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
expiresAtstring (date-time)нет—

Ответ 200

ПолеТипОбязателенПравила
keyobjectда—
key.idstring (uuid)да—
key.accountIdstring (uuid)да—
key.namestringдапо шаблону ^[a-zA-Z0-9_.-]{3,64}$
key.statestringдаодно из pending, active, revoked
key.bindingsмассив objectдане больше 64 элементов
key.bindings[].resourceobjectда—
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.createdAtstring (date-time)да—
key.expiresAtstring (date-time)да—
key.activationExpiresAtstring (date-time)да—
key.rotatedFromstring (uuid)даможет быть null
secretstringнет—

Ответы: 200, 201, 400, 401, 403, 404, 405, 409, 413, 415, 422, 503, 507

Пример

bash
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

Пример

bash
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

Пример

bash
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[].keyIdstring (uuid)да—
items[].targetAccountIdstring (uuid)да—
items[].enabledbooleanда—
items[].revisionintegerда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[].resourceobjectда—
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

Пример

bash
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)

ПолеТипОбязателенПравила
expectedRevisionintegerда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[].resourceobjectда—
ceiling[].resource.kindstringдаодно из repository
ceiling[].resource.idstringдапо шаблону ^[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

ПолеТипОбязателенПравила
keyIdstring (uuid)да—
targetAccountIdstring (uuid)да—
enabledbooleanда—
revisionintegerда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[].resourceobjectда—
ceiling[].resource.kindstringдаодно из repository
ceiling[].resource.idstringдапо шаблону ^[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

Пример

bash
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)

ПолеТипОбязателенПравила
expectedRevisionintegerда1–2147483646

Ответ 200

ПолеТипОбязателенПравила
keyIdstring (uuid)да—
targetAccountIdstring (uuid)да—
enabledbooleanда—
revisionintegerда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[].resourceobjectда—
ceiling[].resource.kindstringдаодно из repository
ceiling[].resource.idstringдапо шаблону ^[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

Пример

bash
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}'

Arkvory · ProAnimaStudio