ResumableUploadAbortException: 403 权限不足

ResumableUploadAbortException: 403 Insufficient Permission

我正在使用 Google Cloud Storage 和 Google Compute Engine 并尝试从我的 VM 上传到我的存储桶。我的存储桶有 read/write 权限,任何有权访问它的人也有。他们被标记为 所有者。我可以很好地从我的存储桶中下载。当我尝试上传到我的存储桶时,这是我收到的错误。 ResumableUploadAbortException: 403 Insufficient Permission。我不确定为什么会这样?有什么线索吗?

当以非交互方式(例如从 VM 实例)与其他云平台产品(例如 Google 云存储(存储桶)交互时,建议使用作用域,而作用域又会利用服务帐户,验证 VM / 系统的首选方式。进一步阅读可以找到 here.

您是否使用 VM 上的默认服务帐户来访问存储桶?默认情况下只有读取范围。尝试创建具有 Read/Write 范围的虚拟机。

更改 VM 的云 API 访问范围以允许 read/write 存储。这位于 VM 设置的 "Access scopes" 部分。您的 VM 需要停止才能执行此操作。

0. Stop VM instance
1. Open VM instance details
2. Press "Edit"
3. Change Cloud API access scope--> "Allow full access to all cloud APIs"

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

重要!! 根据 this comment 在相关 post 上的说明,您可能需要在定义新范围后删除 ~/.gsutil 中的凭据。

# VM instance console
sudo rm -r ~/.gsutil

如果可能的话让我放一个更简单的步骤:

  1. 从控制台停止 VM,编辑访问控制并将 "Storage" 权限从 READ 更改为 Write 或 full。
  2. 启动虚拟机
  3. 从命令行刷新缓存

    rm -r ~/.gsutil

这应该有效。

在 GCE 实例上 运行 进行以下设置:无需重启 Compute Engine,

gcloud init

输出将是这样的。

Choose the account you would like to use to perform operations for  this configuration:
 [1] 533893300998-compute@developer.gserviceaccount.com
 [2] Log in with a new account
Please enter your numeric choice: 1

选择数字 1 以使用服务帐户。如果这是一台共享计算机并且您使用个人帐户登录,则计算机上的其他任何人都可以使用您的凭据。 更多详情 Read here

如果您已经初始化了 gcloud,则不想重新初始化。

gcloud auth login 

您需要授予实例的服务帐户在存储桶中创建对象的权限。尽管其他答案实现了这一点,但它们可能会打开比您需要的更多权限。以下是如何仅添加一个附加权限:

  1. 获取您的服务帐户的电子邮件地址:
$ gcloud auth list
                  Credentialed Accounts
ACTIVE  ACCOUNT
*       123456789-compute@developer.gserviceaccount.com
  1. 在 Cloud Console 中打开您的存储桶并转到 "Permissions" 选项卡
  2. 点击"Add Members"
  3. 从上方粘贴服务帐户的电子邮件地址
  4. 下 "Role"、select "Storage Object Admin"
    • 注意:这会授予创建、列出和删除对象的权限。如果你只需要创建对象,你可以试试"Storage Object Creator"。
  5. 点击"Save"

请注意,这会向共享同一服务帐户的所有实例授予权限。如果您需要更细粒度的访问控制,您应该为每个实例创建不同的服务帐户。

完成这些步骤后,您需要重新加载权限,如其他人所说:

rm -rf ~/.gsutil
rm -rf /root/.gsutil