Azure Blob 索引器 ConnectionString SharedAccessSignature

Azure Blob Indexer ConnectionString SharedAccessSignature

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

我想做的是限制索引器使用 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 搜索索引器检查容器是否存在,获取异常然后停止。我认为这种限制是不必要的并且令人困惑,因为仍然可以正确枚举和索引 blob。

当前不支持使用 SAS URI 作为 blob 数据源凭据。这在我们的雷达上,请投票给 this UserVoice suggestion 以帮助我们确定这项工作的优先级。谢谢!