VK Cloud logo

Получение токена доступа Keystone

Токен доступа используется для аутентификации в сервисах VK Cloud через REST API с использованием Keystone. Примеры использования токена:

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

  1. Перейдите в личный кабинет VK Cloud.

  2. Убедитесь, что включена двухфакторная аутентификация и активирован доступ по API.

  3. Выберите проект, в котором планируется использовать токен.

  4. Получите данные проекта и пользователя, для которого генерируется токен:

    1. В личном кабинете перейдите в раздел Настройки проекта.
    2. Нажмите кнопку Скачать openrc версии 3. Будет загружен файл вида <название проекта>-openrc.sh.
  5. Загрузите данные, полученные на предыдущем шаге, в переменные окружения.

    1. Запустите скачанный файл:
    source <название проекта>-openrc.sh
    1. Введите пароль для пользователя в появившемся окне.
  6. Выполните команду с помощью утилиты curl:

    1curl -X POST \
    2-H "Content-Type: application/json" \
    3-d '{
    4    "auth": {
    5        "identity": {
    6            "methods": [
    7                "password"
    8            ],
    9            "password": {
    10                "user": {
    11                    "domain": {
    12                        "id": "'$OS_USER_DOMAIN_NAME'"
    13                    },
    14                    "name": "'$OS_USERNAME'",
    15                    "password": "'$OS_PASSWORD'"
    16                }
    17            }
    18        },
    19        "scope": {
    20            "project": {
    21                "id": "'$OS_PROJECT_ID'",
    22                "region": "'$OS_REGION_NAME'"
    23            }
    24        }
    25    }
    26}' \
    27-i "https://infra.mail.ru:35357/v3/auth/tokens"

Кроме curl вы можете использовать и другие инструменты для получения токена.

Пример ответа на запрос получения токена
1HTTP/1.1 201 Created
2
3date: Wed, 18 Jan 2023 15:02:04 GMT
4server: Apache/2.4.6 (CentOS) mod_wsgi/3.4 Python/2.7.5
5
6X-Subject-Token: XXXXXXXXXnsH_iUvos_UFSveInsHgPAKnBefJn_TghGVIBjDEDo4vLYU9xWnDrVIBp3el87i5vtrknja14Gcgc9uTgXdRyr3hm8isz8iAPp5FEq27-WLZQAwfhCfGB4sNdlpAjWYZrNYmUbglgqzoTqqwQXXXXXXX
7
8vary: X-Auth-Token
9x-openstack-request-id: req-7de8bc92-0000-0000-0000-906e6e63f956
10content-length: 322
11content-type: application/json
12set-cookie: PROXYSRV_ADMIN=acadfd0285XXXXXX|XXXXX|XXXXX; path=/; Secure
13connection: close
14
15{"token": {"issued_at": "2023-01-18T15:02:04.000000Z", "audit_ids": ["XXXX-iu5TeiUOU66VNO_-g"], "methods": ["password"], "expires_at": "2023-01-18T16:02:04.000000Z", "user": {"password_expires_at": null, "domain": {"id": "users", "name": "users"}, "id": "00000000000000XXX", "name": "example@example.ex"}}}

Для выполнения дальнейших HTTP-запросов через REST API на платформе VK Cloud используйте значение параметра X-Subject-Token.

Сгенерированный токен действителен в течение одного часа.

Пример использования токена

Задача: получить список сетей через REST API (сервис Neutron).

  1. В личном кабинете посмотрите эндпоинт, по которому выполняется запрос к сервису Neutron. В данном примере это https://infra.mail.ru:9696.

  2. Сгенерируйте токен и скопируйте значение параметра X-Subject-Token.

  3. Выполните команду с помощью утилиты curl:

    curl https://infra.mail.ru:9696/v2.0/networks -H "Accept: application/json" -H "X-Auth-Token: <токен, сгенерированный на предыдущем шаге>"
    Пример результата
    1{
    2    "networks": [
    3        {
    4            "ipv6_address_scope": null,
    5            "dns_domain": null,
    6            "revision_number": 6,
    7            "port_security_enabled": true,
    8            "id": "0e4d7c1e-ba20-0000-0000-7623648487a6",
    9            "router:external": false,
    10            "availability_zone_hints": [],
    11            "availability_zones": [
    12                "nova"
    13            ],
    14            "ipv4_address_scope": null,
    15            "shared": false,
    16            "project_id": "b5b7ffd4ef0547e5b222f44500000000",
    17            "status": "ACTIVE",
    18            "subnets": [
    19                "5ab0164b-2528-0000-0000-b2a8d5e62661"
    20            ],
    21            "private_dns_domain": "mcs.local.",
    22            "description": "",
    23            "tags": [],
    24            "updated_at": "2022-11-22T07:24:53Z",
    25            "name": "demoNet2",
    26            "admin_state_up": true,
    27            "tenant_id": "b5b7ffd4ef0547e5b222f44500000000",
    28            "created_at": "2022-11-22T07:24:51Z",
    29            "mtu": 1500,
    30            "sdn": "neutron"
    31        },
    32    ]
    33}