本页面介绍了如何将您拥有的对象设为可供公共互联网上的所有人读取,以及如何从存储桶中移除公开访问权限。如需了解如何访问已公开的数据,请参阅访问公开数据。
当对象被公开共享时,只要对象处于公开状态,则任何知道对象 URI 的用户都可以访问该对象。
所需的角色
如需获得将对象设为可公开读取所需的权限,请让您的管理员为您授予包含您要设为公开的数据的存储桶的以下角色:
将存储桶中的所有对象设为可公开读取:Storage Admin (
roles/storage.admin
)将个别对象设为可公开读取:Storage Object Admin (
roles/storage.objectAdmin
)- 如果您打算使用 Trusted Cloud 控制台,则需要 Storage Admin (
roles/storage.admin
) 角色,而不是 Storage Object Admin 角色。
- 如果您打算使用 Trusted Cloud 控制台,则需要 Storage Admin (
从存储桶的所有对象中移除公开访问权限:Storage Admin (
roles/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
只有在使用Trusted Cloud 控制台执行本页面上的任务时,才需要以下权限:
storage.buckets.list
storage.objects.list
如需了解如何授予存储桶的角色,请参阅将 IAM 与存储桶搭配使用。
将存储桶中的所有对象设为可供公开读取
如需将存储桶中的所有对象设为可供公共互联网上的所有人读取,请为主账号 allUsers
授予 Storage Object Viewer (roles/storage.objectViewer
) 角色:
控制台
- 在 Trusted Cloud 控制台中,转到 Cloud Storage 存储桶页面。
在存储桶列表中,点击您要设为公开的存储桶的名称。
选择页面顶部附近的权限标签。
在权限部分中,点击
授予访问权限按钮。系统会显示“授予访问权限”对话框。
在新的主账号字段中,输入
allUsers
。在选择角色下拉菜单的过滤条件框中输入
Storage Object Viewer
,然后从过滤后的结果中选择 Storage Object Viewer。点击保存。
点击允许公开访问。
授予公开访问权限后,针对每个对象的复制网址按钮会显示在“公开访问权限”列中。您可以点击此按钮获取对象的公开网址。公开网址不同于通过直接右键点击对象所获取的链接。这两种链接均可访问对象,但公开网址无需用户登录用户账号即可使用。如需了解详情,请参阅请求端点。
如需了解如何在 Trusted Cloud 控制台中获取失败的 Cloud Storage 操作的详细错误信息,请参阅问题排查。
如需了解如何解决组织政策错误和权限错误,请参阅排查公开数据的问题。命令行
-
In the Trusted Cloud console, activate Cloud Shell.
At the bottom of the Trusted 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
。安装并初始化 gcloud CLI,以便为
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.s3nsapis.fr/storage/v1/b/BUCKET_NAME/iam"
其中:
JSON_FILE_NAME
是您在第 2 步中创建的文件的路径。BUCKET_NAME
是您要公开其对象的存储桶的名称。例如my-bucket
。
客户端库
C++
如需了解详情,请参阅 Cloud Storage C++ API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
C#
如需了解详情,请参阅 Cloud Storage C# API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
Go
如需了解详情,请参阅 Cloud Storage Go API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
Java
如需了解详情,请参阅 Cloud Storage Java API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
Node.js
如需了解详情,请参阅 Cloud Storage Node.js API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
PHP
如需了解详情,请参阅 Cloud Storage PHP API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
Python
如需了解详情,请参阅 Cloud Storage Python API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
Ruby
如需了解详情,请参阅 Cloud Storage Ruby API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
Terraform
您可以使用 Terraform 资源将存储桶中的所有对象设为公开。
REST API
JSON API
XML API
XML API 不支持将存储桶中的所有对象设为可供公开读取。使用 Trusted Cloud 控制台或 gcloud storage
。
将存储桶的一部分设为可公开读取
使用托管式文件夹来控制名称前缀与托管式文件夹名称匹配的对象的访问权限。例如,您可以使用名为 my-folder
的托管式文件夹来控制名为 my-folder/cats.jpg
和 my-folder/dogs.jpg
的对象的访问权限。
如需将此类对象设为可公开访问,请先创建托管式文件夹,然后对该文件夹设置 IAM 政策以授予 allUsers
Storage Object Viewer (roles/storage.objectViewer
) 角色:
控制台
- 在 Trusted Cloud 控制台中,转到 Cloud Storage 存储桶页面。
点击包含您要设为公开的对象的存储桶的名称。
按照以下步骤创建一个文件夹:
点击创建文件夹按钮。
输入文件夹的名称。该文件夹转换为托管式文件夹后,以该名称开头的对象将受文件夹上设置的 IAM 角色的约束。
点击创建。
按照以下步骤将该文件夹转换为托管式文件夹:
在显示存储桶内容的窗格中,找到您创建的文件夹的名称,然后点击更多选项图标
。点击修改访问权限。
在随即显示的窗口中,点击启用。
按照以下步骤向文件夹添加 IAM 政策以授予
allUsers
Storage Object Viewer (roles/storage.objectViewer
) 角色:如果托管式文件夹的权限窗格尚未打开,请点击托管式文件夹对应的更多选项图标
,然后点击修改访问权限。在权限窗格中,点击
添加主账号按钮。在新的主账号字段中,输入
allUsers
。在选择角色下拉菜单的过滤条件框中输入
Storage Object Viewer
,然后从过滤后的结果中选择 Storage Object Viewer。点击保存。
点击允许公开访问。
授予公开访问权限后,针对每个适用对象的复制网址按钮会显示在“公开访问权限”列中。您可以点击此按钮获取对象的公开网址。 公开网址不同于通过直接右键点击对象所获取的链接。这两种链接均可访问对象,但公开网址无需用户登录用户账号即可使用。如需了解详情,请参阅请求端点。
如需了解如何在 Trusted Cloud 控制台中获取失败的 Cloud Storage 操作的详细错误信息,请参阅问题排查。
如需了解如何解决组织政策错误和权限错误,请参阅排查公开数据的问题。命令行
-
In the Trusted Cloud console, activate Cloud Shell.
At the bottom of the Trusted 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
。
安装并初始化 gcloud CLI,以便为
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.s3nsapis.fr/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.s3nsapis.fr/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
。
REST API
JSON API
XML API
XML API 不支持使用托管式文件夹。请使用其他工具(例如 Trusted Cloud 控制台),或使用 Set Object ACL
请求为个别对象设置 ACL。以下是授予对象的 allUsers
访问权限的示例 ACL 文件:
<AccessControlList> <Entries> <Entry> <Scope type="AllUsers"/> <Permission>READ</Permission> </Entry> </Entries> </AccessControlList>
移除对存储桶中所有对象的公开访问权限
如需移除对存储桶中所有对象的公开访问权限,请移除向 allUsers
授予 Storage Object Viewer (roles/storage.objectViewer
) 角色的 IAM 政策:
控制台
- 在 Trusted Cloud 控制台中,转到 Cloud Storage 存储桶页面。
在存储桶列表中,点击要移除公开访问权限的存储桶的名称。
选择权限标签页。
应用于存储桶的 IAM 政策显示在权限部分中。
在按主账号查看标签页中,选中要移除的
allUsers
主账号的复选框。点击移除访问权限按钮。
在出现的叠加窗口中,点击确认。
如需了解如何在 Trusted Cloud 控制台中获取失败的 Cloud Storage 操作的详细错误信息,请参阅问题排查。
命令行
-
In the Trusted Cloud console, activate Cloud Shell.
At the bottom of the Trusted 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 remove-iam-policy-binding
命令:安装并初始化 gcloud CLI,以便为
Authorization
标头生成访问令牌。获取应用于存储桶的现有政策。为此,请使用
cURL
通过GET getIamPolicy
请求调用 JSON API:curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://storage.s3nsapis.fr/storage/v1/b/BUCKET_NAME/iam"
其中
BUCKET_NAME
是您要查看 IAM 政策的存储桶的名称。例如my-bucket
。创建一个包含您在上一步中检索的政策的 JSON 文件,并修改该文件以从政策中移除
allUsers
主账号的绑定。使用
cURL
,通过PUT setIamPolicy
请求调用 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.s3nsapis.fr/storage/v1/b/BUCKET_NAME/iam"
其中:
JSON_FILE_NAME
是您在第 3 步中创建的文件的路径。BUCKET_NAME
是您要移除对其访问权限的存储桶的名称,例如my-bucket
。
gcloud storage buckets remove-iam-policy-binding gs://BUCKET_NAME --member=allUsers --role=roles/storage.objectViewer
其中 BUCKET_NAME
是您要撤消其访问权限的存储桶的名称。例如 my-bucket
。