Метаданные виртуальной машины

Сведения о виртуальных машинах хранятся на сервере метаданных. Вы можете запрашивать метаданные изнутри виртуальной машины или снаружи с помощью API или CLI.

Метаданные используются программами, которые запускаются при старте виртуальной машины. Например, чтобы задать список пользователей или указать открытый ключ SSH для подключения к виртуальной машине.

Изнутри виртуальной машины сервер метаданных доступен по IP-адресу 169.254.169.254.

На данный момент сервер метаданных Яндекс.Облака возвращает метаданные в форматах Google Compute Engine и Amazon EC2.

Формат метаданных при создании виртуальной машины

Метаданные задаются в поле metadata, в виде пар ключ:значение. Значением может быть только строка. Если необходимо передать несколько строк, разделите их символом переноса строки \n.

В CLI значения метаданных можно передать в виде файла: --metadata-from-file key=path/to/file. Таким образом удобно передать значение из нескольких строк.

Вы можете указывать любые ключи. То, какие ключи необходимо указывать зависит от того, какая программа будет их обрабатывать на вашей виртуальной машине. Например, в образах Linux, предоставляемых Яндекс.Облаком, используется программа cloud-init.

Важная информация

Метаданные, в том числе пользовательские, хранятся в незашифрованном виде. Каждый, кто имеет возможность подключиться к виртуальной машине, может получить эти данные. Если вы размещаете в метаданных конфиденциальную информацию, примите меры для ее защиты — например, зашифруйте.

Программы, обрабатывающие метаданные в образах Яндекс.Облака

В публичных образах Linux для настройки виртуальной машины по умолчанию используется программа cloud-init.

В публичных образах Windows — Cloudbase-Init.

Использование cloud-init

Программа cloud-init обрабатывает метаданные, которые были переданы в ключах user-data и ssh-keys.

user-data

Все пользовательские метаданные для cloud-init необходимо передать в ключе user-data. Существует несколько форматов метаданных, которые поддерживает cloud-init, например cloud-config.

Вы можете использовать user-data, чтобы передать SSH-ключи на виртуальную машину и указать, какому пользователю принадлежит каждый ключ. Для этого передайте их в элементе users/ssh_authorized_keys. Подробнее читайте в документации cloud-init, в разделе Users and Groups.

Пример метаданных в формате cloud-config:

#cloud-config
users:
  - name: demo
    groups: sudo
    shell: /bin/bash
    sudo: ['ALL=(ALL) NOPASSWD:ALL']
    ssh-authorized-keys:
      - ssh-rsa AAAAB3Nza......OjbSMRX user@example.com
      - ssh-rsa AAAAB3Nza......Pu00jRN user@desktop

ssh-keys

Чтобы передать SSH-ключи на виртуальную машину, используйте поле ssh-keys. При этом cloud-init обработает только первый ключ из списка. Ключ будет присвоен пользователю, который задан в конфигурации cloud-init по умолчанию. В разных образах это разные пользователи.

Если вы не знаете, какой пользователь задан по умолчанию, рекомендуем передавать ключи SSH в поле user-data.