允许GCS存储桶上的公共读取访问权限?

时间:2016-10-25 05:45:24

标签: google-cloud-storage google-cloud-platform meteor-slingshot

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

尝试阅读文件时

```

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

```

我还尝试在Google云端控制台中添加具有对象默认权限对话框的域。这给了我错误&#34;你的一个权限无效。确保您为组和用户输入授权ID或电子邮件,并为域&#34;

输入域

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

6 个答案:

答案 0 :(得分:31)

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

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

如果存储桶中存在要公开读取的现有对象,则可以运行:

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

答案 1 :(得分:27)

您也可以从控制台进行操作 https://console.cloud.google.com/storage/
选择编辑存储桶权限:
在“添加成员”选项中输入“allUsers”,并在“存储对象查看器”中输入该角色。 然后转到“选择角色”并将“存储”和“存储对象旧版”设置为“存储对象视图”

GCS bucket access

答案 2 :(得分:7)

使用IAM角色,使文件可读,并屏蔽列表:

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

使文件可读并允许列出:

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

答案 3 :(得分:3)

  1. 在Google Cloud Platform Console中打开Cloud Storage浏览器。
  2. 在存储桶列表中,单击包含要公开的对象的存储桶的名称,然后导航到该对象在子目录中的位置。
  3. 单击与要公开的对象关联的下拉菜单。
  4. 下拉菜单显示为对象行最右侧的三个垂直点。
  5. 从下拉菜单中选择“编辑权限”。
  6. 在显示的叠加层中,点击+添加项目按钮。
  7. 为allUser添加权限。

    • 为实体选择用户。
    • 输入allUsers作为名称。
    • 选择阅读器进行访问。
    • 点击保存。
  8. 一旦公开共享,链接图标就会出现在“公共访问权限”列中。您可以单击此图标来获取对象的URL。

Google云文档中关于Making Data Public的说明

答案 4 :(得分:0)

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

答案 5 :(得分:0)

如果要允许使用特定的“文件夹/内容”访问特定存储桶,则必须在命令中指定: gsutil iam -r ch allUsers:legacyObjectReader gs://your-bucket/your-files/**

  • 但这是针对不公开的存储桶中的特定内容!
相关问题