本页面介绍如何将您拥有的对象设为可供公共互联网上的所有人读取。如需了解如何访问已公开的数据,请参阅访问公开数据。
当对象被公开共享时,只要对象处于公开状态,则任何知道对象 URI 的用户都可以访问该对象。
前提条件
前提条件因所使用的工具而异:
控制台
如需使用 Google Cloud Console 完成本指南,您必须拥有适当的 IAM 权限。如果要访问的对象或存储桶在不是由您创建的项目中,则可能需要项目所有者为您提供包含必要权限的角色。
如需查看特定操作所需权限的列表,请参阅 Google Cloud Console 的 IAM 权限。
如需查看相关角色的列表,请参阅 Cloud Storage 角色。或者,您也可以创建一个自定义角色,并为其提供具体受限的权限。
命令行
为使用命令行实用程序完成本指南,您必须拥有适当的 IAM 权限。如果要访问的对象或存储桶在不是由您创建的项目中,则可能需要项目所有者为您提供包含必要权限的角色。
如需查看特定操作所需权限的列表,请参阅 gsutil 命令的 IAM 权限。
如需查看相关角色的列表,请参阅 Cloud Storage 角色。或者,您也可以创建一个自定义角色,并为其提供具体受限的权限。
代码示例
如需使用 Cloud Storage 客户端库完成本指南,您必须拥有适当的 IAM 权限。如果要访问的对象或存储桶在不是由您创建的项目中,则可能需要项目所有者为您提供包含必要权限的角色。除非另有说明,否则客户端库请求通过 JSON API 发出。
如需查看特定操作所需的权限列表,请参阅 JSON 方法的 IAM 权限。
如需查看相关角色的列表,请参阅 Cloud Storage 角色。或者,您也可以创建一个自定义角色,并为其提供具体受限的权限。
REST API
JSON API
如需使用 JSON API 完成本指南,您必须拥有适当的 IAM 权限。如果要访问的对象或存储桶在不是由您创建的项目中,则可能需要项目所有者为您提供包含必要权限的角色。
如需查看特定操作所需的权限列表,请参阅 JSON 方法的 IAM 权限。
如需查看相关角色的列表,请参阅 Cloud Storage 角色。或者,您也可以创建一个自定义角色,并为其提供具体受限的权限。
将个别对象设为可公开读取
如需将个别对象设为可供公共互联网上的所有人读取,请执行以下操作:
控制台
- 在 Google Cloud Console 中,转到 Cloud Storage 的浏览器页面。
点击您要公开的对象所在存储桶的名称,然后导航到该对象所在的位置(如果该对象位于子目录中)。
点击与您要公开的对象关联的更多操作菜单 (
)。
从下拉菜单中选择修改访问权限。
在出现的叠加窗口中,点击 + 添加条目按钮。
为 allUsers 添加权限。
- 为“实体”选择公共。
- 为“名称”选择 allUsers。
- 为“访问权限”选择读取者。
点击保存。
授予公开访问权限后,复制网址将显示在“公开访问权限”列中。您可以点击此按钮以获取对象的公开网址。
如需了解如何获取有关 Cloud Storage 浏览器中失败操作的详细错误信息,请参阅问题排查。
命令行
使用 gsutil acl ch
命令:
gsutil acl ch -u AllUsers:R gs://BUCKET_NAME/OBJECT_NAME
其中:
BUCKET_NAME
是包含待公开对象的存储分区的名称。例如my-bucket
。OBJECT_NAME
是您要公开的对象的名称。例如pets/dog.png
。
如果成功,则响应类似如下示例:
Updated ACL on gs://my-bucket/pets/dog.png
代码示例
C++
如需了解详情,请参阅 Cloud Storage C++ API 参考文档。
C#
如需了解详情,请参阅 Cloud Storage C# API 参考文档。
Go
如需了解详情,请参阅 Cloud Storage Go API 参考文档。
Java
如需了解详情,请参阅 Cloud Storage Java API 参考文档。
Node.js
如需了解详情,请参阅 Cloud Storage Node.js API 参考文档。
PHP
如需了解详情,请参阅 Cloud Storage PHP API 参考文档。
Python
如需了解详情,请参阅 Cloud Storage Python API 参考文档。
Ruby
如需了解详情,请参阅 Cloud Storage Ruby API 参考文档。
REST API
JSON API
- 从 OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。 如需了解相关说明,请参阅 API 身份验证。
创建一个包含以下信息的 JSON 文件:
{ "entity": "allUsers", "role": "READER" }
使用
cURL
,通过Insert
ACL 请求调用 JSON API:curl -X POST --data-binary @JSON_FILE_NAME \ -H "Authorization: Bearer OAUTH2_TOKEN" \ -H "Content-Type: application/json" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/o/OBJECT_NAME/acl"
其中:
JSON_FILE_NAME
是您在第 2 步中创建的文件的路径。OAUTH2_TOKEN
是您在第 1 步中创建的访问令牌。BUCKET_NAME
是包含待公开对象的存储分区的名称。例如my-bucket
。OBJECT_NAME
是您要公开的对象的网址编码名称。例如,pets/dog.png
的网址编码为pets%2Fdog.png
。
XML API
- 从 OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。 如需了解相关说明,请参阅 API 身份验证。
创建一个包含以下信息的 XML 文件:
<AccessControlList> <Entries> <Entry> <Scope type="AllUsers"/> <Permission>READ</Permission> </Entry> </Entries> </AccessControlList>
使用
cURL
,通过Set Object ACL
请求调用 XML API:curl -X PUT --data-binary @XML_FILE_NAME \ -H "Authorization: Bearer OAUTH2_TOKEN" \ "https://storage.googleapis.com/BUCKET_NAME/OBJECT_NAME?acl"
其中:
XML_FILE_NAME
是您在第 2 步中创建的文件的路径。OAUTH2_TOKEN
是您在第 1 步中创建的访问令牌。BUCKET_NAME
是包含待公开对象的存储分区的名称。例如my-bucket
。OBJECT_NAME
是您要公开的对象的网址编码名称。例如,pets/dog.png
的网址编码为pets%2Fdog.png
。
将存储桶中的所有对象设为可供公开读取
如需将存储分区中的所有对象设为可供公共互联网上的所有人读取,请执行以下操作:
控制台
- 在 Google Cloud Console 中,转到 Cloud Storage 的浏览器页面。
在存储分区列表中,点击要公开的存储分区的名称。
选择页面顶部附近的权限标签。
在权限部分中,点击 + 添加按钮。
此时会显示“添加主帐号”对话框。
在新的主帐号字段中,输入
allUsers
。在选择角色下拉列表的过滤条件框中输入 Storage Object Viewer,然后从过滤后的结果中选择 Storage Object Viewer。
点击保存。
点击允许公开访问。
授予公开访问权限后,针对每个对象的复制网址将显示在“公开访问权限”列中。您可以点击此按钮以获取对象的公开网址。
如需了解如何获取有关 Cloud Storage 浏览器中失败操作的详细错误信息,请参阅问题排查。
命令行
使用 gsutil iam ch
命令:
gsutil iam ch allUsers:objectViewer gs://BUCKET_NAME
其中 BUCKET_NAME
是您要公开其对象的存储分区的名称。例如 my-bucket
。
代码示例
C++
如需了解详情,请参阅 Cloud Storage C++ API 参考文档。
Go
如需了解详情,请参阅 Cloud Storage Go API 参考文档。
Java
如需了解详情,请参阅 Cloud Storage Java API 参考文档。
Node.js
如需了解详情,请参阅 Cloud Storage Node.js API 参考文档。
Python
如需了解详情,请参阅 Cloud Storage Python API 参考文档。
Ruby
如需了解详情,请参阅 Cloud Storage Ruby API 参考文档。
Terraform
您可以使用 Terraform 资源将存储桶中的所有对象设为公开。
REST API
JSON API
- 从 OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。 如需了解相关说明,请参阅 API 身份验证。
创建一个包含以下信息的 JSON 文件:
{ "bindings":[ { "role": "roles/storage.objectViewer", "members":["allUsers"] } ] }
使用
cURL
,通过PUT
Bucket 请求调用 JSON API:curl -X PUT --data-binary @JSON_FILE_NAME \ -H "Authorization: Bearer OAUTH2_TOKEN" \ -H "Content-Type: application/json" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/iam"
其中:
JSON_FILE_NAME
是您在第 2 步中创建的文件的路径。OAUTH2_TOKEN
是您在第 1 步中创建的访问令牌。BUCKET_NAME
是您要公开其对象的存储分区的名称。例如my-bucket
。
XML API
XML API 不支持将存储分区中的所有对象设为可供公开读取。请改用 gsutil 或 JSON API。