2016-10-05 32 views
0

我試圖將一個blob從一個uri複製到另一個(都在相同的存儲帳戶內),兩者都有一個用於證書的SAS令牌。這適用於沒有IP限制的SAS令牌,但當源BLOB SAS令牌受IP限制時會失敗。使用SAS令牌的Azure副本blob(具有IP限制)403禁止

注:這不是失敗,因爲我已經拿到了IP錯誤,其他的斑點職能的工作,即列表,刪除,上傳等

示例代碼:

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範圍嗎? 有沒有其他方法可以複製允許使用SAS令牌的blob?

回答

2

一個猜測是複製請求源自Azure,因此 IP地址被阻止?我應該將源SAS令牌配置爲 從Azure內接受IP範圍嗎?

你是絕對正確的。複製操作是服務器端操作,SAS令牌中指定的IP地址是客戶端IP地址。由於SAS中包含的IP地址不是Azure IP地址,因此複製操作失敗。您可以將SAS令牌配置爲接受來自Azure內部的IP範圍,但我猜測是因爲正在使用某些內部IP地址進行復制,所以我不確定這是否可行。

是否有另一種方法可以複製允許使用SAS令牌的blob?

我建議不要在SAS中使用IP ACLing進行復制操作,即不要在SAS中爲複製操作指定IP地址限制。

+0

好的感謝。想知道這是否應該被視爲API中的錯誤?該功能在那裏,但不符合文檔的說法。也許我應該請求複製方法保留原始憑證。 –

+1

我不會將這稱爲bug,因爲該功能按預期工作。您希望從特定IP地址使用SAS URL,這就是它的作用。 –