GCS:如何使用最低权限服务帐户备份和保留版本

时间:2021-02-10 06:34:25

标签: google-cloud-storage gsutil

我想设置一个可以每天将文件备份保存到 Google Cloud Storage 的服务帐户。

我打算使用对象版本控制和维护文件的最新 30 个版本的生命周期策略来做到这一点。

但是,我发现了同一个文件的 gsutil requires the delete privilege to create a new version

给备份进程删除权限似乎有点疯狂,并且与最小权限原则不符,因为我的理解是这使服务帐户能够执行 gsutil rm -a 并全部删除一次性备份多个版本。

那么,实现这一目标的最佳、最低权限的方法是什么?

我每次都可以在文件名后附加一个时间戳,但是我无法使用生命周期管理,并且必须编写自己的脚本来确定哪些是最近的 30 个并删除其余的。

有没有更好/更简单的方法来做到这一点?

2 个答案:

答案 0 :(得分:0)

我能想到的解决此问题的最佳方法是拥有两个服务帐户——一个只能创建对象(使用时间戳创建备份),另一个可以列出和删除它们。

  • 帐户 1 将创建您的备份,使用带时间戳的文件名以避免覆盖并因此需要 storage.objects.delete 权限。
  • 帐户 2 的凭据将用于运行一个脚本,该脚本列出您的备份对象并删除除最近的 30 个对象之外的所有对象——您可以将此脚本作为某个虚拟机上的 cronjob 运行,或者仅在新的使用 Cloud Pub/Sub to trigger a Cloud Function 上传备份。

答案 1 :(得分:0)

我们最终只是将文件保存为不同的文件名(例如 backup-YYYYMMDD)并使用保留策略在 30 天后删除该文件。

它并不严格,如果备份失败 30 天,那么所有版本都将被删除,但我们认为我们已经做好了足够的准备,以至于有人会在 30 天前注意到这一点。

我们不喜欢把它留给脚本来进行删除,因为:

  1. 更容易出错
  2. 这意味着我们最终仍然拥有一个可以删除文件的服务帐户,而我们的真正目的是限制该权限。