Azure使用SAS令牌复制blob(带IP限制)403禁止



我试图将blob从一个uri复制到另一个uri(都在相同的存储帐户中),两者都有一个SAS令牌的凭据。这对于没有IP限制的SAS令牌可以正常工作,但是当源blob SAS令牌受IP限制时就会失败。

注意:它不是失败,因为我已经得到了错误的IP,其他blob功能工作即列表,删除,上传等

示例代码:

Uri sourceBlobUri = new Uri("https://mystorage.blob.core.windows.net/a-container/a.json");
Uri targetBlobUri = new Uri("https://mystorage.blob.core.windows.net/a-container-archive/a.json");
var prodTokenSource = @"A_SAS_TOKEN_WITH_A_IP_RESTRICTION";
var prodTokenArchive = @"A_SAS_TOKEN_WITH_A_IP_RESTRICTION";
StorageCredentials sourceCredentials = new StorageCredentials(prodTokenSource);
StorageCredentials targetCredentials = new StorageCredentials(prodTokenArchive);
CloudBlockBlob sourceBlob = new CloudBlockBlob(sourceBlobUri, sourceCredentials);
CloudBlockBlob targetBlob = new CloudBlockBlob(targetBlobUri, targetCredentials);
await targetBlob.StartCopyAsync(sourceBlob); //Fails 403 error

一种猜测是复制请求来自Azure内部,所以IP地址被阻止了?我是否应该配置源SAS令牌以接受来自Azure内部的IP范围?有没有另一种方法来复制blob,允许使用SAS令牌?

一种猜测是复制请求来自Azure内部,所以IP地址被屏蔽?我应该将源SAS令牌配置为吗接受Azure内的IP范围?

你完全正确。复制操作为服务器端操作,SAS令牌中指定的IP地址为客户端IP地址。由于SAS中包含的IP地址不是Azure IP地址,因此复制操作失败。您可以将SAS令牌配置为接受Azure内部的IP范围,但我猜测正在使用复制一些内部IP地址,因此我不确定这是否有效。

是否有另一种方法来复制blob,允许使用SAS令牌?

我建议不要在SAS中使用IP ACLing进行复制操作,即不要在SAS中指定IP地址限制进行复制操作。

最新更新