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 以帮助我们确定这项工作的优先级。谢谢!
我正在尝试使用 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 以帮助我们确定这项工作的优先级。谢谢!