如何从 acl 控件禁用谷歌云存储桶列表?

Posted

技术标签:

【中文标题】如何从 acl 控件禁用谷歌云存储桶列表?【英文标题】:How to disable google cloud storage bucket list from acl control? 【发布时间】:2013-10-08 02:00:34 【问题描述】:

我们使用谷歌云存储作为我们的 CDN。

但是,任何访问者都可以通过键入以下内容列出所有文件:http://ourcdn.storage.googleapis.com/

如何在存储桶下的所有文件默认仍为公共可读的情况下禁用它?

我们之前使用

设置了 acl
gsutil defacl ch -g AllUsers:READ 

【问题讨论】:

【参考方案1】:

在 GCP 仪表板中:

    进入你的桶 点击“权限”标签进入。 在成员列表中找到“allUsers”,将角色从Storage Object Viewer更改为Storage Legacy Object Reader

那么,列表应该被禁用。

更新:

作为@Devy 评论,请查看here下方的注释

注意:roles/storage.objectViewer 包括列出存储桶中对象的权限。如果您不想公开授予列表,请使用roles/storage.legacyObjectReader。

【讨论】:

这是 GCP 文档中官方推荐的方式:cloud.google.com/storage/docs/access-control/…,因为 GCP Storage Legacy Object Reader 权限角色包特别没有列出权限。见截图:d1sz9tkli0lfjq.cloudfront.net/items/3v042M2q2a2q3Y2O1P1Y/… 很好的解决方案。处理 GCP 权限总是让人头疼,但这次很好。【参考方案2】:

在存储桶的根目录中上传一个空的 index.html 文件。打开存储桶设置并点击编辑网站配置 - 将index.html 设置为主页

它会阻止目录的列出。

【讨论】:

完美解决方案!谢谢! 但这并不能阻止其他目录的列表。根据接受的答案,将角色从 Storage Object Viewer 更改为 Storage Legacy Object Reader。【参考方案3】:

您的 defacl 看起来不错。问题很可能是由于某种原因,AllUsers 还必须在存储桶本身上具有 READ、WRITE 或 FULL_CONTROL。你可以用这样的命令清除那些:

gsutil acl ch -d AllUsers gs://bucketname

【讨论】:

【参考方案4】:

您的命令将存储桶上的默认对象 ACL 设置为 READ,这意味着任何人都可以访问对象。为了防止用户列出对象,您需要确保用户在存储桶本身上没有 ACL。

gsutil acl ch -d AllUsers gs://yourbucket

应该做到这一点。您可能需要为 AllAuthenticatedUsers 运行类似的命令;看看bucket ACL用

gsutil acl 获取 gs://yourbucket

而且应该很清楚。

【讨论】:

以上是关于如何从 acl 控件禁用谷歌云存储桶列表?的主要内容,如果未能解决你的问题,请参考以下文章

如何从能够搜索的谷歌云存储对象中获取视频流

如何使用 gsutil 通过 http 链接从谷歌云存储下载到 AWS 实例或 s3 存储桶?

谷歌云存储:我如何避免边缘缓存

从谷歌云存储桶中读取文件

将 github 存储库与谷歌云存储桶同步

谷歌云存储:401 未经授权的错误