匿名読み取りを許可する Azure Blob コンテナー

Azure Blob コンテナーの匿名読み取りは、非公開ファイルの漏えいにつながるおそれがあります。コンテナーとアカウントの設定を確認し、必要なクライアントだけに読み取りを許可してください。

説明

Azure Blob コンテナーで匿名読み取りを許可すると、認証していないクライアントもデータを読み取れるようになります。Ansible の public_access: blob は Blob の読み取りを許可し、public_access: container はそのコンテナー内の Blob 一覧の取得も許可します。どちらも匿名での書き込みを許可する設定ではありません。

実際にアクセスできるかどうかは、アカウントの匿名アクセス設定とネットワーク規則にも左右されます。公開配布するファイルと非公開データを分け、非公開データには匿名読み取りを許可しないでください。

想定される影響

  • 非公開にすべき Blob が匿名で読み取れる場合、文書、ログ、アップロードされたファイルなどが漏えいするおそれがあります。公開配布を意図したファイルかどうかは別途判断する必要があります。
  • container レベルでは、ファイル名や保存データの構成も知られる可能性があります。
  • 匿名読み取りに依存するアプリケーションは、アクセスを禁止すると動作しなくなる可能性があります。必要なクライアントの認証方法を先に準備してください。

対処方法

  1. 公開する必要があるデータとクライアントを確認し、公開配布用データと非公開データを分離してください。アカウント全体を保護する場合は、公開配布用データを別のアカウントに移す方法も検討してください。
  2. 既存のコンテナーは Azure のアクセスレベル変更機能で匿名アクセスを無効にし、適用結果を確認してください。azure.azcollection 3.21.0 で public_access を省略するだけでは、既存のアクセスレベルを変更できません。新しい非公開コンテナーを作成する場合は、このオプションを省略してください。このモジュールの選択肢に private はありません。
  3. アカウントの Blob に匿名アクセスが一切必要ない場合は、AllowBlobPublicAccess を false に設定してください。この制限は静的 Web サイトのエンドポイントには適用されないため、$web を使うサイトは別途確認してください。
  4. 必要な読み取り権限は、認証されたユーザーやアプリケーションに限定して付与し、SAS を使う場合は対象範囲と有効期限を確認してください。変更後はネットワーク制限も考慮し、匿名要求が拒否され、必要な認証済みクライアントは引き続き利用できることを検証してください。

例

匿名読み取りの許可

yaml
- name: Create container and upload a file
  azure_rm_storageblob:
    resource_group: myResourceGroup
    storage_account_name: clh0002
    container: foo
    blob: graylog.png
    src: ./files/graylog.png
    public_access: blob

新規コンテナーの非公開アクセス

yaml
- name: Create container and upload a file
  azure_rm_storageblob:
    resource_group: myResourceGroup
    storage_account_name: clh0002
    container: foo
    blob: graylog.png
    src: ./files/graylog.png
    content_type: application/image

説明:

  • 匿名読み取りの許可: 新しいコンテナーの作成に成功し、アカウント設定とネットワーク設定が許可していれば、public_access: blob により Blob を匿名で読み取れるようになります。azure.azcollection 3.21.0 では、このタスクで既存コンテナーのアクセスレベルは変わりません。
  • 新規コンテナーの非公開アクセス: 新規作成するコンテナーでは、公開アクセスのオプションを省略することで既定の非公開アクセスを使います。すでに公開された foo がある場合、このコードだけではアクセスレベルを変更できません。両例とも既存のストレージアカウント、実行権限、ローカルファイルを前提としています。content_type を追加してもアクセス権限は制限されません。

参考資料