Storage SDKを使ってSAS付きBLOBに書き込みする
久しぶりにBLOBのSAS(share access sigunature : 共有アクセス署名)を使っていたら、色々忘れてたので備忘録。SASについては、以下にまとめられています。
共有アクセス署名:SAS モデルについて | Microsoft Azure
前回の記事では、UploadをREST APIでやっていた訳なのですが、普通にSDKを使っても同じことができます。逆に前回 なぜ REST API を使ったのかが思い出せません。
以下、BLOBに対してSASを取得してから、SDKから上書きする例です。SAS Tokenは、 StorageCredentials への引数としてあたえることができ、CloudBlobStorageインスタンスを作成するときに、そのCredentialを渡すことで、 CloudBlockBlob インスタンスを作成しています。
...
...
var sas = blob.GetSharedAccessSignature(new SharedAccessBlobPolicy()
{
SharedAccessStartTime = DateTime.UtcNow.AddMinutes(-5),
SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(+5),
Permissions = SharedAccessBlobPermissions.Write | SharedAccessBlobPermissions.Read
});
Console.WriteLine (blob.Uri.AbsoluteUri);
Console.WriteLine (blob.Uri.AbsoluteUri + sas);
var creds2 = new StorageCredentials(sas);
var blob2 = new CloudBlockBlob(blob.Uri, creds2);
blob2.UploadFromFile(@"hoge.jpg", FileMode.Open);
}
credential 作成できなくても、SAS付きのURIをざっくり渡しちゃうのでもOKみたいです。
var blob2 = new CloudBlockBlob(new Uri(blob.Uri + sas2))
みたいな。といわけで、ポイントはStorageAccountインスタンスは作らなくても良いというところでしょうか。