AccessDeniedException:403尝试使用gsutil

时间:2018-01-19 17:17:29

标签: google-cloud-platform google-cloud-storage gsutil

我正在尝试手动执行我需要的步骤来自动化过程,以了解它是如何工作的,并确保我直接获得所有命令。但是当我尝试使用命令执行此操作时:

gsutil cp file_name gs://bucket_name/

我收到以下错误:

AccessDeniedException: 403 Insufficient OAuth2 scope to perform this operation.

这应该是一件非常简单的事情,但我无法做对。我习惯在AWS中这样做,但我无法在Google Cloud中做同样的事情。谁知道如何克服它?

6 个答案:

答案 0 :(得分:1)

看起来您用于尝试此副本的帐户无权将对象写入bucket-name存储区。

如果您在GCE VM上执行此操作并使用其默认服务帐户,请确保在创建VM时选择了正确的访问范围 - 默认范围包括对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
[...]

答案 1 :(得分:1)

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

我的GCE VM拥有Google云端存储的只读权限。我在网上发现,您只能在创建GCE VM时更改此状态,为了克服这个问题,我需要创建一个新的并删除此VM。这样可行,但我不想放弃我在当前VM中所做的一切。

另一个对我有用的解决方案是创建服务帐户(Google云平台> IAM& admin>服务帐户)。您只需要为其提供所需的服务帐户名称,然后选择“提供新的私钥”。然后你应该好好去。之后,我可以将文件从GCE VM复制到存储,并执行我需要的所有其他操作。

答案 2 :(得分:1)

嘿@Marcus Vinicius Melo,

我是项目负责人,仍然面临同样的问题。安装gcs python软件包后,它解决了。尝试pip安装google-cloud-storage

答案 3 :(得分:0)

嘿,@ Marcus Vinicius Melo,您只需要在GCP中启用Storage Transfer API,然后gsutil将GCE存储到桶即可。

答案 4 :(得分:0)

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

以前必须重新创建实例,但是现在足以停止然后在命令下运行,例如使用云外壳程序

 gcloud compute instances set-service-account myinstance \
     --service-account 192893587797-compute@developer.gserviceaccount.com \
     --scopes cloud-platform

当然要替换myinstance192893587797-compute@developer.gserviceaccount.com 并分别使用您自己的compute instanceservice account name

答案 5 :(得分:0)

这是我解决此问题的方式,可能对这里的新用户有所帮助:

不删除现有VM的逐步过程:

  1. 停止VM实例
  2. 创建新的服务帐户 IAM和管理员> 服务帐户> 添加服务帐户
  3. 以( project>所有者)的完全权限创建一个新的服务帐户
  4. 为此服务帐户创建私钥
  5. 创建新服务帐户后,转到 vm ,并单击其名称>,然后单击 edit
  6. 现在,在编辑模式下,向下滚动到服务帐户部分,然后选择新的服务帐户。
  7. 现在,通过浏览器内的ssh 对其进行访问,您将会很方便!
  8. 这是我用来将文件复制到存储桶的命令:sudo gsutil cp FILE_PATH gs://<BUCKET>