Windows Azure存储访问策略删除

时间:2014-12-18 15:24:23

标签: windows azure

我想使用共享访问签名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 个答案:

答案 0 :(得分:3)

  

我的目标是能够删除活动的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);