Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Compute Cloud
    • Все инструкции
      • Настроить параметры сервиса метаданных
      • Получить метаданные ВМ
      • Получить идентификационный документ ВМ
      • Изменить метаданные ВМ
      • Создать ВМ с пользовательским скриптом конфигурации
      • Создать ВМ с метаданными из переменных окружения
      • Создать ВМ с доступом к секрету Yandex Lockbox
    • Посмотреть операции с ресурсами сервиса
  • Yandex Container Solution
  • Управление доступом
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • История изменений
  • Обучающие курсы
  1. Пошаговые инструкции
  2. Создание виртуальной машины
  3. Создать ВМ с доступом к секрету Yandex Lockbox

Создать ВМ с доступом к секрету Yandex Lockbox

Статья создана
Yandex Cloud
Улучшена
Обновлена 29 апреля 2025 г.

Через сервис метаданных можно передать в виртуальную машину идентификатор секрета Yandex Lockbox, чтобы затем изнутри ВМ получить значение этого секрета с помощью IAM-токена привязанного к ВМ сервисного аккаунта.

Секреты Yandex Lockbox, как и другие пользовательские данные, передаются в ключе user-data. Метаданные в каталог user-data можно передавать как при создании ВМ, так и при ее изменении.

Примечание

Чтобы создавать, изменять и редактировать ВМ, необходима минимальная роль compute.editor на каталоге. Для создания ВМ с лицензируемым образом дополнительно потребуется роль license-manager.viewer.

