4
1

More than 1 year has passed since last update.

[備忘録] Azure Storage Account (Blob) のアクセス権について

Posted at

はじめに

AzureにおけるStorage Account(主にBlob Storage)のアクセスをどう制御するかについて、調査したことを備忘として残しておく。
検証に使用したリソースは削除済みであるため、画像に写り込んでいるURLやアクセスキーなどは無効となっている。
検証日: 2023/07/06

完全にPublicにしたい時

コンテナーを作成するときに、パブリックアクセスレベルを「BLOB」に設定する。(「コンテナー」でもOKだが、コンテナ内のBLOBを一覧表示できるようになる)

BLOBパスを示したURLだけで、ファイルにアクセスできるようになる。

Privateにしたい時

前提として、コンテナーは「プライベート」のアクセスレベルで作成する。じゃないとパブリックで誰でも閲覧できる状態になってしまう。

手っ取り早くアクセスできるようにしたい時

アクセスキーを使用する。

デメリットとしては、何でもできてしまうこと。
ストレージアカウント内のBlob、File、Queue、Tableは全て読取も書込も可能で、削除することもできる。

かなり危ないので、次に紹介するSASを使用するのがベター。

制限付きアクセスを付与する

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

Shared Access Signatures (SAS) でデータの制限付きアクセスを付与する - Azure Storage | Microsoft Learn より引用

以下のことを制御できる。

  • どのリソースにアクセスできるか
    • Blobであればコンテナー単位
  • リソースに対し何の操作ができるか
    • 読取・書込・削除など
  • SAS有効期間

SAS を使用する際のベスト プラクティス には目を通しておく。

SASには下記3種類あるが、サービス SASおよびアカウント SASは、ストレージアカウントキー(アクセスキー)に依存する。アクセスキーは漏洩したらアウトであり、頻繁に更新が推奨されているが、管理コストが増えてしまう。公式でも、warning noteに示すように、AzureAD認証を用いた「ユーザー委任 SAS」の使用を呼びかけている。

  1. ユーザー委任 SAS
  2. サービス SAS
  3. アカウント SAS

セキュリティのベスト プラクティスとして、より侵害されやすいアカウント キーを使用するのではなく、可能な限り Azure AD 資格情報を使用することをお勧めします。 アプリケーション設計で、BLOB ストレージへのアクセスのため、Shared Access Signature が必要な場合は、セキュリティを強化するために、可能な限り、Azure AD 資格情報を使用してユーザー委任 SAS を作成してください。 詳細については、「Azure Storage でデータへのアクセスを承認する」をご覧ください。

公式ドキュメント より引用

ストレージアカウントキー(アクセスキー)を使用しないなら、安全のためにも無効化しておくと良い。

アカウントSASを利用する場合の手順メモ

推奨されてはいないが、使わざるを得ない時もありそうな気がするのでメモ

アクセスポリシーの作成

アクセスポリシーを先に作成し、アカウントSASに紐づけることで、有効期限やアクセス許可を柔軟に変更することができる。

アクセスポリシーを作成したいコンテナのメニューから、「アクセス ポリシー」を選択

許可するアクセス種類や有効期限を設定する。
(実質)無期限に設定することもできそうだ。

SASの発行

SASを作成したいコンテナのメニューから、「SAS の生成」を選択

  • アカウントSAS、ユーザー委任SASのどちらを作成するか
  • アカウントキーはどちらを使うのか
  • どのアクセスポリシーを使用するか

などを指定できる。

動作確認

Public設定時は、下記のようなリソースパスを示したURLでBLOBを参照できていたが、ResourceNotFoundエラーが返却されている。
https://qiitasample.blob.core.windows.net/private-container/dir1/hoge1.txt

image.png

URLにSASトークンを付与してやると、BLOBを参照することができた。

image.png

ネットワークトラフィックを制限する

[ストレージアカウント]-[セキュリティとネットワーク]-[ネットワーク]ブレード-[ファイアウォールと仮想ネットワーク]タブ

こちらより、特定のネットワークを介した通信に制限するよう設定することができる。
設定できるのは以下。

  • 特定の仮想ネットワーク/サブネット
  • 特定IPアドレス
    • 2023/07/06ではIPv4のみサポート
  • アクセス許可を持つシステム割り当てマネージド ID

プライベートエンドポイントを使用する

[ストレージアカウント]-[セキュリティとネットワーク]-[ネットワーク]ブレード-[プライベートエンドポイント接続]タブ

トラフィックを制限してプライベート向けに限定することで、リソースへのアクセス安全性を高めることができる。詳細は以下の公式ドキュメント参照。

プライベート エンドポイントを使用する - Azure Storage | Microsoft Learn

なお、サブリソースごとに個別のプライベートエンドポイントを作成する必要がある。

  • BLOB (blob、blob_secondary)
  • Table (table、table_secondary)
  • Queue (queue、queue_secondary)
  • File (file、file_secondary)
  • Web (web、web_secondary)
  • Dfs (dfs、dfs_secondary)

Refference

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1