Настройка аутентификации Terraform-провайдера Yandex Cloud
Для аутентификации и управления инфраструктурой Yandex Cloud вы можете использовать Terraform от имени:
- сервисного аккаунта с помощью IAM-токена или авторизованного ключа;
- пользовательского аккаунта:
Аутентификация от имени сервисного аккаунта с помощью IAM-токена
Процесс аутентификации строится на получении временного IAM-токена с помощью Yandex CLI и передаче его в Terraform. Это делает конфигурацию Terraform универсальной и безопасной, так как IAM-токен не сохраняется в файлах конфигурации, а в коде описана только логика создания ресурсов, без привязки к конкретному облаку или каталогу.
Использование сервисного аккаунта с помощью имперсонации является рекомендованным и наиболее безопасным способом аутентификации.
При создании IAM-токена используйте имперсонацию для созданного сервисного аккаунта, указав его идентификатор в параметре --impersonate-service-account-id. В результате Terraform будет от имени сервисного аккаунта управлять ресурсами в каталоге и использовать IAM-токен сервисного аккаунта.
Примечание
Для использования имперсонации пользователю должна быть назначена роль iam.serviceAccounts.tokenCreator на соответствующий сервисный аккаунт.
Для аутентификации от имени сервисного аккаунта:
-
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите.
-
В Yandex Cloud CLI создайте новый профиль или активируйте созданный ранее.
-
Аутентифицируйтесь от имени аккаунта на Яндексе, федеративного или локального пользователя.
-
Если у вас еще нет сервисного аккаунта, создайте его.
-
Назначьте сервисному аккаунту роли, необходимые для управления ресурсами Yandex Cloud.
-
Запишите аутентификационные данные в переменные окружения, используя имперсонацию:
-
Bash
export YC_TOKEN=$(yc iam create-token --impersonate-service-account-id <идентификатор_сервисного_аккаунта>) export YC_CLOUD_ID=$(yc config get cloud-id) export YC_FOLDER_ID=$(yc config get folder-id) -
PowerShell
$Env:YC_TOKEN=$(yc iam create-token --impersonate-service-account-id <идентификатор_сервисного_аккаунта>) $Env:YC_CLOUD_ID=$(yc config get cloud-id) $Env:YC_FOLDER_ID=$(yc config get folder-id)
Где
<идентификатор_сервисного_аккаунта>— идентификатор сервисного аккаунта. -
В результате в переменных окружения сохранятся IAM-токен сервисного аккаунта, а также идентификатор облака и идентификатор каталога.
Примечание
При каждой операции аутентификация будет происходить с помощью этого IAM-токена, пока не истечет время его жизни (не более 12 часов). После этого снова потребуется пройти аутентификацию. Для автоматического перевыпуска IAM-токена можно использовать скрипт или другие способы автоматизации.
Чтобы продлить срок, в течение которого не нужно аутентифицироваться в браузере, используйте refresh-токены, позволяющие перевыпускать IAM-токены без перехода в браузер. Для этого разрешите использовать refresh-токены на уровне организации и инициализируйте DPoP-защиту в CLI.
Настройки провайдера в конфигурационном файле Terraform без указания чувствительных параметров указываются следующим образом:
provider "yandex" {
# Параметры cloud_id, folder_id и token не указываются, так как
# провайдер автоматически подхватит их из переменных окружения
zone = "<зона_доступности>"
}
Где zone — зона доступности, в которой по умолчанию будут создаваться все облачные ресурсы.
С такой конфигурацией используйте Terraform без дополнительных флагов, так как провайдер автоматически подхватит их из переменных окружения.
Аутентификация от имени сервисного аккаунта с помощью авторизованного ключа
Позволяет постоянно аутентифицироваться с помощью однажды созданного авторизованного ключа. Использование долгоживущего ключа менее безопасно, чем использование имперсонации и IAM-токена.
Для аутентификации от имени сервисного аккаунта с помощью авторизованного ключа:
-
Если у вас еще нет сервисного аккаунта, создайте его.
-
Назначьте сервисному аккаунту роли, необходимые для управления ресурсами Yandex Cloud.
-
Создайте авторизованный ключ для сервисного аккаунта и сохраните его в файл
key.json. -
Запишите чувствительные данные: путь к файлу авторизационного ключа, идентификатор облака и каталога — в переменные окружения:
BashPowerShellexport YC_SERVICE_ACCOUNT_KEY_FILE="<путь_к_файлу_ключа>" export YC_CLOUD_ID="<идентификатор_облака>" export YC_FOLDER_ID="<идентификатор_каталога>"$Env:YC_SERVICE_ACCOUNT_KEY_FILE="<путь_к_файлу_ключа>" $Env:YC_CLOUD_ID="<идентификатор_облака>" $Env:YC_FOLDER_ID="<идентификатор_каталога>"Где:
YC_SERVICE_ACCOUNT_KEY_FILE— путь к файлуkey.jsonс авторизированным ключом.YC_CLOUD_ID— идентификатор облака.YC_FOLDER_ID— идентификатор каталога.
Примечание
При запуске команд plan или apply можно передать значения напрямую в аргументах командной строки, не указывая их в конфигурации:
terraform apply -var="cloud_id=<идентификатор_облака>" -var="folder_id=<идентификатор_каталога>"
Настройки провайдера в конфигурационном файле Terraform без указания чувствительных параметров указываются следующим образом:
provider "yandex" {
# Параметры cloud_id, folder_id и token не указываются, так как
# провайдер автоматически подхватит их из переменных окружения
zone = "<зона_доступности>"
}
Где zone — зона доступности, в которой по умолчанию будут создаваться все облачные ресурсы.
С такой конфигурацией используйте Terraform без дополнительных флагов, так как провайдер автоматически подхватит их из переменных окружения.
Аутентификация от имени пользовательского аккаунта
Процесс аутентификации строится на получении временного IAM-токена с помощью Yandex CLI и передаче его в Terraform. Это делает конфигурацию Terraform универсальной и безопасной, так как IAM-токен не сохраняется в файлах конфигурации, а в коде описана только логика создания ресурсов, без привязки к конкретному облаку или каталогу.
Важно
Управление ресурсами от имени пользовательского аккаунта является менее безопасным, чем использование сервисного аккаунта.
Для аутентификации от имени пользовательского аккаунта:
-
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите.
-
В Yandex Cloud CLI создайте новый профиль или активируйте созданный ранее.
-
Аутентифицируйтесь в зависимости от типа используемого аккаунта: аккаунта на Яндексе, федеративного или локального пользователя.
-
Запишите чувствительные данные профиля: IAM-токен, идентификатор облака и каталога в переменные окружения:
BashPowerShellexport YC_TOKEN=$(yc iam create-token) export YC_CLOUD_ID=$(yc config get cloud-id) export YC_FOLDER_ID=$(yc config get folder-id)$Env:YC_TOKEN=$(yc iam create-token) $Env:YC_CLOUD_ID=$(yc config get cloud-id) $Env:YC_FOLDER_ID=$(yc config get folder-id)Где:
yc iam create-token— получение IAM-токена для текущей сессии.
yc config get cloud-id— получение идентификатора облака из текущего профиля CLI.
yc config get folder-id— получение идентификатора каталога из текущего профиля CLI.В результате в переменных окружения сохранятся IAM-токен, а также идентификатор облака и идентификатор каталога.
Примечание
При каждой операции аутентификация будет происходить с помощью этого IAM-токена, пока не истечет время его жизни (не более 12 часов). После этого снова потребуется пройти аутентификацию. Для автоматического перевыпуска IAM-токена можно использовать скрипт или другие способы автоматизации.
Чтобы продлить срок, в течение которого не нужно аутентифицироваться в браузере, используйте refresh-токены, позволяющие перевыпускать IAM-токены без перехода в браузер. Для этого разрешите использовать refresh-токены на уровне организации и инициализируйте DPoP-защиту в CLI.
Настройки провайдера в конфигурационном файле Terraform без указания чувствительных параметров указываются следующим образом:
provider "yandex" {
# Параметры cloud_id, folder_id и token не указываются, так как
# провайдер автоматически подхватит их из переменных окружения
zone = "<зона_доступности>"
}
Где zone — зона доступности, в которой по умолчанию будут создаваться все облачные ресурсы.
С такой конфигурацией используйте Terraform без дополнительных флагов, так как провайдер автоматически подхватит их из переменных окружения.