Windows Azure 存储访问策略删除
Posted
技术标签:
【中文标题】Windows Azure 存储访问策略删除【英文标题】:Windows Azure Stored Access Policy Remove 【发布时间】:2014-12-18 15:24:22 【问题描述】:我想使用共享访问签名 SAS 下载 blob。
我还希望能够删除活动的 SAS URI,如果我理解正确,我必须为此使用存储访问策略。
让我感到困惑的是如何删除策略。我还读到您只能激活 5 个存储的访问策略?
我的目标是能够删除活动的 SAS URI。我能想到的唯一方法是删除与 SAS URI 链接的策略,对吗?如果我的 blob 存储中有超过数百个文件,我到底如何才能完成这项工作?我不能为每个 blob 制定一个策略,对吗? 5是最高保单吗?
此代码演示了我如何添加策略以及如何创建使用此策略的 SAS URI,用户可以从中下载。
static void CreateSharedAccessPolicy(CloudBlobContainer container)
//Create a new stored access policy and define its constraints.
SharedAccessBlobPolicy sharedPolicy = new SharedAccessBlobPolicy()
SharedAccessExpiryTime = DateTime.UtcNow.AddHours(10),
Permissions = SharedAccessBlobPermissions.Read | SharedAccessBlobPermissions.Write | SharedAccessBlobPermissions.List
;
//Get the container's existing permissions.
BlobContainerPermissions permissions = new BlobContainerPermissions();
//Add the new policy to the container's permissions.
permissions.SharedAccessPolicies.Clear();
permissions.SharedAccessPolicies.Add("PolicyName", sharedPolicy);
container.SetPermissions(permissions);
static string GetBlobSasUriWithPolicy(CloudBlobContainer container, string policyName)
//Get a reference to a blob within the container.
CloudBlockBlob blob = container.GetBlockBlobReference("file_name");
//Generate the shared access signature on the blob.
string sasBlobToken = blob.GetSharedAccessSignature(null, "PolicyName");
//Return the URI string for the container, including the SAS token.
return blob.Uri + sasBlobToken;
最后一个问题,如何删除策略?是不是很简单:
permissions.SharedAccessPolicies.Remove("PolicyName");
【问题讨论】:
【参考方案1】:我的目标是能够删除活动的 SAS URI。我唯一的办法 能想到做到这一点就是去掉SAS的策略 URI是链接的,对吧?
部分正确。删除访问策略是一种方法。其他方法是更改策略的名称(策略标识符)。例如,如果策略标识符为 mypolicy
,则将其更改为 mypolicy1
将与删除策略具有相同的效果。
如果我的 Blob 存储中有超过数百个文件,那么到底该怎么做? 我可以完成这项工作吗?
您可能已经知道,访问策略是在 blob 容器级别定义的,而不是在 blob 级别。删除/使访问策略无效将使该容器中所有 blob 的 SAS URL 无效。
我不能为每个 blob 制定一个策略,对吗? 5 是最大值 政策?
没错。
最后一个问题,如何删除策略?是不是很简单: permissions.SharedAccessPolicies.Remove("PolicyName");
没错。不过,请确保将其保存回来。你可以使用类似的东西:
var cloudStorageAccount = CloudStorageAccount.DevelopmentStorageAccount;
var blobClient = cloudStorageAccount.CreateCloudBlobClient();
var container = blobClient.GetContainerReference("container-name");
var containerPermissions = container.GetPermissions();
containerPermissions.SharedAccessPolicies.Remove("access-policy-id");
container.SetPermissions(containerPermissions);
【讨论】:
很好的答案,谢谢。为了清楚起见,跟踪数百个 SAS URI 并手动删除它们是不可能的吗?如果您给我最后一条评论,我将很乐意接受您的回答;) 如果您使用容器访问策略并且所有 blob 都在同一个容器中,那么您不需要删除/使 100 个 blob 上的 SAS URL 无效。使容器上的访问策略无效只会使该容器中所有 blob 的 SAS URL 无效。 HTH。 是的,但我想要的是能够只删除 一个 SAS URI。我不希望策略在 所有 blob 上重置。由于政策限制,这是不可能完成的,是吗? 我认为你是对的。不过,我想了解更多关于您的应用程序的信息,以便我可以提出一些替代方案。以上是关于Windows Azure 存储访问策略删除的主要内容,如果未能解决你的问题,请参考以下文章