Skip to main content

Сервис-аккаунты

Сервис-аккаунт или Service Account нужны для push образов в Container Registry, потому что пользователи могут делать только pull. Один тенант — сколько угодно сервис-аккаунтов.

У сервис-аккаунта есть:

  • ключ — чтобы зайти в систему;
  • роль — права, которые вы ему выдаёте.

Настроить

Шаг 1. Создайте сервис-аккаунт

Создать сервис-аккаунт может «Project lead» тенанта.

  1. Перейдите в Spirit.
  2. Проверьте, что на верхней панели у стрелочки ваш тенант.
  3. Нажмите ManageService accounts в левом меню.
  4. Нажмите Create.
  5. Заполните Name и напишите в Description, для чего вы хотите использовать сервис-аккаунт.
  6. Нажмите Create.

Шаг 2. Добавьте роль

Сервис-аккаунт нельзя добавить в другой тенант и назначить ему роль. Назначьте на сервисную учётку роли также, как на пользователя.

Добавить роль может «Project lead» тенанта.

  1. Нажмите Добавить роль.
  2. Выберите Роль.
  3. Нажмите Сохранить.

Шаг 3. Создайте ключ

Ключ — файл в формате .JSON для авторизации. У сервис-аккаунта их может быть несколько — отдельный для разных автоматизаций.

Храните ключ в надёжном месте, например, в групповых переменных CI с типом файл. Если он потеряется или утечёт, сгенерируйте новый. Если удалить ключ, автоматизация, которая использует его, потеряет доступ к системе.

Чтобы создать ключ:

  1. Проверьте, что у вас роль Project lead в тенанте.
  2. Перейдите на вкладку Ключи.
  3. Нажмите Добавить ключ.
  4. Напишите Описание — для чего создаёте ключ.
  5. Выберите Дату истечения срока действия.
  6. Нажмите Сохранить.

Файл с ключом загрузится на компьютер, вы можете открыть его в текстовом редакторе или среде разработки.

Пример ключа:

{
"kind": "ServiceAccountKeySecret",
"attributes": {
"clientID": "a33e0cbd-2e63-44f0-8e39-322d3f0aa51d",
"clientSecret": "m90agRkz4TfrW6gHw2~f~aFceI",
"privateKey": "-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQEAt/sBAFlpVLQetG6N9m3FEFP5OwjJv3ZPPXB+dxmnDFoa8uXF\nTcLgz+VahS7ymb6rf/iCR/bbL/N1yAMW3KdiSc916rG3h4+VipMvr6ZWEMvAAgAt\n95iJgvEZbfKUfC0XlJwg/p37CUkoAoCDC7jlHgsEZcwAwtu18AcXVpJRUnwkA/wh\nZpG2yyR4EvcdXur1nvyDTboo0Q3wcaEWrliuSCHr64RM5+WYBLlQkfph9sznBJ9p\n5Jyg/syD7ttKiCL4mLQ9+RDzoBD1eyVmXKdx8lvhvLjKgcCfbcOuPgZmp1w6KTvq\n8oCF8vHrg+DgAX/uLpJUOyPUab6DionFxyzwsQIDAQABAoIBAQCAvHBM8EOV85tw\nodNQVisIa9n/hvy0rnJwCWFUsWyEZiBpSoIvEWgB0PjwLJOxJQwYNanj9UYWXYNS\n+2Zp6+4Iu9RE7yn+/2eiWa+KdxfOFOQ8AigoEmJWb6JdntprsZnIcR9dSuo36yrF\n5WrNLwmTZh4jpQX7U4YReMTJ3QRudCKbFyKU1NV8/t6x1twxeGB75hd8NQR8z+km\ndUTbh7k73j1ig4UojZKm92MJZhgrcO/sAgsjWia6wPcxFsKkeiG3x+oHs3kkGdLw\nBdUUKMkjkqsmbJAzoVTMGXW9GWMWxf6AyRzsmMKvB6CFZfAS2ZjM8VmcNQreZcJE\nRAAZW0LJAoGBAMkDHcta2l3gVxYMw/2EXEakvm6EqO70Sl4ataFuMTX06oXSE5a6\nOKGLjDKCIbCqiFUjvULMW0RmCELBX4A8O7LHP82dUXEZ0/1KaZbl1Gc8pX+03LLX\nqmFycgWorx8gek4hQXmY6GtnA0b3cuC7ltxmhez+CZByXE70ib0v4UsnAoGBAOpP\nKIGiO8W+EAFuxcwrxIVabMa4ASfmI+cRYeYq/lK2ea2HOD3MTW3eJsDgEMa52Fz5\nT/m2eiKALubrmYj2uNkVbcZGQiglmb53+9XAAtTe48DH9vDGpjjnpR33zx9VFLzM\nnd1zPd98RvtiKCQuCq2BpyVNHt7fDUJXSQ+mmyxnAoGAIoYef+bCyozVaDwZDVnG\nX3u8GU8/lIrwmukLeQZr/VBrV0CVjLW/ND+7fJFNKAKiF71jrC1dH4pGsPB1bpjp\nx/LgynfSnRJKjp5RNFGVAYYxBpYRscXIxaPaYY5vRXFWkES18iSJBqlSrsWhPWf6\nqTASoHmhOuXpZMYrQgsPLtECgYB5wuMQ4sbfDtLwe6ksXb5FcmU+q1ZmbpFPvde7\nLbJ2Nz9qLu/KJYZDRwOqjYYKT3+haSnnYa18ilJVTC/AXj5XCWy/cblldYy8z0s+\nnAacqqt+fivUmda9kZtbxHCNHsClEEwlTYLkxYd5kVu82XRRECRVHQui1BTm2ccs\n6+6NlwKBgFb8fX5EUBkdhsbhC9iiZnxjNAZCJoASxEFdOC890PTliv6caz78suO8\nJs6ftmUThZwyV35/cHXd6EHaFf8hus3l0dxZwN8iQfS/3HkFV8fEADd/zHaR33N/\nWdRH4v8zbuDZB7CpPq5WiV5vhJ+67eWEq634+YVFL04GDqOQv1Jg\n-----END RSA PRIVATE KEY-----\n",
"privateKeyID": "86fc052d-39f6-4142-a445-66c813bb1997",
"serviceAccountID": "553a151e-b956-4463-bf44-25d5afc35184",
"serviceAccountName": "test-2912-sa-test",
"tenantKey": "test-2912",
"tokenURI": "https://polygon.t-technologies.ru/api/v1/oauth2/token"
}
}

