本页面介绍如何使用访问控制列表 (ACL) 控制存储桶和对象的访问权限。ACL 是一种机制,可用于定义谁有权访问您的存储桶和对象,以及他们具有何种级别的访问权限。
请参阅 ACL 概览,详细了解您是否应使用 ACL 来控制对资源的访问。
所需的角色
如需获得创建和管理 ACL 所需的权限,请让您的管理员向您授予包含要为其创建和管理 ACL 的对象的存储桶的 Storage Admin (roles/storage.admin) IAM 角色。
此预定义角色包含创建和管理 ACL 所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
storage.buckets.getstorage.buckets.list- 仅当使用 Google Cloud 控制台执行本页面上的任务时才需要此权限。
storage.buckets.setIamPolicystorage.buckets.updatestorage.objects.getstorage.objects.getIamPolicystorage.objects.setIamPolicystorage.objects.update
您还可以通过自定义角色获得这些权限。
如需了解如何授予存储桶的角色,请参阅设置和管理存储桶的 IAM 政策。
设置或修改 ACL
控制台
在 Google Cloud 控制台中前往 Cloud Storage 浏览器。
前往 Cloud Storage 浏览器在存储桶列表中,找到包含要修改其 ACL 的对象的存储桶并点击其名称。
点击要为其设置或修改 ACL 的对象的名称。
点击修改访问权限。
此时将打开一个权限对话框,其中包含该对象的当前 ACL。
点击 + 添加条目。
选择要向其授予权限的实体类型。
实体指定了获得权限的对象的类型(例如,用户或群组)。如需查看受支持的实体值列表,请参阅访问控制范围。
在名称中输入值。
名称标识了特定的用户、群组或其他实体类型。如需查看受支持的名称值列表,请参阅访问控制范围。
实体和名称共同定义了权限适用的对象。
在访问权限中选择一个值。
访问权限定义了您要在对象上设置的权限。 如需查看受支持的访问权限值列表,请参阅访问控制权限。
点击保存。
如需了解如何在 Google Cloud 控制台中获取失败的 Cloud Storage 操作的详细错误信息,请参阅问题排查。
命令行
如需添加、修改或移除对象上的单个授权,请使用带有相关标志的 objects update 命令:
gcloud storage objects update gs://BUCKET_NAME/OBJECT_NAME FLAG
其中:
BUCKET_NAME是包含所修改对象的存储桶的名称。例如example-travel-maps。OBJECT_NAME是要修改的对象的名称。例如paris.jpg。FLAG是以下值之一:--add-acl-grant以及您要添加或修改的授权。例如[email protected],role=READER。--remove-acl-grant以及您要移除其访问权限的实体。例如[email protected]。
如需替换对象的所有 ACL,请执行以下操作:
在 JSON 或 YAML 格式的文件中定义 ACL。
例如,以下 ACL 向项目
867489160491的所有者和用户[email protected]授予对象paris.jpg的OWNER权限,并向gs-announce群组的成员授予paris.jpg的READER权限:[ { "entity": "project-owners-867489160491", "role": "OWNER", "projectTeam": { "projectNumber": "867489160491", "team": "owners" }, }, { "entity": "[email protected]", "email": "[email protected]", "role": "OWNER" }, { "entity": "[email protected]", "email": "[email protected]", "role": "READER" } ]使用带有
--acl-file标志的objects update命令:gcloud storage objects update gs://BUCKET_NAME/OBJECT_NAME --acl-file=FILE_LOCATION
其中:
BUCKET_NAME是包含 ACL 所适用对象的存储桶的名称。例如example-travel-maps。OBJECT_NAME是 ACL 所适用对象的名称。例如paris.jpg。FILE_LOCATION是包含您定义的 ACL 的文件的本地路径。例如Desktop/acls.json。
客户端库
C++
如需了解详情,请参阅 Cloud Storage C++ API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
以下示例将 ACL 添加到对象中:
以下示例从对象中移除 ACL:
C#
如需了解详情,请参阅 Cloud Storage C# API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
以下示例将 ACL 添加到对象中:
以下示例从对象中移除 ACL:
Go
如需了解详情,请参阅 Cloud Storage Go API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
以下示例将 ACL 添加到对象中:
以下示例从对象中移除 ACL:
Java
如需了解详情,请参阅 Cloud Storage Java API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
以下示例将 ACL 添加到对象中:
以下示例从对象中移除 ACL:
Node.js
如需了解详情,请参阅 Cloud Storage Node.js API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
以下示例将 ACL 添加到对象中:
以下示例从对象中移除 ACL:
PHP
如需了解详情,请参阅 Cloud Storage PHP API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
以下示例将 ACL 添加到对象中:
以下示例从对象中移除 ACL:
Python
如需了解详情,请参阅 Cloud Storage Python API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
以下示例将 ACL 添加到对象中:
以下示例从对象中移除 ACL:
Ruby
如需了解详情,请参阅 Cloud Storage Ruby API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
以下示例将 ACL 添加到对象中:
以下示例从对象中移除 ACL:
REST API
JSON API
创建对象时,您可以在请求正文中指定 acl[] 属性,或在 insert 请求中指定 predefinedAcl 查询参数。如果是现有对象,请在 patch 或 update 请求中指定 acl[] 属性或 predefinedAcl 查询参数。
如需查看对象 ACL 属性的定义,请参阅 ObjectAccessControls 资源。
在 JSON 文件中定义 ACL。
例如,如果 ACL 向项目
867489160491的所有者和用户[email protected]授予OWNER权限,同时向gs-announce群组成员授予READER权限,那么您可以创建名为acls.json的文件,其中包含以下内容:{ "acl": [ { "entity": "project-owners-867489160491", "role": "OWNER", "projectTeam": { "projectNumber": "867489160491", "team": "owners" } }, { "entity": "[email protected]", "role": "OWNER", "email": "[email protected]" }, { "entity": "[email protected]", "role": "READER", "email": "[email protected]" } ] }发送包含 JSON 文件的 patch 请求,并指定要对其设置 ACL 的对象。
例如,以下 curl 命令将文档 acls.json 中的 JSON 载荷应用于存储桶 example-travel-maps 中名为 paris.jpg 的对象:
curl -X PATCH --data @acls.json -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ https://storage.googleapis.com/storage/v1/b/example-travel-maps/o/paris.jpg
XML API
在 XML API 中,您使用 XML 格式的 ACL。您必须将一个 XML 文档附加到用于更改存储桶和对象 ACL 的请求的正文中。 当您获取存储桶和对象 ACL 时,系统会返回一个 XML 文档。该 XML 文档包含各个存储分区或对象 ACL 条目。
使用
PUTBucket 请求创建存储分区后,使用包含?acl参数的另一个 PUT Bucket 请求来更改存储分区 ACL。使用
PUTObject 请求上传对象后,使用包含?acl参数或x-googl-acl请求标头的另一个 PUT 请求来更改 ACL。
例如,以下 curl 命令将文档 acls.xml 中的 XML 载荷应用于存储桶 example-travel-maps 中名为 paris.jpg 的对象:
curl -X PUT --data-binary @acls.xml \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ https://storage.googleapis.com/example-travel-maps/paris.jpg?acl
为 XML 文档使用以下 ACL 语法:
| 元素 | 说明 |
|---|---|
AccessControlList | Entries 和 Owner 元素的容器。 |
Owner | DisplayName 和 ID 元素的容器。此元素对于对象而言并不是必需的,因为对象的 Owner 始终是上传该对象的用户。在迁移情景中使用 Amazon S3 ACL 语法时,您将使用此元素。Amazon Simple Storage Service 和 Amazon S3 是 Amazon.com, Inc. 或其关联公司在美国和/或其他国家/地区的商标。 |
ID | 存储桶所有者的 Cloud Storage ID。 |
DisplayName | 未实现。该值始终为空字符串。 |
Entries | 零个或零个以上 Entry 元素的容器。 |
Entry | Scope 和 Permission 元素的容器。Entry 只能包含一个 Scope 和一个 Permission 元素。 |
Scope | ID、EmailAddress 或 Domain 元素的容器,用于定义 ACL 范围。此元素必须具有一个 type 属性,其中包含以下值之一:UserByID、UserByEmail、GroupByID、GroupByEmail、GroupByDomain、AllUsers 或 AllAuthenticatedUsers。 |
ID | 被授予方的标识符(当权限条目由 ID 指定时)。 |
EmailAddress | 被授予方的电子邮件标识符(当权限条目由电子邮件指定时)。 |
Domain | 被授予方的网域标识符(当权限条目由网域指定时)。 |
Name | 可选元素(您可以指定此元素,或者,如果范围是 UserByEmail 或 GroupByEmail,则可以自动添加此元素)。 |
Permission | 用于授予 READ、WRITE 或 FULL_CONTROL 访问权限的权限。 |
使用 XML API 设置 ACL 时:
- 您只能使用上述 XML 格式。
您不能设置重复的范围。
您可以在 ACL XML 中包含许多条目,但不能包含具有重复范围的条目。例如,您不能拥有两个具有相同范围元素
[email protected]的条目。
以下示例显示了不同的存储桶 ACL 条目:
<?xml version="1.0" encoding="UTF-8"?> <AccessControlList> <Owner> <ID>00b4903a9721...</ID> </Owner> <Entries> <Entry> <Scope type="GroupById"> <ID>00b4903a9722...</ID> </Scope> <Permission>FULL_CONTROL</Permission> </Entry> <Entry> <Scope type="GroupByDomain"> <Domain>example.com</Domain> </Scope> <Permission>READ</Permission> </Entry> <Entry> <Scope type="GroupByEmail"> <EmailAddress>[email protected]</EmailAddress> </Scope> <Permission>READ</Permission> </Entry> <Entry> <Scope type="UserByEmail"> <EmailAddress>[email protected]</EmailAddress> <Name>Jefferson</Name> </Scope> <Permission>FULL_CONTROL</Permission> </Entry> <Entry> <Scope type="AllUsers"/> <Permission>READ</Permission> </Entry> <Entry> <Scope type="AllAuthenticatedUsers"/> <Permission>READ</Permission> </Entry> </Entries> </AccessControlList>
设置 ACL XML 中的 Name 元素
从存储桶或对象检索 ACL 时,您可能会注意到,某些条目附加了一个额外的 <Name> 元素。例如,您可能会看到如下所示的条目:
<Entry> <Scope type="UserByEmail"> <EmailAddress>[email protected]</EmailAddress> <Name>Jefferson</Name> </Scope> <Permission>FULL_CONTROL</Permission> </Entry>
在以下两种情况下,系统会填充这些可选的 <Name> 元素:
当存储分区或对象的 ACL 包含
<Name>元素时。设置 ACL 时,您可以选择在 ACL 条目中包含
<Name>元素。您可以在<Name>元素中提供任何值,在移除或替换 ACL 之前,Cloud Storage 会一直记住这些值。如果您使用不易识别的标识符,则此方法十分实用。当
UserByEmail或GroupByEmail范围包含公开的 Google 个人资料时。如果您使用这些范围中的任何一个,但未提供
<Name>元素,则 Cloud Storage 会检查与该电子邮件地址关联的用户或 Google 群组是否拥有公开的 Google 个人资料(包含公开名称)。如果存在这种情况,Cloud Storage 会自动使用公开名称填充<Name>元素。
应用预定义的 ACL
您可以使用预定义的 ACL(自动应用多个针对特定情景进行自定义的条目),而不是如上所示逐个条目地指定整个 ACL。您可以使用 Google Cloud CLI、JSON API 或 XML API 将预定义的 ACL 应用到存储桶或对象上。
对于新的对象
要在对象上传期间将预定义 ACL 应用于对象,请执行以下操作:
控制台
您无法使用 Google Cloud 控制台应用预定义的 ACL。请改用 gcloud storage。
命令行
将 gcloud storage cp 命令与 --predefined-acl 标志结合使用:
gcloud storage cp OBJECT gs://BUCKET_NAME --predefined-acl=PREDEFINED_ACL
例如,如需在将对象 paris.jpg 上传到存储桶 example-travel-maps 时应用预定义的 ACL bucketOwnerRead,请运行以下命令:
gcloud storage cp paris.jpg gs://example-travel-maps --predefined-acl=bucketOwnerRead
REST API
JSON API
在 insert 请求中使用 predefinedAcl 查询字符串参数来应用预定义的 ACL。
例如,如需在将对象 paris.jpg 上传到存储桶 example-travel-maps 时应用预定义的 ACL bucketOwnerRead,请运行以下命令:
curl -X POST --data-binary @paris.jpg -H "Content-Type: image/jpeg" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://storage.googleapis.com/upload/storage/v1/b/example-travel-maps/o?name=paris.jpg&predefinedAcl=bucketOwnerRead"
XML API
在 Put Object 请求中使用 x-goog-acl 标头来应用预定义的 ACL。
例如,如需在将对象 paris.jpg 上传到存储桶 example-travel-maps 时应用预定义的 ACL bucket-owner-read,请运行以下命令:
curl -X PUT --upload-file paris.jpg -H "x-goog-acl: bucket-owner-read" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ https://storage.googleapis.com/example-travel-maps/paris.jpg
对于现有存储桶或对象
您还可以将预定义的 ACL 应用到现有存储分区或对象上,如果要将预定义的 ACL 更改为另一个预定义 ACL,或者要将自定义 ACL 更新为预定义 ACL,此方法非常有用。
控制台
您无法使用 Google Cloud 控制台应用预定义的 ACL。请改用 gcloud storage。
命令行
使用带有 --predefined-acl 标志的 objects update 命令:
gcloud storage objects update gs://BUCKET_NAME/OBJECT_NAME --predefined-acl=PREDEFINED_ACL_NAME
例如,如需将预定义的 ACL private 应用于存储桶 example-travel-maps 中的对象 paris.jpg,请运行以下命令:
gcloud storage objects update gs://example-travel-maps/paris.jpg --predefined-acl=private
REST API
JSON API
在 patch 请求中使用 predefinedAcl 查询字符串参数并指定空的 acl 属性,以应用预定义的 ACL。
例如,如需将预定义的 ACL private 应用于存储桶 example-travel-maps 中的对象 paris.jpg,请运行以下命令:
curl -X PATCH --data '{"acl": []}' -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ https://storage.googleapis.com/storage/v1/b/example-travel-maps/o/paris.jpg?predefinedAcl=private XML API
在 Put Object 请求中使用 x-goog-acl 标头和 acl 查询字符串参数,但不要在请求中添加 XML 文档。
例如,如需将预定义的 ACL private 应用于存储桶 example-travel-maps 中的对象 paris.jpg,请运行以下命令:
curl -X PUT -H "Content-Length: 0" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-acl: private" \ https://storage.googleapis.com/example-travel-maps/paris.jpg?acl
设置默认对象 ACL
为避免每次创建新对象时都要设置 ACL,您可以在存储桶上设置默认对象 ACL。执行此操作后,添加到该存储桶但未明确应用 ACL 的每个新对象都将应用默认 ACL。例如,您可能只想允许特定用户组访问特定存储桶中的大多数对象。您可以更改默认对象 ACL,然后将对象添加到该存储桶中。这些添加的对象会自动应用您指定的默认对象 ACL;但是,您可以为特定对象指定不同的 ACL,在这种情况下,这些对象不会应用默认 ACL。
如需查看和更改存储分区的默认对象 ACL,请执行以下操作:
控制台
您无法使用 Google Cloud 控制台设置默认对象 ACL。请改用 gcloud storage。
命令行
使用带有
--format标志的buckets describe命令检索存储桶的默认对象 ACL:gcloud storage buckets describe gs://BUCKET_NAME --format="default(default_acl)"
其中,
BUCKET_NAME是您要查看其默认对象 ACL 的存储桶的名称。例如my-bucket。使用带有所需标志的
buckets update命令修改存储桶的默认对象 ACL:gcloud storage buckets update gs://BUCKET_NAME FLAG
其中:
BUCKET_NAME是您要修改默认对象 ACL 的存储桶的名称。例如my-bucket。FLAG是以下值之一:--add-default-object-acl-grant是您要添加到存储桶的整体默认对象 ACL 中的授权。--default-object-acl-file和定义存储桶的新默认对象 ACL 的本地文件的路径。--predefined-default-object-acl以及您想要用来替换存储桶的现有默认对象 ACL 的预定义对象 ACL 的名称。--remove-default-object-acl-grant以及您要从存储桶的整体默认对象 ACL 中移除的实体。
客户端库
C++
如需了解详情,请参阅 Cloud Storage C++ API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
以下示例将默认对象 ACL 添加到存储分区中:
以下示例从存储分区中删除默认对象 ACL:
C#
如需了解详情,请参阅 Cloud Storage C# API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
以下示例输出存储桶的默认对象 ACL:
以下示例将默认对象 ACL 添加到存储分区中:
以下示例从存储分区中删除默认对象 ACL:
Go
如需了解详情,请参阅 Cloud Storage Go API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
以下示例将默认对象 ACL 添加到存储分区中:
以下示例从存储分区中删除默认对象 ACL:
Java
如需了解详情,请参阅 Cloud Storage Java API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
以下示例将默认对象 ACL 添加到存储分区中:
以下示例从存储分区中删除默认对象 ACL:
Node.js
如需了解详情,请参阅 Cloud Storage Node.js API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
以下示例将默认对象 ACL 添加到存储分区中:
以下示例从存储分区中删除默认对象 ACL:
PHP
如需了解详情,请参阅 Cloud Storage PHP API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
以下示例将默认对象 ACL 添加到存储分区中:
以下示例从存储分区中删除默认对象 ACL:
Python
如需了解详情,请参阅 Cloud Storage Python API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
以下示例将默认对象 ACL 添加到存储分区中:
以下示例从存储分区中删除默认对象 ACL:
Ruby
如需了解详情,请参阅 Cloud Storage Ruby API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
以下示例将默认对象 ACL 添加到存储分区中:
以下示例从存储分区中删除默认对象 ACL:
REST API
JSON API
使用 GET 请求检索默认对象 ACL。例如:
curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \ https://storage.googleapis.com/storage/v1/b/BUCKET_NAME?projection=full
使用 patch 请求替换默认对象 ACL。例如,以下请求将存储桶
example-travel-maps的默认对象 ACL 替换为defacls.json中指定的 ACL:curl -X PATCH --data @defacls.json -H "Content-Type: application/json" -H "Authorization: Bearer $(gcloud auth print-access-token)" \ https://storage.googleapis.com/storage/v1/b/example-travel-maps
defacls.json的示例:{ "defaultObjectAcl": [ { "email": "[email protected]", "entity": "[email protected]", "role": "READER" } ] }
XML API
使用
GET请求(范围限定为您的存储桶)和?defaultObjectAcl参数检索默认对象 ACL。例如:curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \ https://storage.googleapis.com/BUCKET_NAME?defaultObjectAcl
使用
PUT请求(范围限定为您的存储桶)和?defaultObjectAcl参数,将默认对象 ACL 替换为acls.xml中指定的 ACL。例如:curl -X PUT --data-binary @acls.xml -H "Authorization: Bearer $(gcloud auth print-access-token)" \ http://storage.googleapis.com/BUCKET_NAME?defaultObjectAcl
acls.xml的示例:<AccessControlList> <Entries> <Entry> <Permission>
FULL_CONTROL</Permission> <Scope type="UserByEmail"> <EmailAddress>[email protected]</EmailAddress> </Scope> </Entry> </Entries> </AccessControlList>
设置 ACL 中讨论了 ACL 的语法。 您还可以将预定义的 ACL 指定为默认对象 ACL。
如需将存储分区的默认对象 ACL 设为预定义的 ACL,请执行以下操作:
控制台
您无法使用 Google Cloud 控制台设置默认对象 ACL。请改用 gcloud storage。
命令行
使用带有 --predefined-default-object-acl 标志的 buckets update 命令:
gcloud storage buckets update gs://BUCKET_NAME --predefined-default-object-acl=PREDEFINED_ACL
其中:
BUCKET_NAME是您要修改默认对象 ACL 的存储桶的名称。例如my-bucket。PREDEFINED_ACL是有效预定义 ACL 的名称。例如projectPrivate。
REST API
JSON API
使用 PUT 请求和 predefinedAcl 参数。
例如:
curl -X PUT -H "Content-Length: 0" -H "Authorization: Bearer $(gcloud auth print-access-token)" \ https://storage.googleapis.com/storage/v1/b/BUCKET_NAME?predefinedAcl=private
XML API
使用 PUT 请求(范围限定为您的存储桶),并在请求中包含 ?defaultObjectAcl 参数和 x-goog-acl 标头。
例如:
curl -X PUT -H "x-goog-acl: project-private" -H "Content-Length: 0" -H "Authorization: Bearer $(gcloud auth print-access-token)" \ http://storage.googleapis.com/BUCKET_NAME?defaultObjectAcl
新创建的存储桶的默认对象 ACL:
以下示例展示了在未指定自己的默认对象 ACL 作为请求一部分时自动应用于新创建的存储桶的默认对象 ACL。如需了解存储桶的默认对象 ACL 是否已更改,请将存储桶的当前默认对象 ACL 与以下示例进行比较。
控制台
您无法使用 Google Cloud 控制台处理默认对象 ACL。请改用 gcloud storage。
命令行
在下面的示例中,项目 ID 为“123412341234”;您的项目 ID 将有所不同。
defaultObjectAcl: – entity: project-owners-123412341234 etag: CAE= kind: storage#objectAccessControl projectTeam: projectNumber: '123412341234' team: owners role: OWNER – entity: project-editors-123412341234 etag: CAE= kind: storage#objectAccessControl projectTeam: projectNumber: '123412341234' team: editors role: OWNER – entity: project-viewers-123412341234 etag: CAE= kind: storage#objectAccessControl projectTeam: projectNumber: '123412341234' team: viewers role: READER
REST API
JSON API
在下面的示例中,项目 ID 为“123412341234”;您的项目 ID 将有所不同。
"defaultObjectAcl": [ { "kind": "storage#objectAccessControl", "entity": "project-owners-123412341234", "role": "OWNER", "projectTeam": { "projectNumber": "123412341234", "team": "owners" } }, { "kind": "storage#objectAccessControl", "entity": "project-editors-123412341234", "role": "OWNER", "projectTeam": { "projectNumber": "123412341234", "team": "editors" } }, { "kind": "storage#objectAccessControl", "entity": "project-viewers-123412341234", "role": "READER", "projectTeam": { "projectNumber": "123412341234", "team": "viewers" } } ] XML API
在下面的示例中,项目角色 ID 以“00b4903a97...”开头;您的项目 ID 将有所不同。
<?xml version='1.0' encoding='UTF-8'?> <AccessControlList> <Entries> <Entry> <Scope type='GroupById'> <ID>00b4903a9721...</ID> </Scope> <Permission>FULL_CONTROL</Permission> </Entry> <Entry> <Scope type='GroupById'> <ID>00b4903a9722...</ID> </Scope> <Permission>FULL_CONTROL</Permission> </Entry> <Entry> <Scope type='GroupById'> <ID>00b4903a9723...</ID> </Scope> <Permission>READ</Permission> </Entry> </Entries> </AccessControlList>
请注意,新创建的存储桶的默认对象 ACL 等同于预定义的 projectPrivate ACL。
检索 ACL
如需获取现有资源的 ACL,请执行以下操作:
控制台
在 Google Cloud 控制台中前往 Cloud Storage 浏览器。
前往 Cloud Storage 浏览器导航到需要查看其 ACL 的对象。
从对象的下拉菜单中选择修改访问权限。
您会看到包含对象权限的权限对话框。
如需了解如何在 Google Cloud 控制台中获取失败的 Cloud Storage 操作的详细错误信息,请参阅问题排查。
命令行
使用带有
--format标志的objects describe命令检索对象的 ACL:gcloud storage objects describe gs://BUCKET_NAME/OBJECT_NAME --format="default(acl)"
其中:
BUCKET_NAME是包含要查看其 ACL 的对象的存储桶的名称,例如my-bucket。OBJECT_NAME是您要查看其 ACL 的对象的名称。例如paris.jpg。
客户端库
C++
如需了解详情,请参阅 Cloud Storage C++ API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
以下示例获取了一个对象 ACL:
C#
如需了解详情,请参阅 Cloud Storage C# API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
以下示例获取了一个对象 ACL:
Go
如需了解详情,请参阅 Cloud Storage Go API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
以下示例获取了一个对象 ACL:
Java
如需了解详情,请参阅 Cloud Storage Java API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
以下示例获取了一个对象 ACL:
Node.js
如需了解详情,请参阅 Cloud Storage Node.js API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
以下示例获取了一个对象 ACL:
PHP
如需了解详情,请参阅 Cloud Storage PHP API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
以下示例获取了一个对象 ACL:
Python
如需了解详情,请参阅 Cloud Storage Python API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
以下示例获取了一个对象 ACL:
Ruby
如需了解详情,请参阅 Cloud Storage Ruby API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
以下示例获取了一个对象 ACL:
REST API
JSON API
确保您拥有对象的
OWNER权限。使用
GET请求检索对象的 ACL。对象 ACL 以 JSON 格式返回,并将附加到响应正文中。
例如,如需返回存储桶 example-travel-maps 中的对象 paris.jpg 的 ACL,请运行以下命令:
curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \ https://storage.googleapis.com/storage/v1/b/example-travel-maps/o/paris.jpg?projection=full
您应看到类似于如下所示的响应:
{ "kind": "storage#object", "id": "example-travel-maps/paris.jpg/1412805837131000", "selfLink": "https://www.googleapis.com/storage/v1/b/example-travel-maps/o/paris.jpg", "name": "paris.jpg", "bucket": "example-travel-maps", ... "acl": [ { ... "entity": "project-owners-867489160491", "role": "OWNER", "projectTeam": { "projectNumber": "867489160491", "team": "owners" }, ... }, { ... "entity": "[email protected]", "role": "OWNER", "email": "[email protected]", ... }, { ... "entity": "[email protected]", "role": "READER", "email": "[email protected]", ... } ], "owner": { "entity": "[email protected]" }, ... } 您还可以使用 objectAccessControls 资源 GET 方法返回对象 ACL 中的各个条目。
XML API
确保您在存储分区或对象上具有
FULL_CONTROL权限。在 GET Object 请求中使用
acl查询字符串参数,以检索存储分区或对象的 ACL。
ACL 以 XML 格式描述,随附在响应正文中。
例如,如需返回存储桶 example-travel-maps 中的对象 paris.jpg 的 ACL,请运行以下命令:
curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \ https://storage.googleapis.com/example-travel-maps/paris.jpg?acl
您应看到类似于如下所示的响应:
<?xml version="1.0" encoding="UTF-8"?> <AccessControlList> <Owner> <ID>84fac329bceSAMPLE777d5d22b8SAMPLE77d85ac2SAMPLE2dfcf7c4adf34da46</ID> <Name>Owner Name</Name> </Owner> <Entries> <Entry> <Scope type="UserById"> <ID>84fac329bceSAMPLE777d5d22b8SAMPLE77d85ac2SAMPLE2dfcf7c4adf34da46</ID> <Name>Name</Name> </Scope> <Permission>FULL_CONTROL</Permission> </Entry> <Entry> <Scope type="UserByEmail"> <EmailAddress>[email protected]</EmailAddress> <Name>Jefferson</Name> </Scope> <Permission>FULL_CONTROL</Permission> </Entry> <Entry> <Scope type="GroupByEmail"> <EmailAddress>[email protected]</EmailAddress> </Scope> <Permission>READ</Permission> </Entry> </Entries> </AccessControlList>
您还可以使用 ObjectAccessControls 资源的 JSON GET 方法返回特定的 ACL 条目。
后续步骤
- 详细了解 ACL。
- 了解如何使用统一存储桶级访问权限简化访问权限控制。
- 了解使用 ACL 时的最佳做法。