Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform AccessDeniedException:尝试使用gsutil将文件从VM复制到Google存储时为403_Google Cloud Platform_Google Cloud Storage_Gsutil - Fatal编程技术网

Google cloud platform AccessDeniedException:尝试使用gsutil将文件从VM复制到Google存储时为403

Google cloud platform AccessDeniedException:尝试使用gsutil将文件从VM复制到Google存储时为403,google-cloud-platform,google-cloud-storage,gsutil,Google Cloud Platform,Google Cloud Storage,Gsutil,我正在尝试手动执行自动化过程所需的步骤,以了解其工作原理,并确保所有命令都正确无误。但当我尝试使用命令执行此操作时: gsutil cp文件名gs://bucket\u名称/ 我得到以下错误: AccessDeniedException:403 OAuth2作用域不足,无法执行此操作 这本来应该是一件很简单的事情,但我做不好。我习惯于在AWS中这样做,但在谷歌云中我不能这样做。有人知道如何克服它吗?您尝试复制此副本时使用的帐户似乎没有权限将对象写入bucket name bucket 如果在GC

我正在尝试手动执行自动化过程所需的步骤,以了解其工作原理,并确保所有命令都正确无误。但当我尝试使用命令执行此操作时:

gsutil cp文件名gs://bucket\u名称/

我得到以下错误:

AccessDeniedException:403 OAuth2作用域不足,无法执行此操作


这本来应该是一件很简单的事情,但我做不好。我习惯于在AWS中这样做,但在谷歌云中我不能这样做。有人知道如何克服它吗?

您尝试复制此副本时使用的帐户似乎没有权限将对象写入bucket name bucket

如果在GCE虚拟机上执行此操作并使用其默认服务帐户,请确保在创建虚拟机时选择了正确的访问范围-默认范围包括对GCS的只读访问。您可以通过登录VM并使用curl查询GCE元数据服务器来检查这一点:

$ curl -H 'Metadata-Flavor: Google' "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/scopes"
[...]
https://www.googleapis.com/auth/devstorage.read_only
[...]

我和一个朋友谈过,他帮我解决了这个问题,下面是解决方案:

我的GCE虚拟机对谷歌云存储具有只读权限。我在网上发现,只有在创建GCE虚拟机时才能更改此状态,为了克服此问题,我需要创建一个新虚拟机并删除此虚拟机。这会起作用,但我不想失去我在当前虚拟机中所做的一切


另一个对我有效的解决方案是创建一个服务帐户Google Cloud Platform>IAM&admin>service Accounts。您只需为其提供所需的服务帐户名,然后选择“提供新私钥”。那你就可以走了。在那之后,我可以将文件从GCE虚拟机复制到存储器,并执行我需要的所有其他操作

嘿@Marcus Vinicius Melo您只需要在GCP中启用存储传输API,然后将执行GCE到bucket的gsutil。

此错误与读/写权限无关,但与分配给您的计算实例的范围有关。换句话说,您需要授予它使用GCP资源的权利,下一步就是对特定对象的读/写权限

以前需要重新创建实例,但现在只需停止并运行以下命令即可,例如使用cloud shell:

 gcloud compute instances set-service-account myinstance \
     --service-account 192893587797-compute@developer.gserviceaccount.com \
     --scopes cloud-platform
当然要替换myinstance和192893587797-compute@developer.gserviceaccount.com
使用您自己的计算实例和相应的服务帐户名。

嘿@Marcus Vinicius Melo


我是项目负责人,仍然面临同样的问题。在我安装了gcs-python包之后,它就解决了。尝试pip安装谷歌云存储

以下是我如何解决这个问题的,可能对这里的新用户有所帮助:

不删除现有VM的分步处理:

停止VM实例 创建新服务帐户IAM&Admin>服务帐户>添加服务帐户 以项目>所有者的身份创建具有完全权限的新服务帐户 为此服务帐户创建私钥 创建新服务帐户后,转到vm并单击其名称>然后单击编辑 现在,在编辑模式下,向下滚动到服务帐户部分,并选择新的服务帐户。 现在,通过浏览器中的ssh访问它,您就可以开始了! 下面是我用来将文件复制到bucket:sudo gsutil cp FILE\u PATH gs的命令://
哦,等等,现在我弄糊涂了。这里的问题是我的帐户没有权限,还是GCE VM没有权限?是的,刚刚检查过,VM对于存储是只读的。错误消息只与请求的oauth令牌作用域有关,它通过VM的只读存储控制。如果帐户权限有问题,您会得到一个错误,比如“userxyz”没有“storage.objects.write”到“object\u name”,我知道了,谢谢。我和一个使用谷歌云的朋友聊天,我们找到了创建服务帐户的方法。我将发布一个关于它的回答。这是一种用户权限,即使虚拟机是只读存储,它也可以从查看中执行操作:请改进此答案中的解释。此外,请避免任何不正式的行为。否则,这篇文章似乎并没有为这个问题提供答案。请编辑您的答案,或者将其作为问题的注释发布。我是否必须将此密钥提供给我的虚拟机或其他东西?因为仅仅生成一个新密钥而不做任何其他事情并不能解决我的问题。我现在不太记得了,那是很久以前的事了,但是你需要将此帐户分配给你的VM或类似的东西。我在删除默认服务帐户并重新添加后遇到了此问题。我仍然需要转到服务帐户->操作->创建密钥才能工作,即使它被授予了预期的权限-当然,仍然需要密钥才能使用这些权限。FWIW,这是w
这顶帽子适合我。我一直假设IAM优先于作用域,但您至少需要这个作用域。如果您使用自定义服务帐户,可能带有自定义访问角色,那么您需要小心使用作用域,以使其正常工作。这个答案适用于FreeBSD 12.2完全修补的gcloud 312.0.0 gsutil 4.53。