説明
Azure Blob コンテナーで匿名読み取りを許可すると、認証していないクライアントもデータを読み取れるようになります。Ansible の public_access: blob は Blob の読み取りを許可し、public_access: container はそのコンテナー内の Blob 一覧の取得も許可します。どちらも匿名での書き込みを許可する設定ではありません。
実際にアクセスできるかどうかは、アカウントの匿名アクセス設定とネットワーク規則にも左右されます。公開配布するファイルと非公開データを分け、非公開データには匿名読み取りを許可しないでください。
想定される影響
- 非公開にすべき Blob が匿名で読み取れる場合、文書、ログ、アップロードされたファイルなどが漏えいするおそれがあります。公開配布を意図したファイルかどうかは別途判断する必要があります。
containerレベルでは、ファイル名や保存データの構成も知られる可能性があります。- 匿名読み取りに依存するアプリケーションは、アクセスを禁止すると動作しなくなる可能性があります。必要なクライアントの認証方法を先に準備してください。
対処方法
- 公開する必要があるデータとクライアントを確認し、公開配布用データと非公開データを分離してください。アカウント全体を保護する場合は、公開配布用データを別のアカウントに移す方法も検討してください。
- 既存のコンテナーは Azure のアクセスレベル変更機能で匿名アクセスを無効にし、適用結果を確認してください。
azure.azcollection3.21.0 でpublic_accessを省略するだけでは、既存のアクセスレベルを変更できません。新しい非公開コンテナーを作成する場合は、このオプションを省略してください。このモジュールの選択肢にprivateはありません。 - アカウントの Blob に匿名アクセスが一切必要ない場合は、
AllowBlobPublicAccessをfalseに設定してください。この制限は静的 Web サイトのエンドポイントには適用されないため、$webを使うサイトは別途確認してください。 - 必要な読み取り権限は、認証されたユーザーやアプリケーションに限定して付与し、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.azcollection3.21.0 では、このタスクで既存コンテナーのアクセスレベルは変わりません。 - 新規コンテナーの非公開アクセス: 新規作成するコンテナーでは、公開アクセスのオプションを省略することで既定の非公開アクセスを使います。すでに公開された
fooがある場合、このコードだけではアクセスレベルを変更できません。両例とも既存のストレージアカウント、実行権限、ローカルファイルを前提としています。content_typeを追加してもアクセス権限は制限されません。