我正在使用 Google Cloud Storage (GCS) 存储桶,我需要为这些存储桶中的对象设置条件访问控制。具体来说,我希望允许查看者访问特定文件夹结构中的对象,同时限制对同一存储桶内另一个文件夹中的对象的访问。这是我正在处理的文件夹结构的示例:
gs://bucket/23/10/01/folder_1
gs://bucket/23/10/02/folder_1
一般来说,结构遵循以下模式:
gs://bucket/{year}/{month}/{day}/folder_1
我想向查看者授予对
folder_1
对象的访问权限,但拒绝访问同一结构内的任何其他对象。例如,用户应该能够访问 folder_1
下的对象,如 gs://bucket/23/10/01/folder_1/some_file.txt
,但他们不应该访问 another_folder
下的对象,如 gs://bucket/23/10/01/another_folder/another_file.txt
。
我了解 IAM 策略可用于管理访问控制,但我不确定如何设置允许基于文件夹结构进行访问的条件绑定。有人可以提供有关如何在 GCS 中实现这种条件访问控制的指导吗?我需要制定任何具体的政策或规则来实现这一目标吗?
我探索了以下方法:
IAM 策略:我首先为我的 GCS 存储桶创建 IAM 策略。我尝试对存储桶中的各个对象设置权限,但找不到一种简单的方法来根据文件夹结构有条件地授予访问权限。
IAM 条件中的通配符:我尝试在 IAM 策略的条件中使用通配符,希望能够匹配文件夹结构。例如,我尝试了像
resource.name.startsWith("gs://bucket/*/folder_1/")
这样的条件,但它似乎没有按预期工作。
Google Cloud Storage 存储桶策略:我考虑创建存储桶策略来强制执行某些访问规则,但我找不到基于文件夹结构指定条件访问的方法。
尽管进行了这些尝试,我仍然无法实现所需的基于文件夹结构的条件访问控制。我现在正在向 Stack Overflow 社区寻求有关如何有效完成此任务的指导和见解。
预先感谢您的协助!
基于云存储对象命名空间的本文档:
对象名称驻留在存储桶内的平面命名空间中。这意味着:
不同的桶可以有同名的对象。
对象不驻留在存储桶的子目录中。
这意味着子目录或子文件夹并不真正存在,它只是文件夹/子文件夹的可视化表示,供我们在 Google Cloud Console 中查看。这也意味着我们无法为 Cloud Storage 存储桶内的每个对象应用不同或单独的 IAM 策略。
以下是我可以建议我们提供或限制对每个对象的访问的一些建议:
使用 访问控制列表 (ACL)。
创建新存储桶,然后应用适当的 IAM 策略以允许或拒绝对该存储桶的访问。
您还可以查看类似的Stackoverflow链接以供参考。