GCS 权限精细控制

作者:MeshCloud脉时云 公有云架构师 吴子成

引言

需求场景:限定用户对指定Bucket下指定目录对象文件有指定的访问权限

示例 Demo场景:

  • 人员甲:可以对指定bucket的目录拥有上传、下载、列出对象的权限(gsutil cp/ls)
  • 人员乙:可以对指定bucket的目录拥有上传、下载、删除以及覆盖同名文件的权限(gsutil cp/rm/ls)

整体架构

场景预设信息

  • 存储桶名称:bucket-zicheng
  • 访问控制类型:Uniform
  • 桶目录结构:

目标

  • 人员甲对data2目录,和/data1/data1_1有上传、下载、列出具体对象的权限
  • 人员乙对data2目录,和/data1/data1_1有上传、下载、删除、覆盖同名文件的权限

准备工作

提前创建GCS桶,并按预设定的桶目录结构创建好目录。

实施步骤

1) 配置人员甲的权限

给予Storage Object Creator、Storage Object Viewer权限,并配置特殊路径条件访问策略。

点击”GRANT ACCESS”添加service account赋予对应权限

添加对应的权限和条件

上传权限(Storage Object Creator)条件配置明细:

test

下载权限(Storage Object Viewer)条件配置明细:

resource.type == “storage.googleapis.com/Object” && (

resource.name.startsWith(“projects/_/buckets/bucket-zicheng/objects/data2/”) || (

resource.name.startsWith(“projects/_/buckets/bucket-zicheng/objects/data1/data1_1/”)))

列出具体对象权限(Storage Object Viewer)条件配置明细:

resource.type == “storage.googleapis.com/Bucket” && (

resource.name.startsWith(“projects/_/buckets/bucket-zicheng/objects/data2/”) || (

resource.name.startsWith(“projects/_/buckets/bucket-zicheng/objects/data1/data1_1/”)))

这里资源类型选的是Bucket,是因为要列出指定目录下的所有对象。

p.s.

条件类型为name时,对象路径的值为projects/_/buckets/bucket-name/objects/object-name

需要注意的是,object为目录时,object-name需要带正斜杠,如

projects/_/buckets/bucket-zicheng/objects/data2/

2) 配置人员乙的权限

创建自定义role

添加Storage Object Creator、Storage Object Viewer和最小权限storage.objects.delete

自定义role的条件配置明细:(覆盖同名文件权限=上传权限+删除权限)

resource.type == “storage.googleapis.com/Object” && (

resource.name.startsWith(“projects/_/buckets/bucket-zicheng/objects/data2/”) || (

resource.name.startsWith(“projects/_/buckets/bucket-zicheng/objects/data1/data1_1/”)))

验证

1) 人员甲

上传1.txt到/data2和/data1/data1_1目录成功,上传到/data1/data1_2目录提示403没有权限

下载/data2/1.txt到/tmp目录成功,下载/data1/data1_2目录下的msg.log提示403没有权限

list具体对象,list /data2/1.txt成功,list /data1/data1_2/msg.log提示403没有权限

2) 人员乙

上传1.txt到/data2覆盖同名文件成功

删除/data2/1.txt成功,删除/data1/data1_2/msg.log提示403没有权限

发表评论

您的电子邮箱地址不会被公开。