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

标签 google-cloud-platform virtual-machine gcloud

我正在尝试将文件从 Google Cloud 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. 分配给实例的服务帐户。

这两种方法可以一起使用。计算引擎实例的总权限可用由服务帐户控制。然后,访问范围限制分配给虚拟机的权限。

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

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

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

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

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

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

关于google-cloud-platform - 在不停止 VM 的情况下修改 gcloud VM 服务帐户权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66596277/

相关文章:

google-cloud-platform - GCP(谷歌云平台)支持SignalR吗?

java - 需要详细了解 "@"符号在 Google Cloud Apache Beam 代码中的使用方式

macos - 用于 Macos Catalina 的 Docker 桌面在容器中挂载 SD 卡卷作为循环设备以使用 dd 闪存 SD 卡

docker - 如何从 Google Container Registry 中彻底删除容器镜像?

python - GCloud 上传 httplib2.RedirectMissingLocation : Redirected but the response is missing a Location: header

google-cloud-platform - 如何在 Google Run 应用程序中安装存储桶?

linux - 取出标准输出值的一部分并将其放入数组变量中

python - 如何让多个虚拟机在 GCP 中的同一个脚本上运行?

android - 如何在 Firebase 测试实验室中执行指定的测试套件类

machine-learning - Python命名实体识别查找特定实体