【问题标题】:Modifying gcloud VM service account permissions without stopping the VM在不停止 VM 的情况下修改 gcloud VM 服务帐号权限
【发布时间】:2021-06-10 06:10:21
【问题描述】:

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

预计会失败,因为与 VM 关联的服务帐户没有权限:

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

据我了解,有两种方法可以解决此问题:

  • 从 VM Web 管理面板修改范围
  • 更改存储桶的权限并添加具有写入权限的服务帐户(我更喜欢这样做,因为其他选项似乎可以访问同一项目中的所有存储桶)

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

有没有办法在不停止 VM 的情况下解决这个问题?

【问题讨论】:

  • 将服务帐户添加到存储桶(作为资源)不需要关闭或重新启动 VM。更改 VM 范围确实需要关闭 VM。
  • @JohnHanley 很有趣,我试过了,添加了各种写权限,但仍然出现这个错误......我可能错过了一些东西,不确定。无论如何,我最终停止了 VM 并修改了范围,它现在工作正常。
  • Compute Engine 虚拟机范围限制授予服务帐号的权限。如果您已取消选择 Cloud Storage 的范围,则可以,您需要关闭 VM 以更改范围。请注意,范围不会向服务帐户授予权限,范围会限制已分配的权限。 VM 范围是在实施 IAM 和服务帐户之前存在的遗留机制。我的建议是启用 VM 的所有范围,然后限制分配给服务帐户的角色。

标签: google-cloud-platform virtual-machine gcloud


【解决方案1】:

有两种方法可以控制授予 Compute Engine 虚拟机的权限。

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

这两种方法一起工作。 Compute Engine 实例的可用总权限由服务帐号控制。然后访问范围限制分配到 VM 的权限。

您必须关闭 VM 才能更改访问范围。更改服务帐户角色不需要重新启动 VM。

关于云存储访问的问题:

如果服务帐号具有授予云存储访问权限的云存储角色,但存储的访问范围设置为无,则即使服务帐号具有所需角色,虚拟机也将无权访问云存储。在这种情况下,您必须关闭 VM 以更改访问范围以启用对云存储的访问。

如果 VM 访问范围启用了存储,但服务帐户没有 Cloud Storage 角色,则 VM 将无法访问 Cloud Storage。在这种情况下,将 Cloud Storage 角色添加到服务帐号将授予对 Cloud Storage 的访问权限,而无需重新启动 VM。

访问范围(OAuth 范围)是在 Google Cloud IAM 之前存在的遗留机制。鉴于您在生产环境中使用此虚拟机并且不需要关闭实例,我建议您执行以下操作:

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

【讨论】:

  • 此解决方案是否避免关闭 VM?第一个要点说要设置 VM 访问范围,但是可以在不关闭 VM 的情况下完成吗?
  • @MichaelNelson 编辑虚拟机访问范围需要关闭虚拟机。编辑分配给服务帐号的 IAM 角色不需要关闭虚拟机。
猜你喜欢
  • 1970-01-01
  • 2019-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-20
  • 2019-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多