Azure Blob Indexer ConnectionString SharedAccessSignature

时间:2016-02-17 17:01:43

标签: azure azure-search

我正在尝试使用Azure搜索Blob索引器的预览。使用完整连接字符串配置索引器时,索引器成功通过(除了我在其他问题中提到的问题)。

我要做的是限制Indexer使用SharedAccessSignature而不是完整的ConnectionString。

查询索引器状态时我收到的消息(status.LastResult.ErrorMessage)如下:

The remote server returned an error: (403) Forbidden.

我可以使用以下示例代码重现这一点:

    static void Main(string[] args)
    {
        var SASToken = ConfigurationManager.AppSettings["SASToken"];
        var endpoint = ConfigurationManager.AppSettings["BlobEndpoint"];

        var sasToken = Encoding.UTF8.GetString(Convert.FromBase64String(SASToken));
        var conn = $"BlobEndpoint={endpoint};SharedAccessSignature={sasToken};";
        var csa = CloudStorageAccount.Parse(conn);
        var blobClient = csa.CreateCloudBlobClient();
        var container = blobClient.GetContainerReference("main");

        // This throws an Error, 403 forbidden, as the SAS may not access the Container
        // none theless the indexer can still list blobs ...
        var exists = container.Exists();

        // ... as used here..
        var blobs = container.ListBlobs("documentArchive", true).ToList();
        foreach(var blob in blobs.OfType<CloudBlockBlob>())
        {
            var ms = new MemoryStream();
            blob.DownloadToStreamAsync(ms).Wait();
            var data = ms.ToArray();
            Console.WriteLine(blob.StorageUri);
        }
    }

我的假设是Azure搜索索引器检查Container是否存在,获取异常然后停止。我认为这种限制是不必要和混乱的,因为blob仍然可以被枚举和索引正确。

1 个答案:

答案 0 :(得分:0)

目前不支持使用SAS URI作为blob数据源凭据。这是我们的关注点,请投票给this UserVoice suggestion以帮助我们确定这项工作的优先顺序。谢谢!