你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

设置容器 ACL

Set Container ACL 操作设置指定容器的权限。 这些权限指示是否可以公开访问容器中的 Blob。

自版本 2009-09-19 起,容器权限提供以下用于管理容器访问的选项:

  • 完全公共读访问:可通过匿名请求读取容器和 Blob 数据。 客户端可以通过匿名请求枚举容器中的 Blob,但不能枚举存储帐户中的容器。

  • 仅限 Blob 的公共读取访问权限: 可以通过匿名请求读取此容器中的 Blob 数据,但容器数据不可用。 客户端无法通过匿名请求枚举容器中的 Blob。

  • 无公共读取访问:仅帐户所有者可读取容器和 Blob 数据。

Set Container ACL 还设置了一个存储访问策略以便与共享访问签名一起使用。 有关详细信息,请参阅定义存储的访问策略

对容器的所有公共访问都是匿名的,与通过共享访问签名的访问相同。

请求

可以按如下方式构建Set Container ACL请求。 建议使用 HTTPS。 将 myaccount 替换为存储帐户的名称:

方法 请求 URI HTTP 版本
PUT https://myaccount.blob.core.windows.net/mycontainer?restype=container&comp=acl HTTP/1.1

模拟存储服务请求

在针对模拟的存储服务发出请求时,请将模拟器主机名和 BLOB 服务端口指定为 127.0.0.1:10000,后跟模拟的存储帐户名称:

方法 请求 URI HTTP 版本
PUT http://127.0.0.1:10000/devstoreaccount1/mycontainer?restype=container&comp=acl HTTP/1.1

有关详细信息,请参阅使用 Azurite 模拟器进行本地 Azure 存储开发

URI 参数

可以在请求 URI 中指定以下附加参数:

参数 说明
timeout 可选。 timeout 参数以秒表示。 有关详细信息,请参阅 为 Blob 服务操作设置超时

请求标头

下表描述了必需的和可选的请求标头:

请求标头 说明
Authorization 必需。 指定授权方案、帐户名称和签名。 有关详细信息,请参阅授权对 Azure 存储的请求
Datex-ms-date 必需。 指定请求的协调世界时 (UTC)。 有关详细信息,请参阅授权对 Azure 存储的请求
x-ms-version 可选。 指定用于此请求的操作的版本。 有关详细信息,请参阅 Azure 存储服务的版本控制
x-ms-blob-public-access 可选。 指定是否可以公开访问容器中的数据以及访问级别。 可能的值包括:

- container:指定容器和 Blob 数据的完全公共读取访问权限。 客户端可以通过匿名请求枚举容器中的 Blob,但不能枚举存储帐户中的容器。
- blob: 指定 Blob 的公共读取访问权限。 可以通过匿名请求读取此容器中的 Blob 数据,但容器数据不可用。 客户端无法通过匿名请求枚举容器中的 Blob。

如果请求中未包含此标头,则容器数据对帐户所有者是私有的。

请注意,不允许为 Azure 高级存储 帐户中的容器设置公共访问权限。
x-ms-lease-id: <ID> 可选,版本 2012-02-12 及更高版本。 如果已指定, Set Container ACL 则仅当容器的租约处于活动状态且与此 ID 匹配时,才会成功。 如果没有活动租约或 ID 不匹配,则返回 412 (前置条件失败) 。
x-ms-client-request-id 可选。 提供客户端生成的不透明值,其中包含 1 kibite (KiB) 配置日志记录时记录在日志中的字符限制。 强烈建议使用此标头将客户端活动与服务器接收的请求相关联。 有关详细信息,请参阅监视Azure Blob 存储

此操作还支持仅当满足指定条件时才使用条件头执行操作。 有关详细信息,请参阅 为 Blob 服务操作指定条件标头

请求正文

要指定存储访问策略,请在 Set Container ACL 操作的请求正文中提供唯一的标识符和访问策略。

SignedIdentifier 元素包含唯一标识符(在 Id 元素中指定)和访问策略(在 AccessPolicy 元素中指定)详细信息。 唯一标识符的最大长度为 64 个字符。

StartExpiry 字段必须表示为 UTC 时间,并且必须遵循有效的 ISO 8061 格式。 支持的 ISO 8061 格式包括:

  • YYYY-MM-DD
  • YYYY-MM-DDThh:mmTZD
  • YYYY-MM-DDThh:mm:ssTZD
  • YYYY-MM-DDThh:mm:ss.fffffffTZD

对于这些格式的日期部分,YYYY 是四位数的年份表示形式,MM 是两位数的月份表示形式,而 DD 是两位数的日期表示形式。 对于时间部分,hh 是二十四小时制的小时表示形式,mm 是两位数的分钟表示形式,ss 是两位数的秒钟表示形式,而 fffffff 是七位数的毫秒表示形式。 时间指示符 T 分隔字符串的日期和时间部分,时区指示符 TZD 指定时区。

<?xml version="1.0" encoding="utf-8"?>  
<SignedIdentifiers>  
  <SignedIdentifier>   
    <Id>unique-64-character-value</Id>  
    <AccessPolicy>  
      <Start>start-time</Start>  
      <Expiry>expiry-time</Expiry>  
      <Permission>abbreviated-permission-list</Permission>  
    </AccessPolicy>  
  </SignedIdentifier>  
</SignedIdentifiers>  
  

示例请求

Request Syntax:  
PUT https://myaccount.blob.core.windows.net/mycontainer?restype=container&comp=acl HTTP/1.1  
  
