Управление авторизованными ключами
Авторизованный ключ — это ключ с неограниченным сроком жизни, использующийся для получения IAM-токена сервисного аккаунта: закрытая часть авторизованного ключа используется для формирования JSON Web Token
Авторизованные ключи создаются для сервисных аккаунтов. Если у вас еще нет сервисного аккаунта, создайте его и назначьте ему роли.
Создать авторизованный ключ
Чтобы создать авторизованный ключ сервисного аккаунта:
- В консоли управления
выберите каталог, которому принадлежит сервисный аккаунт. - В списке сервисов выберите Identity and Access Management.
- На панели слева выберите
Сервисные аккаунты. - В открывшемся списке выберите сервисный аккаунт, для которого вы хотите создать авторизованный ключ.
- На панели сверху нажмите кнопку
Создать новый ключ и выберите пункт Создать авторизованный ключ. - Выберите алгоритм шифрования, при необходимости задайте описание ключа и нажмите кнопку Создать. В открывшемся окне:
-
Скопируйте открытую и закрытую части ключа и надежно сохраните. Закрытая часть ключа не сохраняется в Yandex Cloud и получить ее повторно будет невозможно. Открытую часть ключа нельзя будет посмотреть в консоли управления.
Также вы можете скачать ключи одним файлом в формате JSON. Для этого нажмите кнопку Скачать файл с ключами.
-
Нажмите кнопку Закрыть.
-
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
-
Посмотрите описание команды создания авторизованного ключа:
yc iam key create --help -
Выберите сервисный аккаунт, например
my-robot:yc iam service-account listРезультат:
+----------------------+------------------+-------------------------------+ | ID | NAME | DESCRIPTION | +----------------------+------------------+-------------------------------+ | aje6o61dvog2******** | my-robot | | | aje9sda1ufvq******** | account_name | account_description | +----------------------+------------------+-------------------------------+ -
Создайте авторизованный ключ для сервисного аккаунта
my-robot:yc iam key create \ --service-account-name my-robot \ -o my-robot-key.jsonВ случае успеха в файл
my-robot-key.jsonбудет сохранен созданный авторизованный ключ.Пример файла с ключом:
{ "id": "lfkoe35hsk58********", "service_account_id": "ajepg0mjt06s********", "created_at": "2019-03-20T10:04:56Z", "key_algorithm": "RSA_2048", "public_key": "-----BEGIN PUBLIC KEY-----\n...\n-----END PUBLIC KEY-----\n", "private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n" }Скопируйте открытую и закрытую части ключа (значения полей
public_keyиprivate_key) и надежно сохраните. Закрытая часть ключа не сохраняется в Yandex Cloud и получить ее повторно будет невозможно.
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
-
Опишите в конфигурационном файле параметры ресурсов, которые необходимо создать:
resource "yandex_iam_service_account_key" "sa-auth-key" { service_account_id = "<идентификатор_сервисного_аккаунта>" description = "<описание_ключа>" key_algorithm = "<алгоритм_генерации_ключа>" pgp_key = "<pgp-ключ>" output_to_lockbox { secret_id = "<идентификатор_секрета_Lockbox>" entry_for_private_key = "<ключ_секрета>" } }Где:
service_account_id— идентификатор сервисного аккаунта. Обязательный параметр.description— описание ключа. Необязательный параметр.key_algorithm— алгоритм генерации ключа. Необязательный параметр. По умолчанию используется алгоритмRSA_2048. Допустимые значения параметра см. в документации API.pgp_key— дополнительный PGP-ключ для шифрования закрытого ключа. Необязательный параметр. Указывается публичная часть ключа в кодировке base64, либо в видеkeybase:keybaseusername.output_to_lockbox— описание секрета Yandex Lockbox, в который будет сохранено секретное значение ключа, во избежание его возможной утечки через файл состоянияterraform.tfstate. Необязательный параметр. Вложенные параметры:secret_id— идентификатор секрета Yandex Lockbox, в который будет сохранена закрытая часть авторизованного ключа. Секрет должен быть пользовательского типа.entry_for_private_key— ключ секрета, который будет присвоен сохраняемому значению закрытой части авторизованного ключа.
Более подробную информацию о ресурсах, которые вы можете создать с помощью Terraform, см. в документации провайдера.
-
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в папку, где вы создали конфигурационный файл.
-
Выполните проверку с помощью команды:
terraform plan
Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.
-
-
Разверните облачные ресурсы.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply -
Подтвердите создание ресурсов: введите в терминал слово
yesи нажмите Enter.
После этого в указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
, а также с помощью команды CLI:yc iam key list --service-account-id <идентификатор_сервисного_аккаунта> -
Воспользуйтесь методом REST API create для ресурса Key или вызовом gRPC API KeyService/Create.
Пример запроса с помощью cURL для метода REST API create:
curl \
--request POST \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer <IAM-токен>" \
--data '{"serviceAccountId": "<идентификатор_сервисного_аккаунта>"}' \
https://iam.api.cloud.yandex.net/iam/v1/keys
Где:
<IAM-токен>— IAM-токен пользователя, у которого есть права на создание ключей для указанного сервисного аккаунта.<идентификатор_сервисного_аккаунта>— идентификатор сервисного аккаунта, для которого создаются ключи.
В случае успеха в ответе сервера будут указаны открытая (publicKey) и закрытая (privateKey) части авторизованного ключа. Сохраните эти данные. Повторно получить значение закрытого ключа будет невозможно.
Пример ответа сервера:
{
"key": {
"createdAt": "2018-10-30T15:55:00+00:00",
"description": "",
"id": "lfkoe35hsk58********",
"keyAlgorithm": "RSA_2048",
"publicKey": "-----BEGIN PUBLIC KEY-----\n...\n-----END PUBLIC KEY-----\n",
"serviceAccountId": "ajepg0mjt06s********"
},
"privateKey": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n"
}
Удалить авторизованный ключ
Чтобы удалить авторизованный ключ сервисного аккаунта:
- В консоли управления
выберите каталог, которому принадлежит сервисный аккаунт. - В списке сервисов выберите Identity and Access Management.
- На панели слева выберите
Сервисные аккаунты и выберите нужный сервисный аккаунт. - В блоке Авторизованные ключи в строке с ключом, который нужно удалить, нажмите значок
и выберите Удалить. - В открывшемся окне подтвердите удаление.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
-
Получите список авторизованных ключей для определенного сервисного аккаунта, указав его имя:
yc iam key list \ --service-account-name <имя_сервисного_аккаунта>Результат:
+----------------------+-------------------------------------+-----------+---------------------+ | ID | SUBJECT | ALGORITHM | CREATED AT | +----------------------+-------------------------------------+-----------+---------------------+ | ajeave7oktut******** | serviceAccount:ajeedllrkjma******** | RSA_2048 | 2022-03-13 20:14:22 | | ajeb794igb80******** | serviceAccount:ajeedllrkjma******** | RSA_2048 | 2022-03-13 20:06:13 | +----------------------+-------------------------------------+-----------+---------------------+ -
Удалите авторизованный ключ, указав его идентификатор:
yc iam key delete <идентификатор_ключа>
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
-
Откройте файл конфигурации Terraform и удалите секцию с описанием авторизованного ключа.
Пример описания авторизованного ключа в конфигурации Terraform:
resource "yandex_iam_service_account_key" "sa-auth-key" { service_account_id = "<идентификатор_сервисного_аккаунта>" description = "<описание_ключа>" key_algorithm = "<алгоритм_генерации_ключа>" pgp_key = "<pgp-ключ>" output_to_lockbox { secret_id = "<идентификатор_секрета_Lockbox>" entry_for_private_key = "<ключ_секрета>" } }Более подробную информацию о ресурсах, которые вы можете создать с помощью Terraform, см. в документации провайдера.
-
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в папку, где вы создали конфигурационный файл.
-
Выполните проверку с помощью команды:
terraform plan
Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.
-
-
Разверните облачные ресурсы.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply -
Подтвердите создание или удаление ресурсов: введите в терминал слово
yesи нажмите Enter.
После этого в указанном каталоге будут созданы или удалены все требуемые ресурсы. Проверить появление ресурсов и их настройки или удаление ресурсов можно в консоли управления
, а также с помощью команды CLI:yc iam key list --service-account-id <идентификатор_сервисного_аккаунта> -
Воспользуйтесь методом REST API delete для ресурса Key или вызовом gRPC API KeyService/Delete.