如何将 GCP 存储桶中的文件标记为 "everyone" 只读?

How to mark files in a GCP storage bucket as Read Only for "everyone"?

我们有一个存储桶,其中以 JSON 文件的形式存储敏感数据。为了 PCI 合规性,我们必须将这些文件设为只读。
将在存储桶上启用版本控制,因此无法使用 Retention policy
我尝试在存储桶权限中只保留一个具有只读访问权限的帐户,这(不是真的)部分地达到了目的。但是任何具有编辑者或所有者角色的用户都可以编辑文件权限并将其更改回可编辑并修改文件。
如何限制任何人和所有人不能编辑或修改文件GCP?

Google 云平台在技术上是否可行?
如果不是,如何尽可能减少对文件的访问?

编辑
我不确定我们是否会强制启用版本控制,我会与团队讨论这个问题(一旦他们可用)并在问题中提及。
因此,也欢迎考虑 "versioning will not be enabled" 或完全忽略 versioning 的答案。

Google IAM 权限是加法的,而不是减法的。这意味着任何拥有 Owner 角色的人都拥有 read/write/modify/delete 所需的权限。权限一经授予便无法限制。

既然您提到了 PCI DSS 合规性,我建议您创建一个新项目。在此项目中分配项目所有者。然后创建一个组并将其他所有人添加到该组。仅授予组存储读取权限。在此项目中创建一个新存储桶,并将您要保护的对象存储在那里。由于只有一个(或几个)定义明确的所有者,因此可以对其他所有人强制执行只读权限。

我不知道有什么方法可以在不使用保留策略的情况下保护具有具有写入权限的角色的 IAM 成员的现有存储桶。版本控制保护对象数据不因访问数据需要版本的问题而被破坏。

注意:您无法编辑或修改 Google 云存储中的对象。任何更改都需要创建一个新对象。

以下答案假定您将选择禁用版本控制,因为它与保留策略不兼容。

您可能需要 GCS 的 Bucket Lock 功能。在存储桶上放置保留策略可确保存储桶中所有当前和未来的对象在达到您在保留策略中定义的期限之前都不会被删除或覆盖,这听起来正是您想要的。启用它并验证它与您的工作流一起正常工作后,您可以将策略锁定到位,以不可撤销地撤销您在指定保留日期之前删除对象的能力。

对于现有的存储桶来说,这是一个严肃的决定,所以我在打开它之前阅读了它:https://cloud.google.com/storage/docs/bucket-lock

一旦您决定启用它,您可以从控制台或使用 gsutil 执行此操作:

gsutil retention set 1y gs://my-bucket-name  # 1y = 1 year

一旦你开心并想让它永久化:

gsutil retention lock gs://my-bucket-name

如顶部所述,此功能与另一个对象保存选项不兼容:版本控制。然而,这通常不是问题,因为版本控制最常见的用例是防止意外删除,如果您的目标是防止任何可能的删除,则不需要版本控制。