Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform 向Google云上的计算引擎VM实例添加多个作用域不起作用_Google Cloud Platform_Google Compute Engine_Gcloud_Google Iam_Google Cloud Source Repos - Fatal编程技术网

Google cloud platform 向Google云上的计算引擎VM实例添加多个作用域不起作用

Google cloud platform 向Google云上的计算引擎VM实例添加多个作用域不起作用,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 Repos,我正试图在Google Cloud中创建一个计算引擎VM实例sample,它有一个关联的启动脚本startup\u script.sh。启动时,我希望能够访问存储在云源存储库中的文件。因此,在这个脚本中,我使用 gcloud source repos clone <repo name> --project=<project name> 创建.json凭证,以及 EXTERNAL_IP = $(gcloud compute instances describe sampl

我正试图在Google Cloud中创建一个计算引擎VM实例
sample
,它有一个关联的启动脚本
startup\u script.sh
。启动时,我希望能够访问存储在云源存储库中的文件。因此,在这个脚本中,我使用

gcloud source repos clone <repo name> --project=<project name>
创建
.json
凭证,以及

EXTERNAL_IP = $(gcloud compute instances describe sample --format='get(networkInterfaces[0].accessConfigs[0].natIP)' --zone=us-central1-a)
获取虚拟机中虚拟机的外部IP。为了在没有任何错误的情况下运行这些命令,我发现我需要部分或完全访问多个云API访问范围

如果我在创建虚拟机后手动编辑其作用域以允许此操作并重新启动它,
startup\u script.sh
运行良好,即我可以看到每个命令成功完成的结果。但是,我希望在创建VM时分配这些作用域,而不必在创建之后手动编辑作用域。我发现为了做到这一点,我可以跑步

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]
但是,当我在Cloud Shell中运行此命令时,我一次只能添加一个作用域,即
--scopes=Cloud\u platform
,或者如果我尝试输入多个作用域,如上面的命令所示,我会得到

ERROR: (gcloud.compute.instances.create) unrecognized arguments:
  cloud-source-repos,
  default]
如文档所示,添加多个作用域似乎不起作用。当使用作用域的URI而不是别名时,我会遇到类似的错误

为什么会发生这种情况,有什么明显的原因吗?我觉得这可能与
sample
VM相关的服务帐户有关(或者没有),但我对这一点并不完全熟悉

好处:理想情况下,我希望在
cloudbuild.yaml
文件中运行VM creation cloud shell命令,我将其作为

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的方式有什么问题吗

如文档所示,添加多个作用域似乎不起作用

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

你的服务帐户是否有适当的角色?另外,您是否可以尝试在云回购之后删除默认值,看看这是否会改变什么?它声明它是一个参数错误,因此语法是错误的,但在meAdvice看来确实不错。计算引擎作用域限制分配给服务帐户的权限。作用域不会增加/添加权限。使用“云平台”范围,并通过为服务帐户分配给项目的角色管理权限。
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