Чтобы передать секрет Yandex Lockbox на виртуальную машину через метаданные:

  1. Создайте секрет Yandex Lockbox.

  2. Создайте сервисный аккаунт и назначьте ему роль lockbox.payloadViewer.

  3. Создайте файл metadata.yaml и поместите в него следующую конфигурацию метаданных создаваемой ВМ:

    metadata.yaml

    #cloud-config
    
    datasource:
      Ec2:
        strict_id: false
      secrets:
        my_secret: <идентификатор_секрета>
    ssh_pwauth: no
    users:
      - name: <имя_пользователя>
        sudo: ALL=(ALL) NOPASSWD:ALL
        shell: /bin/bash
        ssh-authorized-keys:
          - "<публичный_SSH-ключ_пользователя>"
    packages:
      - jq
      - yq
    

    Где:

    • my_secret — идентификатор созданного секрета.

      Важно

      Передавайте в каталог user-data только идентификаторы ваших секретов, а не их значения.

    • name — имя локального пользователя, который будет создан на ВМ. Например: admin.

    • ssh-authorized-keys — публичный SSH-ключ создаваемого пользователя ВМ.

  4. Создайте виртуальную машину:

    Консоль управления
    CLI
    Terraform
    API
    1. В консоли управления выберите каталог, в котором находятся секрет и сервисный аккаунт.

    2. В списке сервисов выберите Compute Cloud.

    3. На панели слева выберите Виртуальные машины.

    4. Нажмите кнопку Создать виртуальную машину.

    5. В блоке Образ загрузочного диска выберите образ Ubuntu 24.04 LTS.

    6. В блоке Расположение выберите зону доступности, в которой будет находиться ВМ.

    7. В блоке Сетевые настройки в поле Подсеть укажите идентификатор подсети в зоне доступности создаваемой ВМ или выберите облачную сеть из списка.

    8. В блоке Доступ выберите вариант SSH-ключ и укажите данные для доступа к ВМ:

      • В поле Логин введите имя пользователя ВМ.
      • В поле SSH-ключ выберите SSH-ключ, сохраненный в вашем профиле пользователя организации.

        Если в вашем профиле нет сохраненных SSH-ключей или вы хотите добавить новый ключ:

        • Нажмите кнопку Добавить ключ.
        • Задайте имя SSH-ключа.
        • Загрузите или вставьте содержимое открытого SSH-ключа. Пару SSH-ключей для подключения к ВМ по SSH необходимо создать самостоятельно.
        • Нажмите кнопку Добавить.

        SSH-ключ будет добавлен в ваш профиль пользователя организации.

        Если в организации отключена возможность добавления пользователями SSH-ключей в свои профили, добавленный открытый SSH-ключ будет сохранен только в профиле пользователя создаваемой виртуальной машины.

    9. В блоке Общая информация задайте имя ВМ:

      • длина — от 2 до 63 символов;
      • может содержать строчные буквы латинского алфавита, цифры и дефисы;
      • первый символ — буква, последний — не дефис.
    10. В блоке Дополнительно выберите созданный ранее сервисный аккаунт.

    11. В блоке Метаданные:

      • В поле Ключ укажите user-data.
      • В поле Значение вставьте содержимое созданного ранее файла конфигурации metadata.yaml.
    12. Нажмите кнопку Создать ВМ.

    Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.

    По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.

    Выполните команду:

    yc compute instance create \
      --name my-vm \
      --hostname <имя_хоста> \
      --zone <зона_доступности> \
      --create-boot-disk image-folder-id=standard-images,image-family=ubuntu-2404-lts-oslogin \
      --network-interface subnet-name=<имя_подсети>,ipv4-address=auto,nat-ip-version=ipv4 \
      --metadata-from-file user-data="<путь_к_файлу_конфигурации>" \
      --service-account-id <идентификатор_сервисного_аккаунта>
    

    Где:

    • --name — имя создаваемой ВМ. Например: my-vm.

    • --hostname — имя хоста создаваемой ВМ. Необязательный параметр. Если параметр не задан, в качестве имени хоста будет использовано значение идентификатора ВМ.

    • --zone — зона доступности, в которой будет находиться создаваемая ВМ.

    • --network-interface — настройки сетевого интерфейса создаваемой ВМ:

      • subnet-name — имя подсети, расположенной в зоне доступности, указанной в параметре --zone.
    • --metadata-from-file — ключ user-data, значением которого является путь к созданному ранее файлу с конфигурацией cloud-config в формате YAML. Например: --metadata-from-file user-data="/home/user/metadata.yaml".

    • service-account-id — идентификатор созданного ранее сервисного аккаунта с назначенной ролью lockbox.payloadViewer.

    Результат
    done (31s)
    id: epde2t9aovjm********
    folder_id: b1gt6g8ht345********
    created_at: "2025-02-04T18:18:58Z"
    name: my-vm
    zone_id: ru-central1-b
    platform_id: standard-v2
    resources:
      memory: "2147483648"
      cores: "2"
      core_fraction: "100"
    status: RUNNING
    metadata_options:
      gce_http_endpoint: ENABLED
      aws_v1_http_endpoint: ENABLED
      gce_http_token: ENABLED
      aws_v1_http_token: DISABLED
    boot_disk:
      mode: READ_WRITE
      device_name: epd27gmf2vu2********
      auto_delete: true
      disk_id: epd27gmf2vu2********
    network_interfaces:
      - index: "0"
        mac_address: d0:0d:e1:75:2a:c7
        subnet_id: e2lqsms4cdl3********
        primary_v4_address:
          address: 192.168.15.25
          one_to_one_nat:
            address: 51.***.***.93
            ip_version: IPV4
    serial_port_settings:
      ssh_authorization: OS_LOGIN
    gpu_settings: {}
    fqdn: my-vm.ru-central1.internal
    scheduling_policy: {}
    service_account_id: ajegtlf2q28a********
    network_settings:
      type: STANDARD
    placement_policy: {}
    hardware_generation:
      legacy_features:
        pci_topology: PCI_TOPOLOGY_V1
    

    Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.

    1. Опишите в конфигурационном файле параметры ресурсов, которые необходимо создать:

      # Создание загрузочного диска для ВМ
      
      resource "yandex_compute_disk" "boot-disk" {
        type     = "network-ssd"
        zone     = "<зона_доступности>"
        size     = "20"
        image_id = "fd8bpal18cm4kprpjc2m"
      }
      
      # Создание ВМ
      
      resource "yandex_compute_instance" "my-vm" {
        name               = "<имя_ВМ>"
        platform_id        = "standard-v2"
        zone               = "<зона_доступности>"
        service_account_id = "<идентификатор_сервисного_аккаунта>"
      
        resources {
          cores  = "2"
          memory = "4"
        }
      
        boot_disk {
          disk_id = yandex_compute_disk.boot-disk.id
        }
      
        network_interface {
          subnet_id          = "<идентификатор_подсети>"
          nat                = true
          security_group_ids = ["<идентификатор_группы_безопасности>"]
        }
      
        metadata = {
          user-data = "${file("<путь_к_файлу_конфигурации>")}"
        }
      }
      

      Где:

      • zone — зона доступности, в которой будут находиться ВМ и диск.
      • service_account_id — идентификатор созданного ранее сервисного аккаунта с назначенной ролью lockbox.payloadViewer.
      • name — имя создаваемой ВМ. Например: my-vm.
      • subnet_id — идентификатор подсети, расположенной в зоне доступности, указанной в параметре zone.
      • security_group_ids — идентификатор группы безопасности.
      • user-data — путь к созданному ранее файлу конфигурации metadata.yaml.

      Подробнее о создаваемых ресурсах см. в документации провайдера.

    2. Создайте ресурсы:

      1. В терминале перейдите в папку, где вы отредактировали конфигурационный файл.

      2. Проверьте корректность конфигурационного файла с помощью команды:

        terraform validate
        

        Если конфигурация является корректной, появится сообщение:

        Success! The configuration is valid.
        
      3. Выполните команду:

        terraform plan
        

        В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.

      4. Примените изменения конфигурации:

        terraform apply
        
      5. Подтвердите изменения: введите в терминале слово yes и нажмите Enter.

      После этого в указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления.

    Воспользуйтесь методом REST API create для ресурса Instance или вызовом gRPC API InstanceService/Create.

  5. Подключитесь по SSH к созданной виртуальной машине и в терминале ВМ:

    1. Получите IAM-токен сервисного аккаунта, привязанного к виртуальной машине, и сохраните полученный токен в переменную YC_TOKEN. Для этого выполните запрос к каталогу computeMetadata сервиса метаданных:

      export YC_TOKEN=$(curl -sf -H Metadata-Flavor:Google 169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token | jq -r .access_token)
      
    2. Получите идентификатор секрета, переданный в каталог user-data сервиса метаданных при создании ВМ.

      export my_secret_id=$(curl -sf -H Metadata-Flavor:Google 169.254.169.254/latest/user-data | yq .datasource.secrets.my_secret | tr -d \")
      
    3. Получите и сохраните в переменную my_secret_value значение секрета, отправив запрос к API Yandex Lockbox:

      export my_secret_value=$(curl -sf -H "Authorization: Bearer $YC_TOKEN" "https://payload.lockbox.api.cloud.yandex.net/lockbox/v1/secrets/${my_secret_id}/payload" | jq -r .entries[0].textValue)
      echo $my_secret_value
      

      Результат:

      admin@my-vm:~$ echo $my_secret_value
      my value
      

Другие примеры конфигурации для ключа user-data см. в разделе Примеры.

См. такжеСм. также

  • Метаданные виртуальной машины
  • Создать виртуальную машину с метаданными из переменных окружения
  • Создать виртуальную машину с пользовательским скриптом конфигурации

Была ли статья полезна?

Предыдущая
Создать ВМ с метаданными из переменных окружения
Следующая
Создать ВМ с GPU
Проект Яндекса
© 2025 ООО «Яндекс.Облако»