Gsutil 复制从 GCE 返回“ AccessDeniedException: 403 Inenough Permission”

我通过 SSH 登录到一个 GCE 实例。从那里,我想访问存储与服务帐户的帮助:

GCE> gcloud auth list
Credentialed accounts:
- 1234567890-compute@developer.gserviceaccount.com (active)

I first made sure that this Service account is flagged "Can edit" in the permissions of the project I am working in. I also made sure to give him the Write ACL on the bucket I would like him to copy a file:

local> gsutil acl ch -u 1234567890-compute@developer.gserviceaccount.com:W gs://mybucket

但接下来的命令失败了:

GCE> gsutil cp test.txt gs://mybucket/logs

(我还确保在“ mybucket”下创建了“ log”)。

我得到的错误消息是:

Copying file://test.txt [Content-Type=text/plain]...
AccessDeniedException: 403 Insufficient Permission               0 B

我错过了什么?

92125 次浏览

另一件需要注意的事情是,确保在创建 GCEVM 时设置了适当的作用域。即使 VM 附加了一个服务帐户,也必须为其分配 devStorage 作用域,以便访问 GCS。

例如,如果您使用 devstorage.read_only作用域创建了 VM,那么尝试写入 bucket 将会失败,即使您的服务帐户具有写入 bucket 的权限。你需要 devstorage.full_control或者 devstorage.read_write

有关详细信息,请参阅 准备使用服务帐户的实例章节。

注意: 默认计算服务帐户的作用域非常有限(包括对 GCS 的只读)。之所以这样做,是因为默认服务帐户具有 ProjectEditor IAM 权限。如果您使用任何用户服务帐户,这通常不是问题,因为默认情况下,用户创建的服务帐户获得所有范围访问权。

After adding necessary scopes to the VM, gsutil may still be using cached credentials which don't have the new scopes. Delete ~/.gsutil before trying the gsutil commands again. (Thanks to @mndrix for pointing this out in the comments.)

gsutil config -b

然后浏览它提供的 URL, [点击允许]

然后复制验证码并粘贴到终端。

您必须使用具有该项目所需权限的帐户登录:

gcloud auth login

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

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

  1. After you have created the bucket, go to the permissions tab and add your email and set 存储管理 permission.

screenshot

  1. 通过 SSH > > run 命令访问 VM 实例: gcloud auth login并遵循以下步骤。

档号: https://groups.google.com/d/msg/gce-discussion/0L6sLRjX8kg/kP47FklzBgAJ

所以我尝试了很多东西试图从 GCS 桶复制到我的虚拟机。 希望这篇文章对某些人有所帮助。

通过 SSHed 连接: enter image description here

and following this script:

sudo gsutil cp gs://[BUCKET_NAME]/[OBJECT_NAME] [OBJECT_DESTINATION_IN_LOCAL]

Got this error:

未配置的403访问。请到您的项目的 Google 云平台控制台(https://cloud.google.com/console#/project) ,选择 API 和 Auth 并启用 Google 云存储 JSON API。

解决这个问题的方法是按照本链接中提到的“激活 API”部分- Https://cloud.google.com/storage/docs/json_api/

enter image description here

一旦我激活 API,然后我认证自己在 SSHed 窗口通过

gcloud auth login

按照认证程序,我终于能够从谷歌存储桶下载到我的虚拟机。

附言

我确实做到了:

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

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

enter image description here

  1. 阻止 VM
  2. goto --> VM instance details.
  3. 在“ CloudAPI 访问范围”中选择“允许完全访问所有的 CloudAPI”然后 点击“保存”。
  4. 重新启动 VM 并删除 ~/. gsutil。

更改 bucket 的权限。

为“ All User”添加一个用户并给予“ Storage Admin”访问权限。