在不关闭虚拟机的情况下修改gcloud虚拟机业务帐户权限



我正在尝试从Google Cloud VM上传文件到云存储桶。

预期失败,因为与虚拟机关联的服务帐户没有权限:

$ gsutil cp file.png gs://bucket/
Copying file://file.png [Content-Type=image/png]...
AccessDeniedException: 403 Insufficient Permission

据我所知,有两种方法可以解决这个问题:

  • 从VM web管理面板修改作用域
  • 更改bucket的权限并添加具有写访问权限的服务帐户(我更喜欢这样,因为另一个选项似乎可以访问同一项目中的所有bucket)

然而,似乎这两种解决方案都需要停止VM,这是有问题的,因为它是生产服务器。

有没有办法在不停止虚拟机的情况下修复这个问题?

有两种方法可以控制计算引擎虚拟机的权限。

访问范围
  1. 分配给实例的服务帐户。

这两个方法一起工作。可用的总权限到计算引擎实例的值由服务帐户控制。访问范围然后限制分配的权限发送到虚拟机。

必须关闭虚拟机才能修改Access scope。修改服务帐户角色不需要重启虚拟机

关于云存储访问:

如果业务帐户拥有云存储访问权限,但"存储的访问范围"设置为"None",则即使该业务帐户拥有所需的角色,虚拟机也无法访问云存储。此时需要关闭虚拟机,修改Access Scope,才能访问Cloud Storage。

如果"虚拟机访问范围"开启了"存储",但业务帐户没有"云存储"角色,则虚拟机将无法访问"云存储"。在这种情况下,向服务帐户添加Cloud Storage角色将授予访问Cloud Storage的权限,而无需重新启动虚拟机。

访问范围(OAuth范围)是在Google Cloud IAM之前存在的遗留机制。考虑到您在生产环境中使用该VM,并且不希望关闭实例,我建议执行以下操作:

  • 设置虚拟机访问范围为"允许完全访问所有云api"。
  • 创建具有所需角色的新服务帐户,并将该服务帐户分配给Compute Engine VM实例。

最新更新