探索存储访问策略

已完成

存储访问策略对服务器端的服务级别共享访问签名 (SAS) 提供额外一个级别的控制。 建立存储访问策略可将 SAS 分组,并对受该策略约束的签名施加其他限制。 可以使用存储访问策略来更改签名的开始时间、到期时间或权限,或者在签名后撤消签名。

以下存储资源支持存储访问策略:

  • Blob 容器
  • 文件共享
  • 队列

创建存储访问策略

SAS 的访问策略包含开始时间、到期时间和该签名的权限。 可以在签名 URI 中指定所有这些参数,而不在存储访问策略中指定任何参数;在存储访问策略上指定所有这些参数,而不在 URI 上指定任何参数;或者采用上面两种方法的任意组合。 不过,不能在 SAS 令牌和存储访问策略中同时指定给定参数。

若要创建或修改存储访问策略,请通过指定访问策略条款的请求正文调用针对资源的 Set ACL 操作(参阅设置容器 ACL设置队列 ACL设置表 ACL设置共享 ACL)。 请求正文包括你选择的唯一签名标识符(长度最多为 64 个字符)和访问策略的可选参数,如下所示:

注意

建立容器、表、队列或共享的存储访问策略时,它可能最多需要 30 秒才能生效。 在此期间,针对与存储访问策略关联的 SAS 的请求可能会失败并显示状态代码 403(禁止),直到访问策略变为活动状态。 表实体范围限制(startpkstartrkendpkendrk)无法在存储访问策略中指定。

下面是使用 C# .NET 和 Azure CLI 创建存储访问策略的示例。

BlobSignedIdentifier identifier = new BlobSignedIdentifier
{
    Id = "stored access policy identifier",
    AccessPolicy = new BlobAccessPolicy
    {
        ExpiresOn = DateTimeOffset.UtcNow.AddHours(1),
        Permissions = "rw"
    }
};

blobContainer.SetAccessPolicy(permissions: new BlobSignedIdentifier[] { identifier });
az storage container policy create \
    --name <stored access policy identifier> \
    --container-name <container name> \
    --start <start time UTC datetime> \
    --expiry <expiry time UTC datetime> \
    --permissions <(a)dd, (c)reate, (d)elete, (l)ist, (r)ead, or (w)rite> \
    --account-key <storage account key> \
    --account-name <storage account name> \

修改或撤消存储访问策略

若要修改存储访问策略的参数,可以调用资源类型的访问控制列表操作来替换现有策略。 例如,如果现有策略向资源授予读取和写入权限,则可以修改它以便对所有将来的请求仅授予读取权限。

若要撤消存储访问策略,可以删除它,通过更改有签名的标识符对其进行重命名,或将过期时间更改为过去的某个值。 更改签名标识符会中断任何现有签名与存储访问策略之间的关联。 将过期时间更改为过去的某个值会导致所有关联的签名过期。 删除或修改存储访问策略会立即影响与之关联的所有 SAS。

若要移除单个访问策略,请调用资源的 Set ACL 操作,从而传入要在容器上维护的签名标识符集。 若要从资源中移除所有访问策略,请使用空白请求正文调用 Set ACL 操作。