在不停止 VM 的情况下修改 gcloud VM 服务帐户权限

Modifying gcloud VM service account permissions without stopping the VM

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

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

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

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

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

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

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

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

这两种方法可以一起使用。 Compute Engine 实例的总权限 available 由服务帐户控制。然后,访问范围将分配的权限限制到虚拟机。

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

对于这个关于云存储访问的问题:

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

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

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

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