我是某个项目的项目所有者,该项目的存储桶中有几百 GB 的对象。最近,我通过失败的 gcloud rsync 发现存储桶中有一些对象我可以访问,list
但不能访问cp
等等acl get
,无论是从命令行还是从云控制台。
例如:
gsutil acl get gs://$MYBUCKET/$SOMEOBJECT
AccessDeniedException: Access denied. Please ensure you have OWNER permission on gs://$MYBUCKET/$SOMEOBJECT
我有
- 已验证 我已被认证为正确的用户 (
gcloud auth list
) - 确认我处于项目的角色/所有者成员部分(
gcloud projects get-iam-policy $PROJECT_ID
) - 已验证该存储桶属于该项目(实体“project-owners-$PROJECT_ID”具有项目编号 $PROJECT_ID 和角色 OWNER)。
- 尽管我是该项目的创建者,但同样的问题也出现在谷歌云控制台中
到底发生什么事了?
答案1
对 GCS 资源的访问不是递归的。拥有一个项目或该项目中的存储桶并不一定意味着您也拥有对某个特定对象的读取权限。拥有存储桶确实意味着您可以列出或删除该对象,但仅此而已。
对象的所有者始终是上传该对象的用户。默认情况下,对象的 ACL 将与存储桶的“默认对象 ACL”设置一致,但上传者可以在上传过程中选择任何其他 ACL。
答案2
您可以将 Cloud IAM 政策设置为项目或存储桶。
例如,如果您是项目所有者,并且想要完全访问项目中的所有存储桶,请按照以下步骤操作。
- 打开IAM 管理
- 点击
Edit permissions
与要添加 Cloud IAM 政策的用户关联的图标 - 添加
[Storage]
-[Storage Admin]
角色。不是[Storage Legacy]
。 - 点击
Save
按钮
这样,即使您不是该对象的所有者,您也被授予对该对象的完全访问权限。
答案3
我已经使用 IAM 解决了类似的问题,如下所示:
gsutil iam ch 'user:[email protected]:legacyObjectOwner' gs://mybucket
此后,用户拥有所有者权限。
答案4
我遇到过类似的情况:创建对象的服务帐户被列为 OWNER(带有gsutil acl get gs://...
),但未能设置 ACL。然后我在以下引文中找到了https://cloud.google.com/storage/docs/access-control/lists#predefined-acl:
您不能应用更改存储桶或对象所有权的 ACL(不要将其与 OWNER 权限混淆)