我通过SSH登录GCE实例。从那里我想借助服务帐户访问存储:
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”下创建“logs”)。
我得到的错误信息是:
Copying file://test.txt [Content-Type=text/plain]...
AccessDeniedException: 403 Insufficient Permission 0 B
我错过了什么?
答案 0 :(得分:87)
要查找的另一件事是确保在创建GCE VM时设置适当的范围。即使VM附加了服务帐户,也必须为其分配devstorage范围才能访问GCS。
例如,如果您使用devstorage.read_only
作用域创建了VM,则即使您的服务帐户有权写入存储桶,尝试写入存储桶也会失败。您需要devstorage.full_control
或devstorage.read_write
。
有关详细信息,请参阅Preparing an instance to use service accounts部分。
注意:默认计算服务帐户的范围非常有限(包括对GCS具有只读权限)。这样做是因为默认服务帐户具有Project Editor IAM权限。如果您使用任何用户服务帐户,这通常不是问题,因为默认情况下,用户创建的服务帐户将获得所有范围访问权限。
答案 1 :(得分:37)
gsutil config -b
然后浏览它提供的网址, [CLICK允许]
然后复制验证码并粘贴到终端。
答案 2 :(得分:31)
您必须使用具有该项目所需权限的帐户登录:
gcloud auth login
答案 3 :(得分:12)
答案 4 :(得分:7)
我已经写了这个问题的答案,因为我无法发表评论:
如果您在某些情况下运行带有gsutil
前缀的sudo
命令,也会发生此错误。
答案 5 :(得分:2)
gcloud auth login
并按照步骤进行操作。参考:https://groups.google.com/d/msg/gce-discussion/0L6sLRjX8kg/kP47FklzBgAJ
答案 6 :(得分:0)
您需要先停止实例->转到编辑页面->转到“ Cloud API访问范围”,然后选择“存储完全访问权限或读/写或您需要的任何内容”
更改实例的服务帐户和访问范围 想要以其他身份运行VM,或者您确定 实例需要一组不同的作用域来调用所需的API, 您可以更改服务帐户和访问权限范围 现有实例。例如,您可以将访问范围更改为授予 访问新的API,或更改实例以使其作为 您创建的服务帐户,而不是Compute Engine 默认服务帐户。
要更改实例的服务帐户和访问范围,请 实例必须暂时停止。要停止您的实例,请阅读 停止实例的文档。更改服务后 帐户或访问范围,请记住重新启动实例。使用以下之一 更改服务帐户或访问范围的以下方法 停止的实例。
答案 7 :(得分:0)
因此,我尝试了一堆尝试将其从GCS存储桶复制到我的VM的事情。 希望这篇文章对某人有所帮助。
并遵循以下脚本:
sudo gsutil cp gs://[BUCKET_NAME]/[OBJECT_NAME] [OBJECT_DESTINATION_IN_LOCAL]
收到此错误:
AccessDeniedException:403未配置访问。请转到您项目的Google Cloud Platform控制台(https://cloud.google.com/console#/project),选择API和Auth并启用Google Cloud Storage JSON API。
此链接中提到的“激活API”部分之后,此操作已解决- https://cloud.google.com/storage/docs/json_api/
一旦我激活了API,便通过
在SSHed窗口中对自己进行了身份验证gcloud auth login
按照身份验证过程,我终于能够从Google存储桶下载到我的VM。
PS
我确实确保:
答案 8 :(得分:0)