代码之家  ›  专栏  ›  技术社区  ›  Asdfg

允许上载命名文件的IAM条件表达式

  •  0
  • Asdfg  · 技术社区  · 4 年前

    我有一个名为的水桶 bucket-hr-data 。其中有一个名为的文件夹 payroll .

    我正在尝试创建一个服务帐户 sa-payroll 只能管理该文件夹下的文件/文件夹。

    这就是我的IAM条件对于服务帐户的样子。

    resource.name.extract("projects/_/buckets/bucket-hr-data/objects/{name}/")=='payroll'
    

    这在大多数情况下都有效,除了当我试图上传一个有名字的文件时。

    gsutil cp/somefile.txt gs://bucket人力资源数据/工资单/工资单/-works 如预期

    gsutil cp/somefile.txt gs://bucket hr数据/工资单/工资单/data1/-按预期工作

    gsutil cp/somefile.txt gs://bucket hr data/payroll/payroll/somefile.txt-意外失败,返回403

    如何更改IAM条件表达式以使所有3个命令都能工作?

    0 回复  |  直到 4 年前
        1
  •  1
  •   Donnald Cucharo    4 年前

    您的bucket的访问控制可以是细粒度的。IAM云存储策略的条件是 only available 用于使用统一存储桶级别访问的存储桶。

    如果您想使用IAM条件配置存储桶的访问权限,解决方案是 enable 统一的桶级访问。

    我的测试存储桶具有统一级别的访问权限,并且此IAM条件运行良好。将IAM条件更改为:

    resource.name.startsWith("projects/_/buckets/BUCKET_NAME/objects/payroll/payroll/")
    

    更新: 检查您的IAM角色。如果您的服务帐户只有 Storage Object Creator Storage Object Viewer 角色,则尝试上载bucket对象中已经存在的对象将返回403,因为对象创建者角色无权 删去 一个物体。