Не работает добавление нескольких областей к экземпляру виртуальной машины Compute Engine в Google Cloud

#google-cloud-platform #google-compute-engine #gcloud #google-iam #google-cloud-source-repos

# #google-cloud-platform #google-compute-engine #gcloud #google-iam #google-cloud-source-репозитории

Вопрос:

Я пытаюсь создать экземпляр виртуальной машины Compute Engine sample в облаке Google, который имеет связанный сценарий запуска startup_script.sh . При запуске я хотел бы иметь доступ к файлам, которые я сохранил в репозитории облачных источников. Таким образом, в этом сценарии я клонирую репозиторий с помощью

 gcloud source repos clone <repo name> --project=<project name>
 

Кроме того, startup_script.sh также выполняются такие команды, как

 gcloud iam service-accounts keys create key.json --iam-account <account>
 

который создает .json учетные данные и

 EXTERNAL_IP = $(gcloud compute instances describe sample --format='get(networkInterfaces[0].accessConfigs[0].natIP)' --zone=us-central1-a)
 

чтобы получить внешний IP-адрес виртуальной машины внутри виртуальной машины. Чтобы выполнить эти команды без каких-либо ошибок, я обнаружил, что мне нужен частичный или полный доступ к нескольким областям доступа Cloud API.

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

 gcloud compute instances create sample --image-family=ubuntu-1804-lts --image-project=ubuntu-os-cloud --metadata-from-file=startup-script=startup_script.sh --zone=us-central1-a --scopes=[cloud-platform, cloud-source-repos, default]
 

Однако, когда я запускаю эту команду в облачной оболочке, я могу либо добавлять только одну область за раз, т. Е. --scopes=cloud_platform , Или если я пытаюсь ввести несколько областей, как показано в команде выше, я получаю

 ERROR: (gcloud.compute.instances.create) unrecognized arguments:
  cloud-source-repos,
  default]
 

Добавление нескольких областей, как указано в документации, похоже, не работает. Я получаю аналогичную ошибку при использовании URI области вместо ее псевдонима.

Какие-либо очевидные причины, по которым это может происходить? Я чувствую, что это может быть связано с учетной записью службы (или ее отсутствием), связанной с sample виртуальной машиной, но я не совсем знаком с этим.

БОНУС: в идеале я хотел бы запустить команду облачной оболочки создания виртуальной машины в cloudbuild.yaml файле, который у меня есть как

 steps:
   - name: 'gcr.io/cloud-builders/gcloud'
   entrypoint: gcloud
   args: ['compute', 'instances', 'create', 'sample', '--image-family=ubuntu-1804-lts', '--image-project=ubuntu-os-cloud', '--metadata-from-file=startup-script=startup_sample.sh', '--zone=us-central1-a', '--scopes=[cloud-platform, cloud-source-repos, default]']
 

Я могу отправить сборку с помощью

 gcloud builds submit --config cloudbuild.yaml .
 

Есть ли какие-либо проблемы с тем, как я это настроил cloudbuild.yaml ?

Комментарии:

1. У вашей учетной записи службы есть надлежащие роли? Кроме того, вы можете попробовать удалить default после облачных репозиториев и посмотреть, изменится ли что-нибудь? В нем указывается ошибка аргумента, поэтому синтаксис неправильный, но для меня это выглядит нормально

2. Совет. Области Compute Engine ограничивают разрешения, назначенные учетной записи службы. Области не увеличивают / не добавляют разрешения. Используйте область «облачная платформа» и управляйте разрешениями с помощью ролей, назначенных проекту для учетной записи службы.

Ответ №1:

Добавление нескольких областей, как указано в документации, похоже, не работает

Пожалуйста, используйте эту команду с --scopes=cloud-platform,cloud-source-reposCreated , а не --scopes=[cloud-platform, cloud-source-repos, default] :

 gcloud compute instances create sample --image-family=ubuntu-1804-lts --image-project=ubuntu-os-cloud  --zone=us-central1-a --scopes=cloud-platform,cloud-source-reposCreated 

[https://www.googleapis.com/compute/v1/projects/wave25-vladoi/zones/us-central1-a/instances/sample].
NAME    ZONE           MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP    STATUS
sample  us-central1-a  n1-standard-1               10.128.0.17  35.238.166.75  RUNNING
 

Также рассмотрите комментарий @John Hanley.