允许对 GCS 存储桶进行 Public 读取访问?

Allow Public Read access on a GCS bucket?

我正在尝试允许匿名(或仅来自我的应用程序域)读取我的存储桶中的文件。

尝试读取文件时我得到

```

<Error>
    <Code>AccessDenied</Code>
    <Message>Access denied.</Message>
    <Details>
        Anonymous users does not have storage.objects.get access to object.
    </Details>
</Error>

```

我还尝试在 google 云控制台中使用对象默认权限对话框添加域。这给了我错误 "One of your permissions is invalid. Make sure that you enter an authorized id or email for the groups and users and a domain for the domains"

我还研究过为存储桶制作 ACL public-read。我唯一的问题是它删除了我对存储桶的所有权。我需要拥有该所有权,因为我想允许从特定的 Google 访问 ID 上传。

您可以使用 gsutil 使存储桶中创建的新对象公开可读,而无需删除您的所有权。要使存储桶中创建的新对象公开可读:

gsutil defacl ch -u AllUsers:R gs://yourbucket

如果您希望公开读取存储桶中的现有对象,您可以运行:

gsutil acl ch -u AllUsers:R gs://yourbucket/**

您也可以从控制台执行此操作。
https://console.cloud.google.com/storage/
选择编辑存储桶权限:
在 Add Members 选项中输入“allUsers”,并输入“Storage Object Viewer”作为角色。 然后转到“Select一个角色”并将“存储”和“存储对象旧版”设置为“存储对象视图”

使用 IAM 角色,使文件可读,并阻止列表:

gsutil iam ch allUsers:legacyObjectReader gs://bucket-name

要使文件可读,并允许列出:

gsutil iam ch allUsers:objectViewer gs://bucket-name
  1. 在 Google 云平台控制台中打开云存储浏览器。
  2. 在存储桶列表中,单击包含您要创建的对象的存储桶的名称 public,如果它位于子目录中,则导航至该对象。
  3. 单击与您要创建的对象关联的下拉菜单 public。
  4. 下拉菜单显示为对象行最右侧的三个垂直点。
  5. Select 从下拉菜单中编辑权限。
  6. 在出现的叠加层中,单击“+ 添加项目”按钮。
  7. 为所有用户添加权限。

    • Select 实体用户。
    • 输入 allUsers 作为名称。
    • Select Reader 访问。
    • 点击保存。
  8. 共享 public 次后,link 图标会出现在 public 访问栏中。您可以单击此图标获取对象的 URL。

关于 Making Data Public 的说明来自 Google Cloud Docs

如果您在 firebase 函数 中上传文件,您需要在引用对象上调用 makePublic() 以便在不传递令牌的情况下访问它。

如果您想允许特定的存储桶可以通过特定的 "folder/content" 访问,那么您必须在命令中指定: gsutil iam -r ch allUsers:legacyObjectReader gs://your-bucket/your-files/**

  • 但这是针对存储桶内的特定内容,不是 public!

2022 年 4 月更新:

您可以允许所有用户读取您在 Cloud Storage 上的存储桶中的文件。

首先,在存储桶详细信息中,点击“PERMISSIONS”,然后点击“ADD” :

然后,输入 "allUsers":

然后,select 角色“Storage Legacy Object Reader” 让所有用户都可以读取文件:

然后,点击“保存”:

然后,您应该会被询问,如下所示,因此请单击 “允许 PUBLIC 访问”:

最后,您可以允许所有用户读取您存储桶中的文件: