我正在尝试使用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仍然可以被枚举和索引正确。
答案 0 :(得分:0)
目前不支持使用SAS URI作为blob数据源凭据。这是我们的关注点,请投票给this UserVoice suggestion以帮助我们确定这项工作的优先顺序。谢谢!