Google云端存储,计算引擎和不足的权限错误

时间:2017-11-28 11:30:09

标签: python-3.x google-cloud-platform google-cloud-storage

我知道这是自2016年以来广泛讨论的问题,但我无法解决问题。 对于Google Cloud项目,我的个人帐户和服务帐户(我使用命令gcloud auth列表获得的帐户)都是所有者。

使用google-cloud软件包(存储模块)的python3代码可以在我的笔记本电脑上使用我的个人帐户正常工作,即文件上传工作正常。

相反,在计算引擎上,我收到以下错误:

  File "/home/user/git/project/GoogleUtils/StorageUtils.py", line 109, in upload_blob
    blob.upload_from_filename(source_file_name)
  File "/home/analysis/.local/lib/python3.5/site-packages/google/cloud/storage/blob.py", line 992, in upload_from_filename
    size=total_bytes)
  File "/home/analysis/.local/lib/python3.5/site-packages/google/cloud/storage/blob.py", line 949, in upload_from_file
    _raise_from_invalid_response(exc)
  File "/home/analysis/.local/lib/python3.5/site-packages/google/cloud/storage/blob.py", line 1735, in _raise_from_invalid_response
    raise exceptions.from_http_response(error.response)
google.api_core.exceptions.Forbidden: 403 POST https://www.googleapis.com/upload/storage/v1/b/bucket_name/o?uploadType=multipart: Insufficient Permission

我的个人帐户和服务帐户都会发生这种情况。我想这不是一个许可问题......所以我应该在哪里寻找?奇怪的是文件下载工作完美。

2 个答案:

答案 0 :(得分:4)

我提出的唯一解决方案是通过从默认访问权限切换(在设置屏幕的底部)来修改虚拟机设置。完全访问'。

答案 1 :(得分:1)

已经回答了,但我认为值得澄清一下。

是的,你是对的它不是服务帐户的权限错误,并且由于默认设置而是预期的行为,但让我解释一下:

  • 使用default service帐户创建使用Google Cloud Engine的虚拟机时,必须仔细检查哪个是该VM允许的API。 (您可以在创建实例时检查它们并进行修改,您可以从Google Cloud Console中查看它们,检查任何实例的详细信息)。这种看似棘手的行为旨在限制可能在许多不同实例上传播的服务帐户的功能,如果受到破坏(这足以登录到实例中)可能会导致许多问题,如果用户给出的话他是全权,即项目所有人。

  • 另一方面,当您不使用默认服务帐户时,您必须使用具有服务帐户的IAM角色来控制VM访问以修改访问范围。因此,在您的情况下,具有完全访问权限的服务帐户就足以使用所有可用的API。

您可以验证创建新服务帐户的这两种不同行为,并且在创建实例时首先使用默认帐户,然后使用新帐户,您会注意到会出现两个不同的标签。