本页面介绍如何将您拥有的对象设为可供公共互联网上的所有人读取。如需了解如何访问已公开的数据,请参阅访问公开数据。
当对象被公开共享时,只要对象处于公开状态,则任何知道对象 URI 的用户都可以访问该对象。
所需的角色
如需获得将对象设为可公开读取所需的权限,请让您的管理员为您授予包含您要设为公开的数据的存储桶的以下角色:
将存储桶中的所有对象设为可公开读取:Storage Admin (
roles/storage.admin
)将个别对象设为可公开读取:Storage Object Admin (
roles/storage.objectAdmin
)- 如果您打算使用 Google Cloud 控制台,则需要 Storage Admin (
roles/storage.admin
) 角色,而不是 Storage Object Admin 角色。
- 如果您打算使用 Google Cloud 控制台,则需要 Storage Admin (
这些角色可提供将对象设为公开所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
storage.buckets.get
storage.buckets.getIamPolicy
storage.buckets.setIamPolicy
storage.buckets.update
storage.objects.get
storage.objects.getIamPolicy
storage.objects.setIamPolicy
storage.objects.update
只有在使用 Google Cloud 控制台执行本页面上的任务时,才需要以下权限:
storage.buckets.list
storage.objects.list
如需了解如何授予存储桶的角色,请参阅将 IAM 与存储桶搭配使用。
将存储桶中的所有对象设为可供公开读取
如需将存储桶中的所有对象设为可供公共互联网上的所有人读取,请为主账号 allUsers
授予 Storage Object Viewer (roles/storage.objectViewer
) 角色:
控制台
- 在 Google Cloud 控制台中,进入 Cloud Storage 存储桶页面。
在存储桶列表中,点击您要设为公开的存储桶的名称。
选择页面顶部附近的权限标签。
在权限部分中,点击
授予访问权限按钮。系统会显示“授予访问权限”对话框。
在新的主账号字段中,输入
allUsers
。在选择角色下拉菜单的过滤条件框中输入
Storage Object Viewer
,然后从过滤后的结果中选择 Storage Object Viewer。点击保存。
点击允许公开访问。
授予公开访问权限后,针对每个对象的复制网址将显示在“公开访问权限”列中。您可以点击此按钮以获取对象的公开网址。
如需了解如何在 Google Cloud 控制台中获取失败的 Cloud Storage 操作的详细错误信息,请参阅问题排查。
命令行
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
在开发环境中,运行
buckets add-iam-policy-binding
命令:gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME --member=allUsers --role=roles/storage.objectViewer
其中
BUCKET_NAME
是您要公开其对象的存储桶的名称。例如my-bucket
。
客户端库
C++
如需了解详情,请参阅 Cloud Storage C++ API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
C#
如需了解详情,请参阅 Cloud Storage C# API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Go
如需了解详情,请参阅 Cloud Storage Go API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需了解详情,请参阅 Cloud Storage Java API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
如需了解详情,请参阅 Cloud Storage Node.js API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
PHP
如需了解详情,请参阅 Cloud Storage PHP API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
如需了解详情,请参阅 Cloud Storage Python API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Ruby
如需了解详情,请参阅 Cloud Storage Ruby API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Terraform
您可以使用 Terraform 资源将存储桶中的所有对象设为公开。
REST API
JSON API
安装并初始化 gcloud CLI,以便为
Authorization
标头生成访问令牌。或者,您可以创建访问令牌(使用 OAuth 2.0 Playground),并将其包含在
Authorization
标头中。创建一个包含以下信息的 JSON 文件:
{ "bindings":[ { "role": "roles/storage.objectViewer", "members":["allUsers"] } ] }
使用
cURL
,通过PUT
Bucket 请求调用 JSON API:curl -X PUT --data-binary @JSON_FILE_NAME \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/iam"
其中:
JSON_FILE_NAME
是您在第 2 步中创建的文件的路径。BUCKET_NAME
是您要公开其对象的存储桶的名称。例如my-bucket
。
XML API
XML API 不支持将存储桶中的所有对象设为可供公开读取。使用 Google Cloud 控制台或 gcloud storage
。
将存储桶的一部分设为可公开读取
使用托管式文件夹来控制名称前缀与托管式文件夹名称匹配的对象的访问权限。例如,您可以使用名为 my-folder
的托管式文件夹来控制名为 my-folder/cats.jpg
和 my-folder/dogs.jpg
的对象的访问权限。
如需将此类对象设为可公开访问,请先创建托管式文件夹,然后对该文件夹设置 IAM 政策以授予 allUsers
Storage Object Viewer (roles/storage.objectViewer
) 角色:
控制台
- 在 Google Cloud 控制台中,进入 Cloud Storage 存储桶页面。
点击包含您要设为公开的对象的存储桶的名称。
按照以下步骤创建一个文件夹:
点击创建文件夹按钮。
输入文件夹的名称。该文件夹转换为托管式文件夹后,以该名称开头的对象将受文件夹上设置的 IAM 角色的约束。
点击创建。
按照以下步骤将该文件夹转换为托管式文件夹:
在显示存储桶内容的窗格中,找到您创建的文件夹的名称,然后点击更多选项图标
。点击修改访问权限。
在随即显示的窗口中,点击启用。
按照以下步骤向文件夹添加 IAM 政策以授予
allUsers
Storage Object Viewer (roles/storage.objectViewer
) 角色:如果托管式文件夹的权限窗格尚未打开,请点击托管式文件夹对应的更多选项图标
,然后点击修改访问权限。在权限窗格中,点击
添加主账号按钮。在新的主账号字段中,输入
allUsers
。在选择角色下拉菜单的过滤条件框中输入
Storage Object Viewer
,然后从过滤后的结果中选择 Storage Object Viewer。点击保存。
点击允许公开访问。
授予公开访问权限后,针对每个适用对象的复制网址会显示在“公开访问权限”列中。您可以点击此按钮获取对象的公开网址。
如需了解如何在 Google Cloud 控制台中获取失败的 Cloud Storage 操作的详细错误信息,请参阅问题排查。
命令行
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
在开发环境中,使用
gcloud storage managed-folders create
命令创建托管式文件夹:gcloud storage managed-folders create gs://BUCKET_NAME/MANAGED_FOLDER_NAME/
其中:
BUCKET_NAME
是要在其中创建托管文件夹的存储桶的名称。例如my-bucket
。MANAGED_FOLDER_NAME
是要创建的托管文件夹的名称。例如my-managed-folder
。
在开发环境中,使用
gcloud storage managed-folders add-iam-policy-binding
命令将allUsers
添加到托管式文件夹的 IAM 政策中:gcloud storage managed-folders add-iam-policy-binding gs://BUCKET_NAME/MANAGED_FOLDER_NAME --member=allUsers --role=roles/storage.objectViewer
其中:
BUCKET_NAME
是包含您要向其添加 IAM 政策的托管式文件夹的存储桶的名称。例如my-bucket
。MANAGED_FOLDER_NAME
是您要向其添加公开访问权限的托管式文件夹的名称。例如my-managed-folder
。
REST API
JSON API
安装并初始化 gcloud CLI,以便为
Authorization
标头生成访问令牌。或者,您可以创建访问令牌(使用 OAuth 2.0 Playground),并将其包含在
Authorization
标头中。创建一个包含以下信息的 JSON 文件:
{ "name": "MANAGED_FOLDER_NAME" }
其中,
MANAGED_FOLDER_NAME
是要创建的托管式文件夹的名称。例如my-managed-folder
。使用
cURL
,通过Insert ManagedFolder
请求调用 JSON API:curl -X POST --data-binary @JSON_FILE_NAME \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/managedFolders"
其中:
JSON_FILE_NAME
是您在上一步中创建的文件的路径。BUCKET_NAME
是要在其中创建托管式文件夹的存储桶的名称。例如my-bucket
。
创建一个包含以下信息的 JSON 文件:
{ "bindings":[ { "role": "roles/storage.objectViewer", "members":["allUsers"] } ] }
使用
cURL
,通过setIamPolicy
ManagedFolder 请求调用 JSON API:curl -X PUT --data-binary @JSON_FILE_NAME \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/managedFolders/MANAGED_FOLDER_NAME/iam"
其中:
JSON_FILE_NAME
是您在上一步中创建的文件的路径。BUCKET_NAME
是包含您要向其添加 IAM 政策的托管式文件夹的存储桶的名称。例如my-bucket
。MANAGED_FOLDER_NAME
是您要向其添加 IAM 政策的托管式文件夹的名称。例如my-managed-folder
。
XML API
XML API 不支持使用托管式文件夹。请使用其他工具(例如 Google Cloud 控制台),或使用 Set Object ACL
请求为个别对象设置 ACL。以下是授予对象的 allUsers
访问权限的示例 ACL 文件:
<AccessControlList> <Entries> <Entry> <Scope type="AllUsers"/> <Permission>READ</Permission> </Entry> </Entries> </AccessControlList>