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

Использование токена сервисного аккаунта ВМ для работы с API

Привяжите сервисный аккаунт к виртуальной машине, чтобы безопасно получать и автоматически обновлять токены из метаданных ВМ. Это позволит избежать хранения ключей или токенов на диске ВМ и упростит автоматизацию процессов в облаке. Токен поступит в метаданные ВМ сразу после привязки сервисного аккаунта.

Чтобы узнать, как использовать токен сервисного аккаунта для запросов к API:

  1. Добавьте сервисный аккаунт в настройки виртуальной машины.
  2. Получите информацию о сервисном аккаунте из метаданных виртуальной машины.

Если вам больше не нужны созданные ресурсы, удалите их.

Примечание

Шаги настройки описаны для проекта project-sa-vm с использованием веб-консоли, MWS CLI и запросов к API.

  1. Создайте сервисный аккаунт с именем service-account и базовой ролью editor.

    Чтобы сделать это, ваша роль должна быть не ниже iam.serviceAccount.admin.

    Вы также можете использовать существующий сервисный аккаунт, в этом случае вам будет достаточно роли iam.serviceAccount.user (входит в роль editor).

    Примечание

    Для виртуальной машины и MWS CLI можно использовать один и тот же сервисный аккаунт.

  2. Создайте виртуальную машину с именем vm-ca-test и сгенерированным ключом SSH. Вы можете выбрать сервисный аккаунт service-account при создании ВМ или добавить его позже.

  3. Для более комфортной работы с выводом команд установите утилиту jq.

  4. Если вы планируете использовать MWS CLI:

    6.1. Создайте авторизованный ключ для сервисного аккаунта service-account.

    6.2. Установите и настройте MWS CLI.

1. Добавьте сервисный аккаунт в настройки виртуальной машины

Заголовок раздела «1. Добавьте сервисный аккаунт в настройки виртуальной машины»
  • Веб-консоль
  • MWS CLI
  1. В веб-консоли выберите нужный проект.
  2. В списке сервисов выберите ComputeВиртуальные машины и выберите виртуальную машину с именем vm-ca-test.
  3. На вкладке Основное перейдите к редактированию сервисного аккаунта.
  4. Выберите сервисный аккаунт с именем service-account.
  5. Нажмите кнопку Сохранить.

2. Получите информацию о сервисном аккаунте

Заголовок раздела «2. Получите информацию о сервисном аккаунте»
  1. Привязка сервисного аккаунта к ВМ может занять несколько минут. Чтобы убедиться, что операция привязки завершена, получите информацию о сервисном аккаунте:

    bash
    curl -s -H "Metadata-Flavor: Google" \
    http://169.254.169.254/computeMetadata/v1/instance/service-accounts/?recursive=true | jq

    Ожидаемый вывод команды:

    bash
    {
    "<имя проекта>/serviceAccounts/<имя сервисного аккаунта>": {
    "aliases": [
    "default"
    ]
    }
    }

Получите токен для сервисного аккаунта:

bash
curl -s -H "Metadata-Flavor: Google" \
http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token | jq

Вывод команды содержит тело токена, срок его действия в секундах, и тип токена:

bash
{
"access_token": "ey...Dw",
"expires_in": 43144,
"token_type": "Bearer"
}

4. Выполните запрос к API с помощью токена сервисного аккаунта

Заголовок раздела «4. Выполните запрос к API с помощью токена сервисного аккаунта»
  1. Добавьте токен в переменные окружения виртуальной машины:

    bash
    TOKEN=$(curl -s -H "Metadata-Flavor: Google" http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token \
    | jq -r '.access_token')
  2. Выполните любой запрос к API, например, получите список ВМ в проекте:

    bash
    curl -H "Authorization: Bearer $TOKEN" \
    https://compute.mwsapis.ru/compute/v1/projects/project-sa-vm/virtualMachines
    json
    {
    "items": [
    {
    "kind": "compute/v1/virtualMachine",
    "metadata": {
    "id": "projects/project-sa-vm/virtualMachines/vm-ca-test",
    ...
    },
    ...
    },
    {
    "kind": "compute/v1/virtualMachine",
    "metadata": {
    "id": "projects/project-sa-vm/virtualMachines/vm-hwblua",
    ...
    },
    ...
    }
    ]
    }

Некоторые ресурсы тарифицируются. Чтобы за их использование не списывалась плата: