这个请求没有被授权执行此操作。Azure blobClient

37

我有以下代码,使用WindowsAzure.Storage nuget包返回一个容器列表:

public static class AzureBlobStorageClient
{
    public static CloudBlobClient GetClient(string AccountName = "foo", string AccountKey = "bar" )
    {
        try
        {

            var connectionString = $"DefaultEndpointsProtocol=https;AccountName={AccountName};AccountKey={AccountKey};EndpointSuffix=core.windows.net";
            CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString);
            CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
            IRetryPolicy exponentialRetryPolicy = new ExponentialRetry(TimeSpan.FromSeconds(2), 10);
            blobClient.DefaultRequestOptions.RetryPolicy = exponentialRetryPolicy;
            return blobClient;
        }
        catch (StorageException ex)
        {
            Console.WriteLine("Error returned from the service: {0}", ex.Message);
            throw;
        }
    }

    public static void DeleteContainer(CloudBlobContainer container)
    {
        var result = container.DeleteIfExistsAsync().Result;
    }

    public static List<CloudBlobContainer> GetContainers()
    {
        var client = GetClient();
        BlobContinuationToken continuationToken = null;
        List<CloudBlobContainer> results = new List<CloudBlobContainer>();
        do
        {
            var response = client.ListContainersSegmentedAsync(continuationToken).Result;
            continuationToken = response.ContinuationToken;
            results.AddRange(response.Results);
        }
        while (continuationToken != null);

        return results;
    }

}

当我运行代码时,客户端出现以下错误:client.ListContainersSegmentedAsync(continuationToken).Result:

System.AggregateException: '发生了一个或多个错误。(此请求未被授权执行此操作。)'

我不知道如何为请求设置授权。

我的问题是如何解决这个错误信息。


1
你的代码看起来没问题。请查看我的评论:https://dev59.com/KrPma4cB1Zd3GeqPxNzR。 - Gaurav Mantri
3个回答

104

感谢@gaurav Mantri提供的答案。

问题在于我的客户端IP未被添加到存储帐户的防火墙规则中。

要更改此设置,请转到:

存储账户 > {yourAccount} > 网络 > 防火墙和虚拟网络

然后添加您的IP地址


1
+1'd...太明显了,让人感到非常烦恼!然而每当我在远程位置工作时,我总是忘记将我的新IP添加到防火墙中...反而认为我的错误是由于Azure Functions的更新在一夜之间破坏了一切...欢迎来到我的早晨! :) - Peter
安全解决方案万岁! - Clocker
公共 IP 地址可以通过 curl ifconfig.co 找到。 - Mohammad Rijwan

1
请注意,在启用所有或将您的IP地址添加到白名单之后,需要大约1分钟才能反映更改。

0

看起来该用户没有执行此操作的权限。请前往 IAM 并进行所需的角色分配以执行该操作。我之前也遇到过无法在 SA 中创建容器的类似情况。在我的登录名中分配了 contributer 角色后,它就能正常工作了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接