47

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

尝试读取我得到的文件时

```

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

```

我还尝试在谷歌云控制台中添加一个具有对象默认权限对话框的域。这给了我错误“您的权限之一无效。请确保您输入组和用户的授权 ID 或电子邮件以及域的域”

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

4

6 回答 6

49

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

GCS 存储桶访问

于 2018-04-13T05:34:27.333 回答
45

You can use gsutil to make new objects created in the bucket publicly readable without removing your ownership. To make new objects created in the bucket publicly readable:

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

If you have existing objects in the bucket that you want to make publicly readable, you can run:

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

于 2016-10-25T20:06:37.697 回答
11

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

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

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

gsutil iam ch allUsers:objectViewer gs://bucket-name
于 2018-07-07T17:23:39.563 回答
8
  1. 在 Google Cloud Platform Console 中打开 Cloud Storage 浏览器。
  2. 在存储桶列表中,单击包含要公开的对象的存储桶的名称,如果该对象位于子目录中,则导航到该对象。
  3. 单击与要公开的对象关联的下拉菜单。
  4. 下拉菜单显示为对象所在行最右侧的三个垂直点。
  5. 从下拉菜单中选择编辑权限。
  6. 在出现的叠加层中,单击 + 添加项目按钮。
  7. 为 allUsers 添加权限。

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

从 Google Cloud Docs公开数据的说明

于 2018-11-28T18:53:09.023 回答
3

如果您在firebase 函数中上传文件,则需要调用makePublic()引用对象以使其无需传递令牌即可访问。

于 2019-05-01T09:12:14.553 回答
0

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

  • 但这是针对不公开的存储桶中的特定内容!
于 2019-10-29T16:06:24.860 回答