【问题标题】:IAM condition expression to allow named file upload允许命名文件上传的 IAM 条件表达式
【发布时间】:2021-09-25 14:24:27
【问题描述】:

我有一个名为 bucket-hr-data 的存储桶。其中有一个文件夹,名为payroll

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

这就是服务帐户的 IAM 条件。

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

这在大多数情况下都有效,除了当我尝试上传带有名称的文件时。

gsutil cp ./somefile.txt gs://bucket-hr-data/payroll/payroll/ - 有效 正如预期的那样

gsutil cp ./somefile.txt gs://bucket-hr-data/payroll/payroll/data1/ - 按预期工作

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

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

【问题讨论】:

  • 您的 extract 值 (extract("project ... /")) 中有一个终止 (/)。这是寻找以斜杠结尾的名称,somefile.txt 没有。
  • 不终止/,行为非常出乎意料。这些命令都不起作用。
  • 我会使用resource.name.startsWith("projects/_/buckets/bucket-hr-data/objects/payroll/payroll/")
  • @JohnHanley:技术上是一样的。 payroll/payroll/payroll/。相同的行为。无法使用gsutil cp ./newfile.txt gs://bucket-hr-data/payroll/payroll/somefile.txt上传文件
  • 显示您的整个状况。命令 1 和 3 应产生相同的对象名称并产生相同的条件。缺少一个细节。

标签: google-cloud-platform google-cloud-storage google-iam


【解决方案1】:

您的存储桶的访问控制可以是细粒度的。对于使用统一存储桶级访问权限的存储桶,Cloud Storage 的 IAM 政策条件为 only available

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

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

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

更新:检查您的 IAM 角色。如果您的服务帐户只有 Storage Object CreatorStorage Object Viewer 角色,然后尝试上传存储桶对象中已存在的对象将返回 403,因为对象创建者角色没有删除对象的权限。

【讨论】:

  • 没有。桶访问控制是统一的。
  • @Asdfg 一定是我们遗漏了什么,我认为这与您的 IAM 有关,其中服务帐户仅有权上传对象,但没有替换 它。我更新了我的答案,请检查一下。
  • 服务帐户具有对象存储管理员角色。
  • @Asdfg 可能看起来多余,但请尝试在您的服务帐户中添加Storage Object Viewer 角色。等待几分钟,然后让我知道它是否有效。总的来说,角色应该是Storage Object Admin(此处应用条件)和Storage Object Viewer
  • 只有当我在存储桶级别授予Storage Object Viewer 权限时,它才能按预期工作。我猜这是因为cp 必须列出存储桶的内容以确定是否需要创建前缀payroll
猜你喜欢
  • 1970-01-01
  • 2017-01-28
  • 1970-01-01
  • 2016-07-26
  • 1970-01-01
  • 2013-01-29
  • 2011-10-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多