我正在尝试将文件从 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 的权限。
- 访问范围
- 分配给实例的服务帐户。
这两种方法可以一起使用。计算引擎实例的总权限可用由服务帐户控制。然后,访问范围限制分配给虚拟机的权限。
您必须关闭虚拟机才能更改访问范围。更改服务帐户角色不需要重新启动 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/