【发布时间】: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