本页面介绍如何使用访问控制列表 (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以及您要添加或修改的授权。例如--add-acl-grant=entity=user-jeffersonloveshiking@gmail.com,role=READER。--remove-acl-grant以及您要移除其访问权限的实体。例如--remove-acl-grant=user-jeffersonloveshiking@gmail.com。
如需替换对象的所有 ACL,请执行以下操作:
在 JSON 或 YAML 格式的文件中定义 ACL。
例如,以下 ACL 向项目
867489160491的所有者和用户jeffersonloveshiking@gmail.com授予对象paris.jpg的OWNER权限,并向gs-announce群组的成员授予paris.jpg的READER权限:[ { "entity": "project-owners-867489160491", "role": "OWNER", "projectTeam": { "projectNumber": "867489160491", "team": "owners" }, }, { "entity": "user-jeffersonloveshiking@gmail.com", "email": "jeffersonloveshiking@gmail.com", "role": "OWNER" }, { "entity": "group-gs-announce@googlegroups.com", "email": "gs-announce@googlegroups.com", "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的所有者和用户jeffersonloveshiking@gmail.com授予OWNER权限,同时向gs-announce群组成员授予READER权限,那么您可以创建名为acls.json的文件,其中包含以下内容:{ "acl": [ { "entity": "project-owners-867489160491", "role": "OWNER", "projectTeam": { "projectNumber": "867489160491", "team": "owners" } }, { "entity": "user-jeffersonloveshiking@gmail.com", "role": "OWNER", "email": "jeffersonloveshiking@gmail.com" }, { "entity": "group-gs-announce@googlegroups.com", "role": "READER", "email": "gs-announce@googlegroups.com" } ] }发送包含 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 中包含许多条目,但不能包含具有重复范围的条目。例如,您不能拥有两个具有相同范围元素
jane@example.com的条目。
以下示例显示了不同的存储桶 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>gs-announce@googlegroups.com</EmailAddress>
</Scope>
<Permission>READ</Permission>
</Entry>
<Entry>
<Scope type="UserByEmail">
<EmailAddress>jeffersonloveshiking@gmail.com</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>jeffersonloveshiking@gmail.com</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-mapsdefacls.json的示例:{ "defaultObjectAcl": [ { "email": "jeffersonloveshiking@gmail.com", "entity": "user-jeffersonloveshiking@gmail.com", "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?defaultObjectAclacls.xml的示例:<AccessControlList> <Entries> <Entry> <Permission>FULL_CONTROL</Permission> <Scope type="UserByEmail"> <EmailAddress>jeffersonloveshiking@gmail.com</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": "user-jeffersonloveshiking@gmail.com",
"role": "OWNER",
"email": "jeffersonloveshiking@gmail.com",
...
},
{
...
"entity": "group-gs-announce@googlegroups.com",
"role": "READER",
"email": "gs-announce@googlegroups.com",
...
}
],
"owner": {
"entity": "user-jeffersonloveshiking@gmail.com"
},
...
}
您还可以使用 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>jeffersonloveshiking@gmail.com</EmailAddress>
<Name>Jefferson</Name>
</Scope>
<Permission>FULL_CONTROL</Permission>
</Entry>
<Entry>
<Scope type="GroupByEmail">
<EmailAddress>gs-announce@googlegroups.com</EmailAddress>
</Scope>
<Permission>READ</Permission>
</Entry>
</Entries>
</AccessControlList>
您还可以使用 ObjectAccessControls 资源的 JSON GET 方法返回特定的 ACL 条目。
后续步骤
- 详细了解 ACL。
- 了解如何使用统一存储桶级访问权限简化访问权限控制。
- 了解使用 ACL 时的最佳做法。