Как внедрить переменные данные, такие как пароли, в вычислительный экземпляр при развертывании из шаблона - PullRequest
0 голосов
/ 25 сентября 2019

Мы пытаемся выяснить, как мы можем создать шаблон вычислительного движка и установить некоторую информацию, такую ​​как пароли, с помощью переменных в тот момент, когда конечный экземпляр генерируется администратором развертывания, а не в базовом образе.При развертывании чего-либо из marketplace вы можете видеть, что пароли создаются с помощью «password.py» и хранятся в виде метаданных в шаблоне виртуальных машин.Но я не могу найти код, который записывает эти данные в образ диска виртуальной машины.Может ли кто-нибудь объяснить, как этого можно достичь?

Редактировать: я обнаружил, что сценарии запуска могут читать метаданные экземпляра: https://cloud.google.com/compute/docs/storing-retrieving-metadata Так ли они поступают на рынке по принципу "нажми и разверни"скрипты типа https://console.cloud.google.com/marketplace/details/click-to-deploy-images/wordpress?Или есть еще лучший способ сделать это?

Ответы [ 2 ]

0 голосов
/ 26 сентября 2019

Вы можете использовать шаблоны Python, это даст вам больше гибкости.В вашем YAML вы можете вызвать скрипт python для заполнения необходимой информации из документации :

imports:
- path: vm-template.py

resources:
- name: vm-1
  type: vm-template.py
- name: a-new-network
  type: compute.v1.network
  properties:
    routingConfig:
      routingMode: REGIONAL
    autoCreateSubnetworks: true

Где vm-template.py это скрипт python:

    """Creates the virtual machine."""

COMPUTE_URL_BASE = 'https://www.googleapis.com/compute/v1/'


def GenerateConfig(unused_context):
  """Creates the first virtual machine."""

  resources = [{
      'name': 'the-first-vm',
      'type': 'compute.v1.instance',
      'properties': {
          'zone': 'us-central1-f',
          'machineType': ''.join([COMPUTE_URL_BASE, 'projects/[MY_PROJECT]',
                                  '/zones/us-central1-f/',
                                  'machineTypes/f1-micro']),
          'disks': [{
              'deviceName': 'boot',
              'type': 'PERSISTENT',
              'boot': True,
              'autoDelete': True,
              'initializeParams': {
                  'sourceImage': ''.join([COMPUTE_URL_BASE, 'projects/',
                                          'debian-cloud/global/',
                                          'images/family/debian-9'])
              }
          }],
          'networkInterfaces': [{
              'network': '$(ref.a-new-network.selfLink)',
              'accessConfigs': [{
                  'name': 'External NAT',
                  'type': 'ONE_TO_ONE_NAT'
              }]
          }]
      }
  }]
  return {'resources': resources}

Теперь для пароля это зависит от того, какую виртуальную машину вы используете, Windows или Linux.

В Linux вы можете добавить сценарий запуска, который вводит открытый ключ ssh .

Windows вы можете сначала подготовить правильный ключ, см. Это Автоматическая генерация пароля

0 голосов
/ 26 сентября 2019

Лучший способ - использовать сервер метаданных.

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

curl  -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetada
ta/v1/instance/attributes/"

Затем делайте с ним все, что вы хотите

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


Кстати, я бы рекомендовал вам взглянуть на другие вещи: berglas .Berglas сделан Google Developer Advocate, специализирующейся на безопасности: Сет Варго.Вкратце, принцип:

  • Загрузите ведро с Бергласом
  • Создайте секрет в этом ведре с Бергласом
  • Передайте ссылку на этот секрет в ваших вычислительных метаданных (berglas://<my_bucket>/<my secret name>)
  • Используйте berglas в сценарии запуска для разрешения секрета.

Все это действие возможно в командной строке, поэтому возможна интеграция в сценарий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...