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

Сведения о виртуальных машинах доступны в сервисе метаданных. Вы можете передавать любые ключи и значения в метаданных, а затем запрашивать метаданные изнутри виртуальной машины или снаружи.

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

Как передать метаданные

Вы можете передать метаданные при создании и изменении виртуальной машины. Данные для подключения к виртуальной машине нельзя изменить и необходимо передать при создании:

В CLI метаданные можно указать в любом из трех параметров :

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

  • --metadata — список пар ключ=значение, разделенных запятой, например --metadata foo1=bar,foo2=baz.

    Если в значении несколько строк, используйте \n в качестве разделителя: --metadata user-data="#ps1\nnet user Administrator Passw0rd"

  • --ssh-key — SSH-ключ. Только для виртуальных машин Linux.

    Compute Cloud создаст пользователя yc-user и добавит указанный SSH-ключ в список авторизованных ключей. После создания виртуальной машины вы сможете подключиться к ней по SSH с помощью этого ключа.

Вы можете комбинировать эти параметры, например:

$ yc compute instance create \
--name my-instance \
--metadata-from-file user-data=metadata.yaml \
--metadata serial-port-enable=1
...

В API вы указываете метаданные в свойстве metadata в виде JSON-объекта, например так:

"metadata": {
  "ssh-keys": "ssh-rsa AAAAB3Nza... user@example.com",
  "serial-port-enable": "1"
}

Для переноса строки в значениях используйте символ \n.

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

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

Ключи, обрабатываемые в публичных образах

Список ключей, которые обрабатываются в публичных образах Яндекс.Облака, зависит от операционной системы.

  • serial-port-enable — флаг, включающий доступ к серийной консоли. 1 — включить, 0 (по умолчанию) — выключить.

  • user-data — строка с пользовательскими метаданными, которые будут обработаны агентом cloud-init, запущенным на виртуальной машине.

    Cloud-init поддерживает разные форматы передачи метаданных, например cloud-config. В этом формате вы можете передать SSH-ключи и указать, какому пользователю принадлежит каждый ключ. Для этого укажите их в элементе users/ssh_authorized_keys:

    #cloud-config
    users:
      - name: <имя пользователя>
        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
    

    Чтобы передать эти данные в запросе, замените переносы строки символом \n:

    "metadata": {
      "user-data": "#cloud-config\nusers:\n  - name: user\n    groups: sudo\n    shell: /bin/bash\n    sudo: ['ALL=(ALL) NOPASSWD:ALL']\n    ssh-authorized-keys:\n      - ssh-rsa AAAAB3Nza......OjbSMRX user@example.com\n      - ssh-rsa AAAAB3Nza......Pu00jRN user@desktop"
    }
    
  • ssh-keys — Ключ для доставки SSH-ключа на виртуальные машины Linux. Ключ указывается в формате <любое имя>:<содержимое SSH-ключа>, например user:ssh-rsa AAAAB3Nza... user@example.com. Если указать несколько ключей, будет использован только первый из них.

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

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

    Если вы не знаете, какой пользователь задан по умолчанию, найдите в выводе последовательного порта строку, содержащую слова Authorized keys from. В ней будет указано имя пользователя, которому присвоены авторизованные ключи.

    Если такой строки не найдено, но есть строка no authorized ssh keys fingerprints found for user, значит вы неправильно передали SSH-ключ. Проверьте ещё раз формат или попробуйте передать ключи SSH в поле user-data.

user-data — строка с пользовательскими метаданными, которые будут обработаны агентом Cloudbase-Init. Этот агент поддерживает различные форматы данных, например PowerShell-скрипт, задающий пароль администратора:

"metadata": {
  "user-data": "#ps1\nnet user Administrator Passw0rd"
}