Open1

Azure Blob Storage に置いたファイルを表示するwebアプリを作る上での概念整理

nassynassy

ストレージアカウント <--> BlobServiceClient
blob コンテナ <--> container_client
ブロブ
保存済みアクセスポリシー(5つまで)
SAS token の関係
blob url と sas token

Azure Blob Storage は ストレージサービス群の1つ

Azure Blob Storage は ストレージサービス群の1つであり、
使い始めるにはストレージアカウントを作成する必要がある。
https://docs.microsoft.com/ja-jp/azure/storage/common/storage-account-overview

ストレージアカウントを作成すると Blob Storage の他に以下が付いてくる

  • ファイル共有
  • キュー
  • テーブル

blob コンテナ の中に Blob リーソース を置く

Azure Blob Storage サービスの中にコンテナを配置して、各コンテナの中にBlob リーソースを置いていきます。

blob リソースは階層化できる

Blob リーソースの要求承認方法を知る

ストレージアカウントの共有キー、AzureAD認証、SAS(共有アクセスシグニチャ) などのアクセス方法があります。
https://docs.microsoft.com/en-us/rest/api/storageservices/authorize-requests-to-azure-storage

web アプリケーションであれば SAS を発行して、
一時的にクライアント(webアプリ)に読み取り権限を与えることが多いと思われます。

SAS とは

共有アクセス署名(SAS)は、AzureStorageリソースへの制限付きアクセス権を付与するURIです。ストレージアカウントキーで信頼されるべきではないが、特定のストレージアカウントリソースへのアクセスを委任したいクライアントに共有アクセス署名を提供できます。共有アクセスシグニチャURIをこれらのクライアントに配布することにより、指定された一連のアクセス許可を使用して、指定された期間、リソースへのアクセスをクライアントに許可できます。
https://docs.microsoft.com/en-us/rest/api/storageservices/delegate-access-with-shared-access-signature

SAS(共有アクセスシグニチャ)の発行方法が複数ある

SAS(共有アクセスシグニチャ)の発行方法が複数あります。
https://docs.microsoft.com/en-us/rest/api/storageservices/delegate-access-with-shared-access-signature

サービスSASは、必要に応じてリソースへのアクセスを変更または取り消す機能など、一連の署名に対する追加レベルの制御を提供する保存済みアクセスポリシーを参照できます。

SAS を短いサイクルで回すことでセキュリティを保ちます。
一方でSASを発行してから、リソースへのアクセスが可能になるまで時間も必要なので、バランスを取る必要があります。

保存されたアクセスポリシー

https://docs.microsoft.com/en-us/rest/api/storageservices/define-stored-access-policy

SAS

BLOB SAS URL = コンテナURL + blob ファイル名(オブジェクトのパス) + SAS_TOKEN

set_container_access_policy
https://docs.microsoft.com/en-us/python/api/azure-storage-blob/azure.storage.blob.containerclient?view=azure-python#azure-storage-blob-containerclient-set-container-access-policy
注意点 設定したもので洗い替えされる

(アプリから拝借)
SAS_TOKEN = SAS を認証したり、BLOB およびアクセスに使用可能なアクセス許可や、署名が有効な期間を指定したりするために必要なすべての情報を含んだクエリ文字列。BLOB URL を構成するには、BLOB サービス エンドポイントに SAS トークンを追加するか、次の URL を使用します。

主要クラスとメソッドを整理

over view
https://docs.microsoft.com/en-us/python/api/azure-storage-blob/azure.storage.blob?view=azure-python

blob client
https://docs.microsoft.com/en-us/azure/developer/python/sdk/storage/azure-storage-blob/azure.storage.blob.blobclient?view=storage-py-v12

containerclient
https://docs.microsoft.com/en-us/python/api/azure-storage-blob/azure.storage.blob.containerclient?view=azure-python

set_container_access_policy
https://docs.microsoft.com/en-us/python/api/azure-storage-blob/azure.storage.blob.containerclient?view=azure-python#azure-storage-blob-containerclient-set-container-access-policy

get_container_access_policy
https://docs.microsoft.com/en-us/python/api/azure-storage-blob/azure.storage.blob.containerclient?view=azure-python#azure-storage-blob-containerclient-get-container-access-policy

generate_container_sas
https://docs.microsoft.com/en-us/python/api/azure-storage-blob/azure.storage.blob?view=azure-python#azure-storage-blob-generate-container-sas

AccessPolicy
https://docs.microsoft.com/en-us/python/api/azure-storage-blob/azure.storage.blob.accesspolicy?view=azure-python

walk_blobs
https://docs.microsoft.com/en-us/azure/developer/python/sdk/storage/azure-storage-blob/azure.storage.blob.containerclient?view=storage-py-v12#walk-blobs-name-starts-with-none--include-none--delimiter--------kwargs-

blob object
https://docs.microsoft.com/en-us/python/api/azure-storage-blob/azure.storage.blob.blobproperties?view=azure-python

オープンソースエミュレーター
https://docs.microsoft.com/ja-jp/azure/storage/common/storage-use-azurite?tabs=docker-hub#authorization-for-tools-and-sdks
https://hub.docker.com/_/microsoft-azure-storage-azurite