Работа с Яндекс.Облаком изнутри виртуальной машины
В этом разделе описано как работать с Яндекс.Облаком изнутри виртуальной машины через API или CLI.
Для автоматизации работы с Яндекс.Облаком изнутри виртуальной машины рекомендуется использовать сервисные аккаунты. Это безопаснее — вам не надо сохранять свой OAuth-токен на виртуальной машине и вы можете ограничить права доступа для сервисного аккаунта.
Для сервисного аккаунта сделана упрощенная аутентификация через API и CLI изнутри виртуальной машины. Чтобы пройти аутентификацию:
- Если у вас еще нет сервисного аккаунта, создайте его и настройте права доступа для него.
- Привяжите сервисный аккаунт к виртуальной машине.
- Аутентифицируйтесь изнутри виртуальной машины.
Привяжите сервисный аккаунт
Привяжите сервисный аккаунт к существующей или к создаваемой виртуальной машине. Привязать можно только один сервисный аккаунт.
Чтобы привязать сервисный аккаунт к виртуальной машине, необходимо иметь разрешение на использование этого аккаунта. Это разрешение входит в роли iam.serviceAccounts.user
, editor
и выше.
К существующей виртуальной машине
Если у вас еще нет интерфейса командной строки Яндекс.Облака, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Обновите параметры виртуальной машины, указав сервисный аккаунт с помощью опции --service-account-name
или --service-account-id
:
yc compute instance update my-instance --service-account-name test
К создаваемой виртуальной машине
В консоли можно привязать сервисный аккаунт из того же каталога, где создается виртуальная машина. Если сервисный аккаунт лежит в другом каталоге, воспользуйтесь CLI или API.
Чтобы привязать сервисный аккаунт, укажите его при создании виртуальной машины. Вы можете выбрать один из существующих сервисных аккаунтов или создать новый:
Если у вас еще нет интерфейса командной строки Яндекс.Облака, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Создайте виртуальную машину, указав сервисный аккаунт с помощью опции --service-account-name
или --service-account-id
:
yc compute instance create \
--name my-instance \
--network-interface subnet-name=default,nat-ip-version=ipv4 \
--ssh-key ~/.ssh/id_rsa.pub \
--service-account-name my-robot
Аутентификация изнутри виртуальной машины
Чтобы аутентифицироваться изнутри виртуальной машины от имени привязанного сервисного аккаунта:
-
Если у вас еще нет интерфейса командной строки Яндекс.Облака, установите и инициализируйте его.
-
Создайте новый профиль:
yc config profile create my-robot-profile
-
Настройте профиль для запуска команд.
Для некоторых команд требуется указание уникального идентификатора облака и каталога. Вы можете указать информацию о них в профиле или запускать такие команды с соответствующим флагом.
-
Укажите облако в профиле:
$ yc config set cloud-id <ID облака>
Или запускайте команды с параметром
--cloud-id
. -
Укажите каталог в профиле:
$ yc config set folder-id <ID каталога>
Или запускайте команды с параметром
--folder-id
.
Все операции в этом профиле будут выполняться от имени привязанного сервисного аккаунта. Вы можете изменить параметры профиля или сменить его.
Вы также можете получить IAM-токен, например, чтобы аутентифицироваться в API:
yc iam create-token
Время жизни IAM-токена в этом случае будет меньше чем 12 часов. Запрашивайте IAM-токен чаще, например каждый час или при каждой операции. Чтобы узнать оставшееся время жизни токена, воспользуйтесь инструкцией для API.
-
-
Получите IAM-токен из метаданных в одном из форматов:
-
Google Compute Engine:
$ curl -H Metadata-Flavor:Google http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token {"access_token":"CggVAgAAA...","expires_in":39944,"token_type":"Bearer"}
IAM-токен будет указан в ответе в поле
access_token
. Оставшееся время жизни IAM-токена указано в полеexpires_in
. -
Amazon EC2:
$ curl http://169.254.169.254/latest/meta-data/iam/security-credentials/default/ { "Code" : "Success", "Expiration" : "2019-06-28T04:43:32+00:00", "Token" : "CggVAgAAA..." }
IAM-токен будет указан в ответе в поле
Token
. Время жизни IAM-токена указано в полеExpiration
.
-
-
Полученный IAM-токен указывайте при обращении к ресурсам Яндекс.Облака через API. Передайте IAM-токен в заголовке
Authorization
в следующем формате:Authorization: Bearer <IAM-TOKEN>
Учитывайте время жизни IAM-токена или запрашивайте токен чаще, например каждый час или при каждой операции.