Google cloud storage “gsutil副本返回”;AccessDeniedException:403权限不足“;来自GCE
我通过SSH登录到GCE实例。在此,我希望通过服务帐户访问存储:Google cloud storage “gsutil副本返回”;AccessDeniedException:403权限不足“;来自GCE,google-cloud-storage,Google Cloud Storage,我通过SSH登录到GCE实例。在此,我希望通过服务帐户访问存储: GCE> gcloud auth list Credentialed accounts: - 1234567890-compute@developer.gserviceaccount.com (active) 我首先确保这个服务帐户在我工作的项目的权限中被标记为“可以编辑”。我还确保给他桶上的写ACL我希望他复制一个文件: local> gsutil acl ch -u 1234567890-compute@dev
GCE> gcloud auth list
Credentialed accounts:
- 1234567890-compute@developer.gserviceaccount.com (active)
我首先确保这个服务帐户在我工作的项目的权限中被标记为“可以编辑”。我还确保给他桶上的写ACL我希望他复制一个文件:
local> gsutil acl ch -u 1234567890-compute@developer.gserviceaccount.com:W gs://mybucket
但随后以下命令失败:
GCE> gsutil cp test.txt gs://mybucket/logs
(我还确保在“mybucket”下创建“日志”)
我收到的错误消息是:
Copying file://test.txt [Content-Type=text/plain]...
AccessDeniedException: 403 Insufficient Permission 0 B
我遗漏了什么?另一件需要注意的事情是确保在创建GCE VM时设置了适当的作用域。即使虚拟机连接了服务帐户,也必须为其分配devstorage作用域才能访问GCS 例如,如果您使用
devstorage.read only
作用域创建了VM,则尝试写入存储桶将失败,即使您的服务帐户具有写入存储桶的权限。您需要devstorage.full\u control
或devstorage.read\u write
有关详细信息,请参阅上的部分
注意:默认计算服务帐户的作用域非常有限(包括对GCS的只读)。这是因为默认服务帐户具有Project Editor IAM权限。如果您使用任何用户服务帐户,这通常不是问题,因为默认情况下,用户创建的服务帐户可以访问所有范围
在向VM添加必要的作用域后,
gsutil
可能仍在使用没有新作用域的缓存凭据。再次尝试gsutil命令之前,请删除~/.gsutil
。(感谢@mndrix在评论中指出这一点。)gsutil config-b
然后浏览到它提供的URL,
[单击允许]
然后复制验证码并粘贴到终端。您必须使用具有该项目所需权限的帐户登录:
gcloud auth login
由于我无法发表评论,我已就此问题写了答复:
在某些情况下,如果使用sudo
前缀运行gsutil
命令,也可能发生此错误
gcloud auth login
,然后按照以下步骤操作所以我尝试了很多方法试图从GCS存储桶复制到我的虚拟机。 希望这篇文章能帮助别人 通过SSHed连接: 按照这个脚本:
sudo gsutil cp gs://[BUCKET_NAME]/[OBJECT_NAME] [OBJECT_DESTINATION_IN_LOCAL]
出现以下错误:
AccessDeniedException:403未配置访问。请转到项目的Google云平台控制台(),选择API和Auth并启用Google云存储JSON API
在这个链接中提到的“激活API”部分之后,修复了这个问题-
一旦我激活了API,我就在SSHed窗口中通过
gcloud auth login
经过认证过程,我终于能够从谷歌存储桶下载到我的虚拟机上
PS
我确实确保:
更改bucket的权限 为“所有用户”添加一个用户,并授予“存储管理员”访问权限
GCE虚拟机是在完全控制或读/写GCS范围内创建的?感谢您指出这一点。我确实没有意识到这一选择。我在启用该选项的情况下重新创建了该实例,它成功了。如果你能建议打开这个标志作为答案,我会很高兴地将它标记出来。我用权限重新创建了我的实例,现在一切都正常了。现在,您可以编辑范围了。停止机器-编辑-然后更改云API访问范围。我相信这只提供了大约一个月。在向VM添加了必要的作用域之后,
gsutil
可能仍然在使用没有新作用域的缓存凭据。再次尝试gsutil
命令之前,请删除~/.gsutil。非常感谢您@mndrix保存dayNote如果您从ssh
运行gsutil
,则此选项不起作用。它“不起作用”,甚至无法打开浏览器。相反,它提供了一个url供您手动复制和粘贴。如果您删除-b
,这也适用于其他所有人。这将不会打开浏览器,但会打开浏览器