将多个范围添加到 Google 云上的 Compute Engine VM 实例不起作用

Adding multiple scopes to a Compute Engine VM instance on Google Cloud not working

我正在尝试在 Google 云中创建一个具有关联启动脚本 startup_script.sh 的 Compute Engine VM 实例 sample。在启动时,我想访问存储在 Cloud Source Repository 中的文件。因此,在这个脚本中,我使用

克隆了一个存储库
gcloud source repos clone <repo name> --project=<project name>

此外,startup_script.sh 还有 运行s 命令,例如

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 运行没问题,即我可以看到每个结果命令成功完成。但是,我想在创建 VM 时分配这些范围,而不必事后手动编辑范围。我在 documentation 中发现,为了做到这一点,我可以 运行

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]

当我 运行 在云 Shell 中执行此命令时,我一次只能添加一个范围,即 --scopes=cloud_platform,或者如果我尝试输入多个范围如上面的命令所示,我得到

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

按照文档的建议添加多个范围似乎不起作用。使用范围的 URI 而不是别名时出现类似的错误。

关于为什么会发生这种情况的任何明显原因?我觉得这可能与 sample VM 关联的服务帐户(或缺少服务帐户)有关,但我对此并不完全熟悉。

奖金:理想情况下,我想 运行 VM 创建云 shell 命令在 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 的方式有任何问题吗?

Adding multiple scopes as the documentation suggests doesn't seem to work

请将此命令与 --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 的评论。