gsutil copy returns" AccessDeniedException:403权限不足"来自GCE

时间:2014-12-03 15:07:36

标签: 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@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  

我错过了什么?

9 个答案:

答案 0 :(得分:87)

要查找的另一件事是确保在创建GCE VM时设置适当的范围。即使VM附加了服务帐户,也必须为其分配devstorage范围才能访问GCS。

例如,如果您使用devstorage.read_only作用域创建了VM,则即使您的服务帐户有权写入存储桶,尝试写入存储桶也会失败。您需要devstorage.full_controldevstorage.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)

  1. 停止VM
  2. 获得-> VM实例详细信息。
  3. 在“ Cloud API访问范围”中选择“允许对所有Cloud API的完全访问”,然后 点击“保存”。
  4. 重新启动VM并删除〜/ .gsutil。

答案 4 :(得分:7)

我已经写了这个问题的答案,因为我无法发表评论:

如果您在某些情况下运行带有gsutil前缀的sudo命令,也会发生此错误。

答案 5 :(得分:2)

  1. 创建存储桶后,转到权限标签并添加电子邮件并设置 Storage Admin 权限。

screenshot

  1. 通过SSH >>访问VM实例>>运行命令:gcloud auth login并按照步骤进行操作。

参考:https://groups.google.com/d/msg/gce-discussion/0L6sLRjX8kg/kP47FklzBgAJ

答案 6 :(得分:0)

从文档中: https://cloud.google.com/compute/docs/access/create-enable-service-accounts-for-instances#changeserviceaccountandscopes

您需要先停止实例->转到编辑页面->转到“ Cloud API访问范围”,然后选择“存储完全访问权限或读/写或您需要的任何内容”

  

更改实例的服务帐户和访问范围   想要以其他身份运行VM,或者您确定   实例需要一组不同的作用域来调用所需的API,   您可以更改服务帐户和访问权限范围   现有实例。例如,您可以将访问范围更改为授予   访问新的API,或更改实例以使其作为   您创建的服务帐户,而不是Compute Engine   默认服务帐户。

     

要更改实例的服务帐户和访问范围,请   实例必须暂时停止。要停止您的实例,请阅读   停止实例的文档。更改服务后   帐户或访问范围,请记住重新启动实例。使用以下之一   更改服务帐户或访问范围的以下方法   停止的实例。

答案 7 :(得分:0)

因此,我尝试了一堆尝试将其从GCS存储桶复制到我的VM的事情。 希望这篇文章对某人有所帮助。

通过SSHed连接: enter image description here

并遵循以下脚本:

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/

enter image description here

一旦我激活了API,便通过

在SSHed窗口中对自己进行了身份验证
gcloud auth login

按照身份验证过程,我终于能够从Google存储桶下载到我的VM。

PS

我确实确保:

  1. 确保在我的VM实例上安装了gsutils。
  2. 转到我的存储桶,转到权限选项卡,然后添加所需的服务帐户并设置Storage Admin权限/角色。 enter image description here

    3。确保我的VM具有适当的Cloud API访问范围: enter image description here

enter image description here

答案 8 :(得分:0)

更改存储桶的权限。

为“所有用户”添加用户,并授予“存储管理员”访问权限。