允许对 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
- 在 Google 云平台控制台中打开云存储浏览器。
- 在存储桶列表中,单击包含您要创建的对象的存储桶的名称 public,如果它位于子目录中,则导航至该对象。
- 单击与您要创建的对象关联的下拉菜单 public。
- 下拉菜单显示为对象行最右侧的三个垂直点。
- Select 从下拉菜单中编辑权限。
- 在出现的叠加层中,单击“+ 添加项目”按钮。
为所有用户添加权限。
- Select 实体用户。
- 输入 allUsers 作为名称。
- Select Reader 访问。
- 点击保存。
共享 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 访问”:
最后,您可以允许所有用户读取您存储桶中的文件:
我正在尝试允许匿名(或仅来自我的应用程序域)读取我的存储桶中的文件。
尝试读取文件时我得到
```
<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
- 在 Google 云平台控制台中打开云存储浏览器。
- 在存储桶列表中,单击包含您要创建的对象的存储桶的名称 public,如果它位于子目录中,则导航至该对象。
- 单击与您要创建的对象关联的下拉菜单 public。
- 下拉菜单显示为对象行最右侧的三个垂直点。
- Select 从下拉菜单中编辑权限。
- 在出现的叠加层中,单击“+ 添加项目”按钮。
为所有用户添加权限。
- Select 实体用户。
- 输入 allUsers 作为名称。
- Select Reader 访问。
- 点击保存。
共享 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 访问”:
最后,您可以允许所有用户读取您存储桶中的文件: