Azure Storage は、オプションでコンテナーと BLOB の匿名読み取りアクセスをサポートします。 既定では、データへの匿名アクセスは許可されません。 匿名アクセスを明示的に有効にしない限り、コンテナーとその BLOB へのすべての要求には承認が必要です。 コンテナーのアクセス レベル設定を構成して匿名アクセスを許可すると、クライアントは要求を承認することなくそのコンテナー内のデータを読み取ることができます。
警告
匿名アクセス用にコンテナーを構成すると、任意のクライアントがそのコンテナー内のデータを読み取ることができます。 匿名アクセスは潜在的なセキュリティリスクを伴うため、状況で必要ない場合はストレージアカウントの匿名アクセスを修正してください。
この記事では、コンテナーとその BLOB への匿名読み取りアクセスを構成する方法について説明します。 最適なセキュリティのために匿名アクセスを修復する方法については、「 ブロブデータの匿名読み取りアクセスの修復」をご覧ください。
匿名アクセスによる閲覧について
データへの匿名アクセスは既定で常に禁止されています。 匿名アクセスに影響を与える設定は2つあります:
ストレージ アカウントの匿名アクセスの設定。 Azure Resource Manager ストレージ アカウントは、アカウントの匿名アクセスを許可または禁止する設定を提供します。 最適なセキュリティを確保するために、Microsoft はストレージ アカウントに対する匿名アクセスを禁止することをお勧めします。
アカウント レベルで匿名アクセスを許可すると、ユーザーがコンテナーの匿名アクセス設定を明示的に構成する追加の手順を実行しない限り、BLOB データは匿名読み取りアクセス用に使用できません。
コンテナーの匿名アクセスの設定。 既定では、コンテナーの匿名アクセス設定は無効になっています。つまり、コンテナーやそのデータへのすべての要求には承認が必要となります。 ストレージ アカウントの匿名アクセスを許可している場合のみ、適切なアクセス許可を持つユーザーはコンテナーの匿名アクセス設定を変更して、匿名アクセスを有効化できます。
次の表に、この 2 つの設定がコンテナーの匿名アクセスにどのように影響するのかまとめます。
| コンテナーの匿名アクセス レベルがプライベートに設定されている (既定の設定) | コンテナーの匿名アクセス レベルがコンテナーに設定されている | コンテナーの匿名アクセス レベルが BLOB に設定されている | |
|---|---|---|---|
| ストレージ アカウントの匿名アクセスが禁止されている | ストレージ アカウントのどのコンテナーにも匿名アクセスできない。 | ストレージ アカウントのどのコンテナーにも匿名アクセスできない。 ストレージ アカウントの設定は、コンテナーの設定をオーバーライドする。 | ストレージ アカウントのどのコンテナーにも匿名アクセスできない。 ストレージ アカウントの設定は、コンテナーの設定をオーバーライドする。 |
| ストレージ アカウントの匿名アクセスが許可されている | このコンテナーへの匿名アクセスはできない (既定の構成)。 | このコンテナーとその BLOB への匿名アクセスが許可される。 | このコンテナーの BLOB への匿名アクセスは許可されるが、コンテナーそのものに対しては許可されない。 |
ストレージアカウントで匿名アクセスが許可され、特定のコンテナに設定されている場合、サービスはAuthorizationヘッダーなしでそのコンテナ内のブロブを読み取るリクエストを受け入れ、そのブロックのデータを返します。 しかし、リクエストがAuthorizationヘッダーで渡されると、サービスはストレージアカウントへの匿名アクセスを無視し、提供された認証情報に基づいてリクエストを承認します。
ストレージ アカウントの匿名読み取りアクセスを許可または禁止する
ストレージアカウントに匿名アクセスを許可すると、適切な権限を持つユーザーはコンテナの匿名アクセス設定を変更し、そのコンテナ内のデータへの匿名アクセスを可能にします。 Blobデータは、ユーザーがコンテナの匿名アクセス設定を明示的に設定しない限り、匿名アクセスには決して利用できません。
コンテナへの匿名アクセスは常にデフォルトでオフにされており、匿名リクエストを許可するように明示的に設定する必要があります。 ストレージアカウントの設定に関わらず、適切な権限を持つユーザーがコンテナ上で匿名アクセスを有効にするために追加のステップを踏まない限り、あなたのデータは匿名アクセスには決して利用できません。
ストレージ アカウントの匿名アクセスを禁止すると、そのストレージ アカウント内のすべてのコンテナーのアクセス設定がオーバーライドされ、そのアカウント内の BLOB データへの匿名アクセスができなくなります。 アカウントの匿名アクセスを禁止すると、コンテナのアクセス設定を匿名アクセスを許可できず、今後そのアカウントへの匿名リクエストは失敗します。 この設定を変更する前に、匿名でストレージアカウントのデータにアクセスしているクライアントアプリケーションへの影響を理解してください。 詳細については、「コンテナーと BLOB への匿名読み取りアクセスを防止する」を参照してください。
重要
ストレージアカウントの匿名アクセスを禁止すると、匿名ベアラーチャレンジを利用したクライアントは、Azure Storageが401エラー(不正)ではなく403エラー(禁止)を返すことに気づきます。 この問題を軽減するために、すべてのコンテナをプライベートにしてください。 コンテナーの匿名アクセス設定の変更の詳細については、「コンテナーのアクセス レベルを設定する」を参照してください。
匿名アクセスを許可または禁止するには、Azure Storage リソース プロバイダーのバージョンが 2019-04-01 以降である必要があります。 詳細については、Azure Storage リソース プロバイダー REST API」 に関するページを参照してください。
匿名アクセスを禁止するためのアクセス許可
ストレージアカウントの AllowBlobPublicAccess プロパティを設定するには、ストレージアカウントの作成と管理のための権限が必要です。 これらのアクセス許可を提供する Azure ロールベースのアクセス制御 (Azure RBAC) ロールには、Microsoft.Storage/storageAccounts/write アクションが含まれています。 このアクションの組み込みロールには、次のようなロールがあります。
- Azure Resource Manager の所有者ロール
- Azure Resource Manager の共同作成者ロール
- ストレージ アカウント共同作成者 ロール
ユーザーがストレージ アカウントの匿名アクセスを禁止できるようにするには、ロールの割り当てのスコープをストレージ アカウント以上のレベルにする必要があります。 ロール スコープの詳細については、「Azure RBAC のスコープについて」を参照してください。
これらの役割の割り当ては、ストレージアカウントの作成やプロパティの更新が必要な管理者ユーザーのみに限定してください。 最小権限の原則を用いて、ユーザーがタスクを完了するために必要な権限を最小限に抑えるようにしましょう。 Azure RBAC でアクセスを管理する方法の詳細については、「Azure RBAC のベスト プラクティス」を参照してください。
これらのロールでは、Microsoft Entra ID を使用してストレージ アカウントのデータにアクセスすることはできません。 ただし、アカウント アクセス キーへのアクセスを許可する Microsoft.Storage/storageAccounts/listkeys/action が含まれています。 この権限を使うことで、ユーザーはアカウントアクセスキーを使ってストレージアカウント内のすべてのデータにアクセスできます。
Microsoft。Storage/storageAccounts/listkeys/action自体はアカウントキーを通じてデータアクセスを許可しますが、ユーザーがストレージアカウントのAllowBlobPublicAccessプロパティを変更する権限は与えません。 ストレージ アカウントのデータにアクセスする必要があるが、ストレージ アカウントの構成を変更できないようにする必要があるユーザーの場合は、ストレージ BLOB データ共同作成者、ストレージ BLOB データ閲覧者、閲覧者とデータ アクセスなどのロールを割り当てることを検討してください。
注
従来のサブスクリプション管理者ロールであるサービス管理者と共同管理者には、Azure Resource Manager の所有者ロールと同等のものが含まれています。 所有者ロールにはすべてのアクションが含まれているため、これらの管理者ロールのいずれかを持つユーザーも、ストレージ アカウントを作成し、アカウント構成を管理することができます。 詳細については、「Azure ロール、Microsoft Entra ロール、従来のサブスクリプション管理者ロール」を参照してください。
ストレージ アカウントの AllowBlobPublicAccess プロパティを設定する
ストレージ アカウントの匿名アクセスを許可または禁止するには、アカウントの AllowBlobPublicAccess プロパティを設定します。 このプロパティは、Azure Resource Managerのデプロイメントモデルで作成したすべてのストレージアカウントで利用可能です。 詳細については、「ストレージ アカウントの概要」を参照してください。
Azure portal でストレージ アカウントの匿名アクセスを許可または禁止するには、次の手順を実行します。
Azure portal で、ストレージ アカウントに移動します。
Settings の下にある Configuration 設定を見つけてください。
[BLOB の匿名アクセスを許可する] を [有効] または [無効] に設定します。
注
ストレージアカウントの匿名アクセスを許可しないと、そのストレージアカウントでホストされている静的なウェブサイトには影響しません。 $web コンテナーは常にパブリック アクセスが可能です。
ストレージアカウントの匿名アクセス設定を更新した後、変更が完全に伝播するまでに最大30秒かかることがあります。
コンテナーが匿名アクセス用に構成されている場合、そのコンテナー内の BLOB を読み取る要求を承認する必要はありません。 ただし、ストレージアカウントで設定したファイアウォールルールは引き続き有効で、設定されたACLに沿ったトラフィックをブロックします。
以下の例は、ストレージアカウントの AllowBlobPublicAccess プロパティを読み、匿名アクセスが現在許可されているか否かを判断する方法を示しています。 匿名アクセスができなくなるようにアカウントの匿名アクセス設定が構成されていることを確認する方法については、「ストレージ アカウントの匿名アクセスを修正する」を参照してください。
コンテナーの匿名アクセス レベルの設定
匿名ユーザーにコンテナーとその BLOB に対する読み取りアクセスを許可するには、まずストレージ アカウントの匿名アクセスを許可してから、コンテナーの匿名アクセス レベルを設定します。 始める前に、アカウントレベルで匿名アクセスが許可されているか( AllowBlobPublicAccess プロパティを通じて)か、コンテナに書き込み権限があるか確認してください。 ストレージアカウントで匿名アクセスが拒否された場合、コンテナの匿名アクセス設定ができません。
注意事項
Microsoft では、ストレージ アカウント内の BLOB データへの匿名アクセスを許可しないようお勧めします。
ストレージアカウントに匿名アクセスを許可すると、以下の権限でコンテナを設定できます:
- 公開閲覧不可 (ポータル: プライベート;PowerShell: オフ):コンテナとそのブロブには、認可されたリクエストがなければアクセスできません。 このオプションは、すべての新しいコンテナーの既定値です。
- ブロブのみの公開読み取り アクセス(ポータルおよびPowerShell: Blob):コンテナ内のブロブは匿名リクエストで読み取れますが、コンテナデータは匿名で利用できません。 匿名クライアントはコンテナー内の BLOB を列挙することはできません。
- コンテナおよびそのブロブの公開読み取りアクセス (ポータルおよびPowerShell: Container):コンテナおよびブロブデータは匿名リクエストで読み取れますが、コンテナ権限設定やコンテナメタデータは例外です。 クライアントは匿名リクエストでコンテナ内のブロブを列挙できますが、ストレージアカウント内でコンテナを列挙することはできません。
個々の BLOB の匿名アクセス レベルを変更することはできません。 匿名アクセスレベルはコンテナレベルのみに設定してください。 コンテナーの作成時にコンテナーの匿名アクセス レベルを設定することもできれば、既存のコンテナーで設定を更新することもできます。
Azure portal で 1 つ以上の既存のコンテナーの匿名アクセス レベルを更新するには、次の手順を実行します。
Azureポータルのストレージアカウント概要に行ってください。
メニュー ブレードの [データ ストレージ] で [コンテナー] を選択します。
匿名アクセス レベルを設定するコンテナーを選択します。
匿名アクセス設定を開くには「 アクセスレベルを変更する 」を選択してください。
匿名アクセス レベルの ドロップダウンから希望する匿名アクセスレベルを選択し、 OK を選択して選択したコンテナに変更を適用します。
変更を確認するには、アクセス レベルの変更 を再度開き、匿名アクセス レベル に選択した値が表示されていることを確認してください。
ストレージアカウントで匿名アクセスが禁止されると、コンテナの匿名アクセスレベルを設定できません。 コンテナーの匿名アクセス レベルを設定しようとすると、匿名アクセスがアカウントで禁止されているため、設定が無効化されます。
複数のコンテナーの匿名アクセス設定の確認
1つ以上のストレージアカウントで匿名アクセスに設定されているコンテナをリストアップし、匿名アクセス設定を確認することができます。 このアプローチは、ストレージ アカウントに多数のコンテナーが含まれていない場合や、少数のストレージ アカウントにまたがって設定を確認する場合に実用的な選択肢です。 しかし、多数のコンテナを列挙しようとするとパフォーマンスが低下する可能性があります。
次の例では、PowerShell を使用して、ストレージ アカウントのすべてのコンテナーの匿名アクセス設定を取得します。 かっこ内のプレースホルダー値を独自の値に置き換えることを忘れないでください。
$rgName = "<resource-group>"
$accountName = "<storage-account>"
$storageAccount = Get-AzStorageAccount -ResourceGroupName $rgName -Name $accountName
$ctx = $storageAccount.Context
Get-AzStorageContainer -Context $ctx | Select Name, PublicAccess
機能サポート
Data Lake Storage Gen2、Network File System (NFS) 3.0 プロトコル、または SSH ファイル転送プロトコル (SFTP) を有効にすると、この機能のサポートが影響を受ける場合があります。 これらの機能のいずれかを有効にしている場合は、「Azure Storage アカウントでの Blob Storage 機能のサポート」 を参照して、この機能のサポートを評価してください。