在 GCS 存储中,当向存储桶(不是整个项目;只是该项目中的一个存储桶)添加权限时,您过去能够设置存储桶的权限,以便将任何新对象放入存储桶继承存储桶的权限。
然而,在最新版本的 GCS 中,我们还无法弄清楚如何做到这一点。我们可以为根桶设置权限:
{
"email": "someuser@someaccount.iam.gserviceaccount.com",
"entity": "someuser@someaccount.iam.gserviceaccount.com",
"role": "READER"
}
但是当一个新对象被放入那个桶时,它不会继承这个角色。
有没有办法 (a) 继承角色,或 (b) 为存储桶设置 IAM 角色(我们只能为项目设置 IAM 角色,而不是特定的存储桶)?
谢谢!
最佳答案
有五种不同的配置方式Access Control options用于 Cloud Storage 存储桶。我建议您使用访问控制列表 (ACL) 来继承单个存储桶中的角色,因为当“您需要对单个对象进行细粒度控制”时会使用 ACL。
要使用控制台更改项目中单个存储桶的权限,
- 转到存储、浏览器。到达那里后,您将看到一个遗愿 list 。
- 选择您要更改权限的存储桶。
- 点击右侧的三个垂直点,然后选择“编辑存储桶权限”。
- 键入您要配置的帐户并选择所需的角色。
描述的过程很详细here ,以及其他设置 ACL 的方法,例如使用 Cloud Shell。下一个命令指定个人授权:
gsutil acl ch -u [USER_EMAIL]:[PERMISSION] gs://[BUCKET_NAME]
查找预定义角色列表 here .
更新 2
考虑下一个错误:
CommandException: user@account.iam.gserviceaccount.com:roles/storage.legacyBucketReader is not a valid ACL change Allowed permissions are OWNER, WRITER, READER
事实上涉及两种类型的角色:
Identity and Access Management (IAM) roles :成员面向项目的角色。 “定义谁(身份)对哪种资源具有何种访问权限(角色)”。 Example :
gsutil iam ch user:[USER_EMAIL]:objectCreator,objectViewer gs://[BUCKET_NAME]
Access Control Lists (ACLs) :授予用户对单个存储桶或对象的读取或写入访问权限。 Example :
gsutil acl ch -u [USER_EMAIL]:READER gs://[BUCKET_NAME]
命令无效,因为两个命令混合在一起。对于 gsutil acl
,唯一可能的权限是 READER、WRITER、OWNER、Default,如您所见 here .
关于google-cloud-storage - 对象不继承桶权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49778422/