我正在努力让第三方访问 GCP 存储桶,他们可以通过
https://storage.googleapis.com/<bucketname>/
访问该存储桶。我一直在遵循为GCP 验证的浏览器下载设定的步骤。
存储桶具有统一的访问级别,并且公共访问设置为关闭。此存储桶和关联的项目不在组织内 - 这是通过私人帐户运行的。
我已使用控制台向存储桶添加了两个具有
Storage Object Viewer
权限的用户。但是,如果我作为这些用户之一登录(使用不同的浏览器),我会收到“访问被拒绝”消息。
我想知道权限错误是否是由于使用
gsutil
上传内容后才添加用户造成的,所以我尝试在存储桶上添加读取权限:
gsutil acl ch -r -u <gmailuser>:R gs://<bucketname>/
CommandException: Failed to set acl for gs://<bucketname>/subdir/. Please ensure you have OWNER-role access to this resource.
自从我作为项目和存储桶所有者运行
gsutil
以来,也许我以某种方式弄乱了权限。非常感谢您的见解。
根据预定义的 ACL 准则,通过将预定义的 ACL 应用于现有存储桶或对象,您可以将现有的存储桶或对象 ACL 完全替换为预定义的 ACL。在某些情况下,此更改可能会导致您失去对存储桶或对象 ACL 的访问权限。这可能会删除存储桶所有者权限,并且在尝试访问它时会询问所有者权限。
您可以使用 IAM 角色 storage.objectAdmin,以便您拥有更新对象的 ACL 并更正更改所需的权限。在 IAM 中授予
Storage Legacy Bucket Owner
并尝试授予“存储管理员”和“存储对象管理员/创建者/查看者”权限,从而为存储桶授予所有者角色。
您还可以使用以下命令授予所有者权限:
gsutil acl ch -p owners-example-project:W gs://example-bucket
请参阅此doc了解更多示例。
更新答案: