2016-10-05 83 views
0

uriから別のuri(同じストレージアカウント内の両方)にBLOBをコピーしようとしていますが、両方ともクレデンシャル用のSASトークンを持っています。これはIP制限のないSASトークンでうまく動作しますが、ソースBLOB SASトークンがIP制限されていると失敗します。SASトークン(IP制限付き)を使用したAzureコピーBLOB

注:私は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アドレスはブロックされていますか? Azure内のIP範囲を受け入れるようにソースSASトークンを設定する必要がありますか? SASトークンを使用できるようにブロブをコピーする別の方法はありますか?

答えて

2

コピー要求がAzure内から発信されているので、 IPアドレスがブロックされていますか?ソースSASトークンを に設定して、Azure内からIP範囲を受け入れる必要がありますか?

あなたは絶対に正しいです。コピー操作はサーバ側操作であり、SASトークンで指定されたIPアドレスはクライアントのIPアドレスです。 SASに含まれるIPアドレスはAzure IPアドレスではないため、コピー操作は失敗しています。あなたはAzure内からIP範囲を受け入れるようにSASトークンを設定することができますが、内部IPアドレスのコピーが使用されていると推測していますので、動作するかどうかわかりません。

SASトークンを使用できるようにブロブをコピーする別の方法はありますか?

コピー操作にSASのIP ACLを使用しないでください。つまり、コピー操作にSASでIPアドレス制限を指定しないことをお勧めします。

+0

ありがとうございました。これをAPIのバグと見なすべきかどうか疑問に思っていますか?この機能はそこにありますが、ドキュメントの記述方法は機能しません。おそらく私はコピーメソッドが元の資格情報を保持するように要求するべきです。 –

+1

私はこの機能を意図したとおりに動作させるので、これをバグと呼んでいません。特定のIPアドレスからSAS URLを使用する場合は、これが目的です。 –

関連する問題