我最近创建了一个VM,但是错误地赋予了默认服务帐户Storage: Read Only
权限,而不是“身份和API访问”下的预期Read Write
权限,因此来自VM的GCS写入操作现在失败了。
我意识到自己的错误,因此按照this answer中的建议,我停止了VM,将范围更改为Read Write
,然后启动了VM。但是,当我进行SSH登录时,尝试创建存储桶时仍然出现403错误。
$ gsutil mb gs://some-random-bucket
Creating gs://some-random-bucket/...
AccessDeniedException: 403 Insufficient OAuth2 scope to perform this operation.
Acceptable scopes: https://www.googleapis.com/auth/cloud-platform
如何解决此问题?。我使用的是默认服务帐户,并且没有IAM权限才能创建新帐户。
$ gcloud auth list
Credentialed Accounts
ACTIVE ACCOUNT
* (projectnum)-compute@developer.gserviceaccount.com
答案 0 :(得分:0)
尝试使用您的用户帐户创建Google Cloud Storage存储桶。
键入gcloud auth login
并访问您提供的链接,在该链接中,复制代码并将其粘贴到命令行中。
然后gsutil mb gs://bucket-name
。
答案 1 :(得分:0)
该安全模型具有两个作用,即API作用域和IAM权限。访问由它们的与决定。因此,您需要一个可接受的范围和足够的IAM权限才能执行任何操作。
这意味着您可以拥有2个具有默认服务帐户的VM,但是两者的访问级别不同。
为简单起见,通常只需要设置IAM权限并使用云平台API身份验证范围。
要检查是否有此设置,请转到云控制台中的VM,您会看到类似以下内容的
:Cloud API访问范围
允许完全访问所有Cloud API
默认情况下,当您通过SSH进入虚拟机时,gcloud将作为虚拟机上的服务帐户登录。我不建议您以自己的身份登录,否则您或多或少会破坏gcloud的配置以读取默认服务帐户。
完成此设置后,您应该可以正确使用gsutil。
答案 2 :(得分:0)
我建议您通过运行下面的gcloud命令尝试将范围“ cloud-platform”添加到实例中
gcloud alpha计算实例设置范围INSTANCE_NAME [--zone = ZONE] [--scopes = [SCOPE,...] [--service-account = SERVICE_ACCOUNT
在作用域中放入“ https://www.googleapis.com/auth/cloud-platform”,因为它可以完全访问所有Google Cloud Platform资源。