Request Headers:  
x-ms-version: 2011-08-18  
x-ms-date: Sun, 25 Sep 2011 00:42:49 GMT  
x-ms-blob-public-access: container  
Authorization: SharedKey myaccount:V47F2tYLS29MmHPhiR8FyiCny9zO5De3kVSF0RYQHmo=  
  
Request Body:  
<?xml version="1.0" encoding="utf-8"?>  
<SignedIdentifiers>  
  <SignedIdentifier>   
    <Id>MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI=</Id>  
    <AccessPolicy>  
      <Start>2009-09-28T08:49:37.0000000Z</Start>  
      <Expiry>2009-09-29T08:49:37.0000000Z</Expiry>  
      <Permission>rwd</Permission>  
    </AccessPolicy>  
  </SignedIdentifier>  
</SignedIdentifiers>  
  

响应

响应包括 HTTP 状态代码和一组响应标头。

状态代码

此操作成功后返回状态代码 200(正常)。

有关状态代码的详细信息,请参阅 状态和错误代码

响应头

此操作的响应包括以下标头。 该响应还可能包括其他标准 HTTP 标头。 所有标准标头都符合 HTTP/1.1 协议规范

响应标头 说明
ETag 容器的 ETag。 如果请求版本为 2011-08-18 或更高版本,则 ETag 值用引号引起来。
Last-Modified 返回上次修改容器的日期和时间。 日期格式遵循 RFC 1123。 有关详细信息,请参阅 在标头中表示日期/时间值

修改容器或其属性或元数据的任何操作将更新上次修改时间,包括设置容器的权限。 对 Blob 的操作不会影响容器的上次修改时间。
x-ms-request-id 唯一标识发出的请求,可用于对请求进行故障排除。 有关详细信息,请参阅 API 操作疑难解答
x-ms-version 指示用于执行请求的 Blob 服务版本。 针对 2009-09-19 和更高版本发出的请求将返回此标头。
Date 由服务生成的 UTC 日期/时间值,指示启动响应的时间。
x-ms-client-request-id 可用于对请求和相应响应进行故障排除。 如果请求中存在此标头的值,并且该值包含不超过 1,024 个可见 ASCII 字符,则此标头的值等于该标头的值 x-ms-client-request-idx-ms-client-request-id如果请求中不存在标头,则它不会出现在响应中。

示例响应

Response Status:  
HTTP/1.1 200 OK  
  
Response Headers:  
Transfer-Encoding: chunked  
Date: Sun, 25 Sep 2011 22:42:55 GMT  
ETag: "0x8CB171613397EAB"  
Last-Modified: Sun, 25 Sep 2011 22:42:55 GMT  
x-ms-version: 2011-08-18  
Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0  

授权

Set Container ACL 操作仅支持 共享密钥授权

注解

仅帐户所有者可以访问特定容器中的资源,除非帐户所有者通过设置容器上的权限来指定可以公开访问容器资源,或者为容器中的资源发布了共享访问签名。

在设置容器的权限时,将替换现有的权限。 若要更新容器的权限,请调用 Get Container ACL 来提取与容器关联的所有访问策略。 修改要更改的访问策略,然后使用完整的数据集调用 Set Container ACL 以执行更新。

对容器数据启用匿名公共访问

要在容器数据上启用匿名公共读取访问,请调用 Set Container ACL 并将 x-ms-blob-public-access 标头设置为 containerblob。 要禁用匿名访问,请调用 Set Container ACL 而不指定 x-ms-blob-public-access 标头。

如果将 x-ms-blob-public-access 设置为 blob,客户端可以按匿名方式调用以下操作:

如果将 x-ms-blob-public-access 设置为 container,客户端可以按匿名方式调用以下操作:

建立容器级访问策略

存储访问策略可以指定与其关联的共享访问签名的开始时间、过期时间和权限。 根据想要控制对容器或 Blob 资源的访问的方式,可以在存储的访问策略中指定所有这些参数,并从共享访问签名的 URL 中省略这些参数。 通过这样做,可以随时修改关联签名的行为或撤消它。 或者,可以在存储访问策略中指定一个或多个访问策略参数,并在 URL 上指定其他访问策略参数。 最后,可以在 URL 上指定所有参数。 在这种情况下,你可以使用存储访问策略来撤消签名,但不修改其行为。 有关详细信息,请参阅定义存储的访问策略

共享访问签名和存储访问策略必须同时包含授权签名所需的所有字段。 如果缺少任何必填字段,请求将失败。 同样,如果在共享访问签名 URL 和存储访问策略中指定了字段,则请求将失败,状态代码为 400 (错误请求) 。

最多可以随时为单个容器设置五个单独的访问策略。 如果在请求正文中传递了五个以上的访问策略,则服务将返回状态代码 400 (错误请求) 。

可以在容器或 Blob 上发布共享访问签名,而无论是否可以对容器数据进行匿名读取访问。 共享访问签名提供了一种更好的方法来控制访问资源的方式、时间和人员。

注意

在容器上建立存储访问策略时,该策略最多可能需要 30 秒才能生效。 在此时间间隔内,在策略变为活动状态之前,与存储访问策略关联的共享访问签名将失败,状态代码 403 (禁止) 。

另请参阅

限制对容器和 Blob 的访问
使用共享访问签名委托访问权限
创建和使用共享访问签名
定义存储访问策略
获取容器 ACL
授权对 Azure 存储的请求
状态和错误代码
Blob 服务错误代码