Шаг 4. Пройдите аутентификацию

Время жизни токена — 1 час. Если он истёк, запросите новый.

Чтобы получить токен доступа:

  1. Установите утилиту Spirit CLI, если её у вас не было.

  2. Выполните команду, где файл .JSON — ключ, который вы сгенерировали в Шаге 3:

    dp auth service-acc --key-file sa-test-0201-test-6f84e5d4-3247-4779-a1fb-e7f9994026d3.json
  3. Получите токен доступа с помощью команды:

    dp auth print-token

Шаг 5. Обратитесь к API с токеном

Чтобы обратиться к API Spirit и подключенным к нему системам, передайте токен в заголовке Authorization: Bearer <token>. Например:

> curl -X GET https://polygon.t-technologies.ru/api/v1/projects --header "Authorization: Bearer 1kwCcW6aIybZmsy8ccd3jkfNFaBGX5BahIxz-kzr_fc.rGi5j8KDnY9U6ZddFsvrnPwoB_GCWIKKQck7y4rhkhw"


>[{"id":"51cc1bbc-4b2f-4f97-b530-42aa4b9c430d","name":"test-2912","key":"test-2912","description":"test-2912","private":false}]

Исправить ошибки

401 Unauthorized

Обращение без токена, с истекшим, отозванным или некорректным токеном приведет к получению ошибки

> curl -X GET https://polygon.t-technologies.ru/api/v1/projects


>\{"error":{"code":401,"status":"Unauthorized","request":"72cf841bd9c894ec9eb50806fa8a5438","message":"Access credentials are invalid"}}

403 Forbidden

Если вы обратились с токеном, для которого недостаточно полномочий для обращения к ресурсу:

> curl -X GET https://polygon.t-technologies.ru/api/v1/admins --header "Authorization: Bearer 1kwCcW6aIybZmsy8ccd3jkfNFaBGX5BahIxz-kzr_fc.rGi5j8KDnY9U6ZddFsvrnPwoB_GCWIKKQck7y4rhkhw"


> {"error":{"code":403,"status":"Forbidden","request":"a29a2cabe38f69152ee0c914497c7bc6","reason":"No allow policies applied","message":"Access credentials are not sufficient to access this resource"}}