Работа с Yandex Cloud изнутри виртуальной машины
В этом разделе описано, как работать с Yandex Cloud изнутри ВМ через API или CLI.
Для автоматизации работы с Yandex Cloud изнутри ВМ рекомендуется использовать сервисные аккаунты. Это безопаснее — вам не надо сохранять свой OAuth-токен на ВМ и вы можете ограничить права доступа для сервисного аккаунта.
Для сервисного аккаунта сделана упрощенная аутентификация через API и CLI изнутри ВМ. Чтобы пройти аутентификацию:
- Если у вас еще нет сервисного аккаунта, создайте его и настройте права доступа для него.
- Привяжите сервисный аккаунт к ВМ.
- Аутентифицируйтесь изнутри ВМ.
Привяжите сервисный аккаунт
Привяжите сервисный аккаунт к существующей или к создаваемой ВМ. Привязать можно только один сервисный аккаунт.
Чтобы привязать сервисный аккаунт к ВМ, необходимо иметь разрешение на использование этого аккаунта. Это разрешение входит в роли iam.serviceAccounts.user, editor и выше.
К существующей ВМ
- В консоли управления
выберите каталог, которому принадлежит ВМ. - В списке сервисов выберите Compute Cloud.
- Нажмите на имя нужной ВМ.
- В правом верхнем углу страницы нажмите
Изменить ВМ. - В блоке Дополнительные настройки выберите один из существующих сервисных аккаунтов или создайте новый.
- Нажмите Сохранить изменения.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Обновите параметры ВМ, указав сервисный аккаунт с помощью опции --service-account-name
или --service-account-id
:
yc compute instance update my-instance --service-account-name test
Воспользуйтесь методом REST API update для ресурса Instance или вызовом gRPC API InstanceService/Update. В запросе укажите идентификатор сервисного аккаунта.
К создаваемой ВМ
В консоли управления вы можете привязать к виртуальной машине сервисный аккаунт, расположенный в том же каталоге, в котором создается ВМ. Если сервисный аккаунт расположен в другом каталоге, воспользуйтесь CLI или API.
Чтобы привязать сервисный аккаунт к ВМ, выберите его в блоке Дополнительные настройки в поле Сервисный аккаунт при создании ВМ. Вы можете выбрать один из существующих сервисных аккаунтов или создать новый.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле 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_ed25519.pub \
--service-account-name my-robot
Воспользуйтесь методом REST API create для ресурса Instance или вызовом gRPC API InstanceService/Create. В запросе укажите идентификатор сервисного аккаунта.
Аутентификация изнутри ВМ
Чтобы аутентифицироваться изнутри ВМ от имени привязанного сервисного аккаунта:
-
Подключитесь к ВМ по SSH.
-
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
-
Создайте новый профиль:
yc config profile create my-robot-profile
-
Настройте профиль для запуска команд.
Для некоторых команд требуется указание уникального идентификатора облака и каталога. Вы можете указать информацию о них в профиле или запускать такие команды с соответствующим флагом.
-
Укажите облако в профиле:
yc config set cloud-id <идентификатор_облака>
Или запускайте команды с параметром
--cloud-id
. -
Укажите каталог в профиле:
yc config set folder-id <идентификатор_каталога>
Или запускайте команды с параметром
--folder-id
.
Все операции в этом профиле будут выполняться от имени привязанного сервисного аккаунта. Вы можете изменить параметры профиля или сменить его.
Вы также можете получить Yandex Identity and Access Management-токен, например, чтобы аутентифицироваться в API:
yc iam create-token
Время жизни Identity and Access Management-токена в этом случае будет меньше чем 12 часов. Запрашивайте Identity and Access Management-токен чаще, например, каждый час. Чтобы узнать оставшееся время жизни токена, воспользуйтесь инструкцией для API.
-
-
Подключитесь к ВМ по SSH.
-
Получите Identity and Access Management-токен из метаданных в формате Google Compute Engine:
curl \ --header Metadata-Flavor:Google http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token
Результат:
{"access_token":"CggVAgAAA...","expires_in":39944,"token_type":"Bearer"}
Identity and Access Management-токен будет указан в ответе в поле
access_token
. Оставшееся время жизни Identity and Access Management-токена указано в полеexpires_in
. -
Полученный IAM-токен указывайте при обращении к ресурсам Yandex Cloud через API. Передайте IAM-токен в заголовке
Authorization
в следующем формате:Authorization: Bearer <IAM-токен>
Учитывайте время жизни Identity and Access Management-токена или запрашивайте токен чаще, например, каждый час.