我正在使用Google云端存储和Google Compute Engine,并尝试从我的虚拟机上传到我的存储桶。我的存储桶具有读/写权限,任何有权访问它的人也是如此。它们被标记为所有者。我可以从我的桶下载很好。当我尝试上传到我的桶时,这是我得到的错误。 ResumableUploadAbortException: 403 Insufficient Permission
。我不确定为什么会这样?有线索吗?
答案 0 :(得分:36)
更改VM的Cloud API访问范围以允许在存储上进行读/写。这位于VM设置的“访问范围”部分。您的VM需要停止才能执行此操作。
在相关帖子上按this comment注意,您可能需要在定义新范围后删除~/.gsutil
中的凭据。
答案 1 :(得分:4)
您是否使用VM上的默认服务帐户访问存储桶?默认只有读取范围。尝试创建具有读/写范围的VM。
答案 2 :(得分:2)
当以非交互方式(例如来自VM实例)与其他Cloud Platform产品(例如Google云端存储(存储桶))交互时,建议使用范围,而范围又使用服务帐户,验证VM /系统的首选方式。可以找到进一步的阅读here。
答案 3 :(得分:1)
在GCE实例上,运行以下命令进行设置:
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
答案 4 :(得分:1)
您需要授予实例的服务帐户权限才能在存储桶中创建对象。尽管其他答案可以达到此目的,但它们可能会打开比您所需更多的权限。以下是仅添加一个附加权限的方法:
$ gcloud auth list
Credentialed Accounts
ACTIVE ACCOUNT
* 123456789-compute@developer.gserviceaccount.com
请注意,这将授予共享同一服务帐户的所有实例的权限。如果您需要更细粒度的访问控制,则应该为每个实例创建一个不同的服务帐户。
完成这些步骤后,您需要像其他人所说的那样重新加载权限:
rm -rf ~/.gsutil
rm -rf /root/.gsutil
答案 5 :(得分:0)
如果可以的话,让我采取更简单的步骤:
从命令行刷新缓存
rm -r〜/ .gsutil
这应该有效。