【问题标题】:ResumableUploadAbortException: 403 Insufficient PermissionResumableUploadAbortException: 403 权限不足
【发布时间】:2015-04-21 03:13:36
【问题描述】:

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

【问题讨论】:

    标签: google-app-engine google-cloud-storage google-compute-engine gsutil


    【解决方案1】:

    更改 VM 的 Cloud API 访问范围以允许对存储进行读/写。这位于 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,您可能需要在定义新范围后删除 ~/.gsutil 中的凭据。

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

    【讨论】:

    • 倾斜:rm -rf ~/.gsutil
    • 除此之外,您还需要确保服务帐户可以在存储桶中创建对象。您可以通过转到存储桶、单击权限并添加具有存储对象创建者角色的服务帐户电子邮件来执行此操作。
    • 请注意,不是按照当前版本文档的建议选择“允许完全访问所有云 API”,而是可以选择“为每个 API 设置访问权限”,然后继续存储组合框选择并将 Full 设置为它
    • 这成功了 #VM 实例控制台 sudo rm -r ~/.gsutil
    【解决方案2】:

    在 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 
    

    【讨论】:

    • 如果您不想重新启动 VM,这是一个很好的工作答案。
    【解决方案3】:

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

    【讨论】:

    • 我必须重新创建另一个 VM 实例?我已将应用程序编程为指向我当前 VM 的 IP 地址。如果我创建一个新的 VM 实例,我将被分配一个新的 IP 地址。有没有办法在不这样做的情况下授予我的帐户写入权限?
    • 我认为没有任何方法可以更改正在运行的实例的权限。如果您需要一个特定的 IP 地址保持不变,我建议您保留一个静态 IP 地址:cloud.google.com/compute/docs/…
    【解决方案4】:

    当以非交互方式(例如从 VM 实例)与其他 Cloud Platform 产品(例如 Google Cloud Storage(存储桶))进行交互时,建议使用范围,而后者又使用服务帐户,这是首选方式验证虚拟机/系统。进一步阅读可以找到here

    【讨论】:

      【解决方案5】:

      如果可能,让我提出一个更简单的步骤:

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

        rm -r ~/.gsutil

      这应该可以工作。

      【讨论】:

        【解决方案6】:

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

        1. 获取您的服务帐户的电子邮件地址:
        $ gcloud auth list
                          Credentialed Accounts
        ACTIVE  ACCOUNT
        *       123456789-compute@developer.gserviceaccount.com
        
        1. 在 Cloud Console 中打开您的存储桶并转到“权限”标签
        2. 点击“添加成员”
        3. 从上方粘贴服务帐户的电子邮件地址
        4. 在“角色”下,选择“存储对象管理员”
          • 注意:这将授予创建、列出和删除对象的权限。如果只需要创建对象,可以试试“Storage Object Creator”。
        5. 点击“保存”

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

        做完这些步骤后,需要按照别人说的重新加载权限:

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

        【讨论】:

        • 你是摇滚明星!
        猜你喜欢
        • 2016-06-23
        • 2017-02-20
        • 2018-05-20
        • 2019-04-18
        • 1970-01-01
        • 2014-06-01
        • 2018-01-24
        • 2018-09-04
        • 2015-10-27
        相关资源
        最近更新 更多