BLOB のコンテナーレベルでのアクセス制御
質問
特定の人に対して、BLOB ストレージアカウントの特定のコンテナーにだけ読み書きできるようにしたいのですが、どうすればいいですか。できれば、アクセス許可を与えたコンテナー以外にどのようなコンテナーがあるか、ということも見えないようにしたい。
解説
前提
例としてはシンプルにストレージアカウント内に二つの BLOB コンテナー (con1、con2) があり、con1 配下にある BLOB に対してだけ読み書きできる、という前提にします。
回答
こちらは以下の資料が参考になります。
BLOB データにアクセスするための Azure ロールを割り当てる
この資料にあるように結論としては、以下を割り当てます。
- ストレージアカウントレベルでの 閲覧者ロール
- コンテナーレベルでのストレージ BLOB データ共同作成者などのデータ アクセス ロール
それぞれ、ロールの割り当てで探すと以下のように出てきます。
上記の二つのロールを割り当てたユーザーから、Azure ポータルで該当のストレージアカウントを参照した例を以下に示します。 まず、コンテナー自体は両方とも見えます。
そして、con1 についてはストレージ BLOB データ共同作成者のロールがあるため、コンテナー内の BLOB が見えます。また、アップロードや削除等もできます。
一方、con2 については con1 と異なり、コンテナーレベルでBLOB データ共同作成者のロールを割り当てていませんので、コンテナー内の BLOB は見えません。以下のようにエラーが表示されます。
ここまでは、正直なところ先述の資料に書いてある通りなのですが、こちらの方法ですとコンテナーの一覧まではストレージアカウントレベルの閲覧者のロールがあることによって見ることはできます。ロールを割り当てていないコンテナーの中身は見えない状況ですが、コンテナーの一覧も該当のユーザーには見せたくない、という場合にできる方法を紹介します。
他のコンテナーも見せたくない場合に実施できる方法
Azure ポータルを利用すると、どうしてもストレージアカウントのリソースを表示してからコンテナーをたどる、という手順になり、リソースを表示するために必要な閲覧者ロールの割り当てを消すことはできません。そのため、今回は Storage Explorer を利用します。 Azure Storage Explorer は GUI のツールとなり、BLOB の操作などができます。後述の参考ドキュメントのリンクよりダウンロードすることができます。
そして、実際にやることですが、ストレージアカウントレベルの閲覧者の権限は削除をし、以下の権限だけを該当のユーザーに割り当てます。
- コンテナーレベルでのストレージ BLOB データ共同作成者などのデータ アクセス ロール
そして、該当のユーザーを利用して、Storage Explorer を用いて接続する手順を以下に示します。
(1) Storage Explorer から接続するときに、BLOB コンテナーまたはディレクトリ、を選択します。
(2) OAuth を使用してサインインする、を選択し、利用するユーザーとサインインするテナントを指定
(3) BLOB コンテナーまたはディレクトリの URL の欄に、”https://mystorage0123.blob.core.windows.net/con1” というような URL を指定します。
mystorage0123 の部分はストレージアカウント名、con1 の部分はコンテナー名で書き換えてください。
上記の手順を実施しますと、以下のように対象のコンテナー(今回は con1) の中身だけを表示し、かつ、別のコンテナーの名前が表示される、ということもございません。
閲覧者の権限がないため、接続するストレージアカウント名とコンテナー名は別途該当のユーザーに連携する、という必要がございますが、コンテナーの一覧も見せたくない、というような要件がある場合には、こちらの方法のご利用もご検討いただける内容かと思います。
参考ドキュメント
上記で利用している Azure Storage Explorer は以下からダウンロードができます。
2025 年 4 月 15 日時点の内容となります。
本記事の内容は予告なく変更される場合がございますので予めご了承ください。