【Azure Storage】ブラウザから Blob を表示する方法


Azure Blob Storage では、ストレージアカウントに格納したデータにアクセスする際に、既定で認証が必要です。
そのため、Blob URL をそのままブラウザに入力してアクセスしただけでは、認証エラーで弾かれてしまいます。

Azure Blob Storage の認証方法は、下記が用意されています。
・アカウント アクセス キー 認証
・Azure AD 認証

◆アカウント アクセス キーを使用する
アカウント アクセス キーを使用して BLOB データにアクセスするには、Azure RBAC アクション Microsoft.Storage/storageAccounts/listkeys/action を含む Azure ロールが割り当てられている必要があります。 この Azure ロールは、組み込みロールまたはカスタム ロールのどちらでも構いません。 Microsoft.Storage/storageAccounts/listkeys/action をサポートする組み込みロールには、権限が最小のものから最大のものの順に、次のものが含まれます。
・閲覧者とデータ アクセス ロール
・Storage Account の共同作成者ロール
・Azure Resource Manager の共同作成者ロール
・Azure Resource Manager の所有者ロール

◆自分の Azure AD アカウントを使用する
Azure AD アカウントを使用して、Azure portal から BLOB データにアクセスするには、次のステートメントが両方とも自分に当てはまる必要があります。
・BLOB データへのアクセスを提供する組み込みロールまたはカスタム ロールのいずれかが割り当てられている。
・Azure Resource Manager のリーダーロールが、少なくとも、ストレージ アカウント以上のレベルを範囲として割り当てられている。 リーダー役割は最も制限の厳しいアクセス許可を付与しますが、ストレージ アカウントの管理リソースへのアクセス権を付与する別の Azure Resource Manager ロールも受け入れることができます。

今回は、Azure AD 認証を利用します。
しかし、Azure Blob Storage 単体で、ブラウザからのアクセス時に Azure AD 認証を行う機能がないため、Azure AD 認証を行いたい場合は、あらかじめ発行した SAS を利用することを考えました。

◆ Shared Access Signatures (SAS) を使用して Azure Storage リソースへの制限付きアクセスを許可する
Shared Access Signature (SAS) を使用すると、ストレージ アカウント内のリソースへのセキュリティで保護された委任アクセスが可能になります。 SAS を使用すると、クライアントがデータにアクセスする方法をきめ細かく制御できます。 次に例を示します。

クライアントがアクセスできるリソース。
それらのリソースに対するアクセス許可。
SAS が有効である期間。

発行した SAS を Blob URL に付け加えることで、ブラウザからアクセスした際に、SAS を利用して要求が承認されます。

<Blob URL 例>
https://<mystorageaccount>.blob.core.windows.net/<myContainer>/sampleblob.txt?sp=racwdli&st=2021-01-01T01:00:00Z&se=2021-01-02T00:00:00Z&spr=https&sv=2020-08-04&sr=c&sig=S5b3mQ8FwAHbBmBhIGRjiejKwu658N%2MHri7%2Fa9yC9LE%3D

SAS の取り扱いは十分注意が必要です。

◆ SAS を使用する際のベスト プラクティス
アプリケーションで Shared Access Signature を使用する場合は、次の 2 つの潜在的なリスクに注意する必要があります。

・SAS が漏えいすると、取得した人はだれでも使用できるため、ストレージ アカウントの安全性が損なわれるおそれがあります。
・クライアント アプリケーションに提供された SAS が期限切れになり、アプリケーションがサービスから新しい SAS を取得できない場合は、アプリケーションの機能が損なわれる可能性があります。

Azure Blob Storage 側で認証を行う必要がない場合、下記方法でも可能です。
・匿名のパプリックアクセスを許可する
・静的 WEB サイトとして公開

これらの方法では、外部からのアクセスが認証なしで行えます。
利用する際は、Azure Storage のファイアウォール機能で、アクセス元の IP アドレスを制限するなどの方法を検討しましょう。
IP アドレスの制限は、SAS を利用したアクセスでも有効で 設定した IP アドレス以外からのアクセスをブロックします。

Azure Storage では、多層型セキュリティ モデルが提供されています。 このモデルでは、使用されるネットワークまたはリソースの種類とサブネットに基づいて、アプリケーションやエンタープライズ環境で求められるストレージ アカウントへのアクセス レベルを確保して制御できます。 ネットワーク ルールを構成すると、指定したネットワークのセットまたは指定した Azure リソースのセットを経由してデータを要求しているアプリケーションのみが、ストレージ アカウントにアクセスできます。 ストレージ アカウントへのアクセスを、指定した IP アドレス、IP 範囲、Azure Virtual Network (VNet) 内のサブネット、または一部の Azure サービスのリソース インスタンスから発信された要求に制限できます。