Azure
blob
BlobURL
AzureStorage
BlobStorage

Azure BLOB Storage + SAS URL を使ったベストプラクティスの例

こんな人に向けた記事

AzureのBLOB Storageを使ってセキュアでかつ上手な使い方をしたいけどMSDNは書いてあることが大量なので簡単に必要なことだけまとめてあると楽でいいなーと思っていた人。

SAS使わないでGatewayにStorageKey保存して利用しようとしてセキュリティざるなのでダメに決まってるだろうとレビュアーに怒られたけど、どうすればいいかわからない人にも。

関連記事

この記事で使われているシーケンス図はseqdiag利用マニュアルで作成しています。

今回の例でやっていること

sasurl.png

Gatewayが複数のファイルをアップロードするシナリオに向けた設計例となります。
Gatewayに限った設計ではなく、「利用者」と読み替えてもらうことで汎用的に使えるものです。

ただファイルをアップロードさせるだけでなく、エンタープライズシステムで利用するために以下の点を考慮した設計になっています。それぞれの点についてどのような方式・設計で実現しているか記載します。

SASを使ったセキュリティ

  • 超簡単に書くとURLのクエリーストリングに利用期間等の権限がついていて、そのURLそのものを検証できるシグネチャ付きで提供できるもの。期間などを書き換えるとシグネチャと一致しないのでNGとなるので、短い期間でSAS発行することで他人に知られたときにはそのURLは既に期限切れになっているので安全ですよっていう、ざっくりいうとそんなものです。

  • 上記の内容について、ちゃんとした文書が必要な人は、諦めてMSのページを見ましょう。

  • FIXER社の技術ブログの日山さんの記事も非常に参考になると思います。

送信途中の状態をシステムで把握可能(送信中に障害で停止した、なども把握したい)

  • SAS URLを発行するタイミングでシステムにはファイル名とステータスを登録する。(登録時はURL発行済)
  • アップロード完了報告の際に対象のファイルが全てBLOBにアップロード済か検証しステータスを更新する。(ファイル登録未済 OR 完了)
  • 必要れあればダッシュボードやバッチなどでこのステータスを使って見たい情報を出したりアラート設定したりする。

ファイルが複数ある場合にも対応

  • 最初の要求でFileCountを一緒に登録させる

ファイルを色々な条件で検索したい

  • DBにファイル名以外の属性も登録して管理する
    • 検索さえ出来れば良いのでSQL DatabaseでもCosmosDBでも好きなデータストアを使ってよい

応用例

アップロード完了報告の際にキュー登録するとかして、Web JobsでこのファイルをFFMpegで連結してMediaServicesにエンコード用登録する処理をKickする、といったことをが出来ます。やたら具体的な例ですね。
FFMpegみたいな外部PGM使わないなら、今は極力Fnctions使っておきましょう。

利用事例

社名は出せませんが私が提供した会社さま複数社で元気に稼働中です。