コンテナーと BLOB 用の匿名読み取りアクセスを構成する
Azure Storage は、オプションでコンテナーと BLOB の匿名読み取りアクセスをサポートします。 既定では、データへの匿名アクセスは許可されません。 匿名アクセスを明示的に有効にしない限り、コンテナーとその BLOB へのすべての要求には承認が必要です。 コンテナーのアクセス レベル設定を構成して匿名アクセスを許可すると、クライアントは要求を承認することなくそのコンテナー内のデータを読み取ることができます。
警告
匿名アクセス用にコンテナーを構成すると、任意のクライアントがそのコンテナー内のデータを読み取ることができます。 匿名アクセスによりセキュリティ リスクの可能性が生まれるため、シナリオで必要な場合を除き、ストレージ アカウントに対する匿名アクセスを修正するようお勧めします。
この記事では、コンテナーとその BLOB への匿名読み取りアクセスを構成する方法について説明します。 最適なセキュリティのために匿名アクセスを修復する方法については、次のいずれかの記事を参照してください。
匿名読み取りアクセスについて
データへの匿名アクセスは既定で常に禁止されています。 匿名アクセスに影響を与える 2 つの個別の設定があります。
ストレージ アカウントの匿名アクセスの設定。 Azure Resource Manager ストレージ アカウントは、アカウントの匿名アクセスを許可または禁止する設定を提供します。 最適なセキュリティを確保するために、Microsoft はストレージ アカウントに対する匿名アクセスを禁止することをお勧めします。
アカウント レベルで匿名アクセスを許可すると、ユーザーがコンテナーの匿名アクセス設定を明示的に構成する追加の手順を実行しない限り、BLOB データは匿名読み取りアクセス用に使用できません。
コンテナーの匿名アクセスの設定。 既定では、コンテナーの匿名アクセス設定は無効になっています。つまり、コンテナーやそのデータへのすべての要求には承認が必要となります。 ストレージ アカウントの匿名アクセスを許可している場合のみ、適切なアクセス許可を持つユーザーはコンテナーの匿名アクセス設定を変更して、匿名アクセスを有効化できます。
次の表に、この 2 つの設定がコンテナーの匿名アクセスにどのように影響するのかまとめます。
コンテナーの匿名アクセス レベルがプライベートに設定されている (既定の設定) | コンテナーの匿名アクセス レベルがコンテナーに設定されている | コンテナーの匿名アクセス レベルが BLOB に設定されている | |
---|---|---|---|
ストレージ アカウントの匿名アクセスが禁止されている | ストレージ アカウントのどのコンテナーにも匿名アクセスできない。 | ストレージ アカウントのどのコンテナーにも匿名アクセスできない。 ストレージ アカウントの設定は、コンテナーの設定をオーバーライドする。 | ストレージ アカウントのどのコンテナーにも匿名アクセスできない。 ストレージ アカウントの設定は、コンテナーの設定をオーバーライドする。 |
ストレージ アカウントの匿名アクセスが許可されている | このコンテナーへの匿名アクセスはできない (既定の構成)。 | このコンテナーとその BLOB への匿名アクセスが許可される。 | このコンテナーの BLOB への匿名アクセスは許可されるが、コンテナーそのものに対しては許可されない。 |
匿名アクセスがストレージ アカウントで許可され、特定のコンテナーに対して構成されると、Authorization
ヘッダー "なし" で渡されたそのコンテナー内の BLOB を読み取る要求はサービスによって受け入れられ、その BLOB のデータが応答で返されます。 しかし、要求が Authorization
ヘッダー "有りで" 渡された場合、ストレージ アカウント上の匿名アクセスは無視され、要求は指定された資格情報に基づいて承認されます。
ストレージ アカウントの匿名読み取りアクセスを許可または禁止する
ストレージ アカウントの匿名アクセスを許可すると、適切なアクセス許可を持つユーザーはコンテナーの匿名アクセス設定を変更して、そのコンテナー内のデータへの匿名アクセスを有効化できます。 ユーザーが追加の手順を実施してコンテナーの匿名アクセス設定を明示的に構成しない限り、BLOB データへの匿名アクセスはできません。
コンテナーへの匿名アクセスは既定で常に無効化されているため、匿名の要求を許可するには明示的に構成する必要があることに注意してください。 ストレージ アカウントの設定に関わりなく、適切なアクセス許可を持つユーザーがこの追加手順によってコンテナー上で匿名アクセスを有効化しない限り、データへの匿名アクセスが可能になることはありません。
ストレージ アカウントの匿名アクセスを禁止すると、そのストレージ アカウント内のすべてのコンテナーのアクセス設定がオーバーライドされ、そのアカウント内の BLOB データへの匿名アクセスができなくなります。 匿名アクセスがアカウントで禁止されると、コンテナーのアクセス設定を構成して匿名アクセスを許可することは不可能になり、それ以降のそのアカウントへの匿名アクセスはすべて失敗します。 この設定を変更する前に、ストレージ アカウント内のデータに匿名でアクセスしている可能性があるクライアント アプリケーションへの影響を理解していることを確認してください。 詳細については、「コンテナーと BLOB への匿名読み取りアクセスを防止する」を参照してください。
重要
ストレージ アカウントの匿名アクセスが禁止されると、匿名ベアラー チャレンジを使用するクライアントには Azure Storage から 401 エラー (未承認) ではなく 403 エラー (禁止) が返されます。 この問題を軽減するために、すべてのコンテナーをプライベートにすることをお勧めします。 コンテナーの匿名アクセス設定の変更の詳細については、「コンテナーのアクセス レベルを設定する」を参照してください。
匿名アクセスを許可または禁止するには、Azure Storage リソース プロバイダーのバージョンが 2019-04-01 以降である必要があります。 詳細については、Azure Storage リソース プロバイダー REST API」 に関するページを参照してください。
匿名アクセスを禁止するためのアクセス許可
ストレージ アカウントの AllowBlobAnonymousAccess プロパティを設定するには、ストレージ アカウントを作成および管理するためのアクセス許可がユーザーに必要です。 これらのアクセス許可を提供する Azure ロールベースのアクセス制御 (Azure RBAC) ロールには、Microsoft.Storage/storageAccounts/write アクションが含まれています。 このアクションの組み込みロールには、次のようなロールがあります。
- Azure Resource Manager の所有者ロール
- Azure Resource Manager の共同作成者ロール
- Storage Account の共同作成者ロール
ユーザーがストレージ アカウントの匿名アクセスを禁止できるようにするには、ロールの割り当てのスコープをストレージ アカウント以上のレベルにする必要があります。 ロール スコープの詳細については、「Azure RBAC のスコープについて」を参照してください。
これらのロールを割り当てる際には、ストレージ アカウントを作成したり、そのプロパティを更新したりする機能を必要とする管理ユーザーにのみ割り当てるように、注意してください。 最小限の特権の原則を使用して、ユーザーに、それぞれのタスクを実行するのに必要な最小限のアクセス許可を割り当てるようにします。 Azure RBAC でアクセスを管理する方法の詳細については、「Azure RBAC のベスト プラクティス」を参照してください。
これらのロールでは、Microsoft Entra ID を使用してストレージ アカウントのデータにアクセスすることはできません。 ただし、アカウント アクセス キーへのアクセスを許可する Microsoft.Storage/storageAccounts/listkeys/action が含まれています。 このアクセス許可では、ユーザーがアカウント アクセス キーを使用して、ストレージ アカウント内のすべてのデータにアクセスできます。
Microsoft.Storage/storageAccounts/listkeys/action 自体では、アカウント キーを介してデータ アクセスが許可されますが、ストレージ アカウントの AllowBlobPublicAccess プロパティを変更する機能はユーザーに付与されません。 ストレージ アカウントのデータにアクセスする必要があるが、ストレージ アカウントの構成を変更できないようにする必要があるユーザーの場合は、ストレージ BLOB データ共同作成者、ストレージ BLOB データ閲覧者、閲覧者とデータ アクセスなどのロールを割り当てることを検討してください。
Note
従来のサブスクリプション管理者ロールであるサービス管理者と共同管理者には、Azure Resource Manager の所有者ロールと同等のものが含まれています。 所有者ロールにはすべてのアクションが含まれているため、これらの管理者ロールのいずれかを持つユーザーも、ストレージ アカウントを作成し、アカウント構成を管理することができます。 詳細については、「Azure ロール、Microsoft Entra ロール、従来のサブスクリプション管理者ロール」を参照してください。
ストレージ アカウントの AllowBlobPublicAccess プロパティを設定する
ストレージ アカウントの匿名アクセスを許可または禁止するには、アカウントの AllowBlobPublicAccess プロパティを設定します。 このプロパティは、Azure Resource Manager デプロイ モデルで作成されたすべてのストレージ アカウントで使用できます。 詳細については、「ストレージ アカウントの概要」を参照してください。
Azure portal でストレージ アカウントの匿名アクセスを許可または禁止するには、次の手順を実行します。
Azure Portal のストレージ アカウントに移動します。
[設定] から [構成] 設定を探します。
[BLOB の匿名アクセスを許可する] を [有効] または [無効] に設定します。
Note
ストレージ アカウントの匿名アクセスを禁止しても、そのストレージ アカウントでホストされている静的な Web サイトには影響しません。 $web コンテナーは常にパブリック アクセスが可能です。
ストレージ アカウントの匿名アクセス設定を更新した後、変更が完全に反映されるまでに最大で 30 秒かかることがあります。
コンテナーが匿名アクセス用に構成されている場合、そのコンテナー内の BLOB を読み取る要求を承認する必要はありません。 しかし、ストレージ アカウントに対して構成されているファイアウォール規則はすべて有効なままであり、構成された ACL を使用してトラフィックをインラインでブロックします。
匿名アクセスを許可または禁止するには、Azure Storage リソース プロバイダーのバージョンが 2019-04-01 以降である必要があります。 詳細については、Azure Storage リソース プロバイダー REST API」 に関するページを参照してください。
このセクションの例では、ストレージ アカウントの AllowBlobPublicAccess プロパティを読み取り、匿名アクセスが現在許可されているか禁止されているか確認する方法を示しました。 匿名アクセスができなくなるようにアカウントの匿名アクセス設定が構成されていることを確認する方法については、「ストレージ アカウントの匿名アクセスを修正する」を参照してください。
コンテナーの匿名アクセス レベルの設定
匿名ユーザーにコンテナーとその BLOB に対する読み取りアクセスを許可するには、まずストレージ アカウントの匿名アクセスを許可してから、コンテナーの匿名アクセス レベルを設定します。 匿名アクセスがストレージ アカウントで拒否されている場合、コンテナーの匿名アクセスを構成することはできません。
注意事項
Microsoft では、ストレージ アカウント内の BLOB データへの匿名アクセスを許可しないようお勧めします。
ストレージ アカウントの匿名アクセスが許可されている場合、次のアクセス許可を使用してコンテナーを構成できます。
- パブリック読み取りアクセスなし: コンテナーとその BLOB には、承認された要求を使用しなければアクセスできません。 このオプションは、すべての新しいコンテナーの既定値です。
- BLOB に限定したパブリック読み取りアクセス: コンテナー内の BLOB は匿名要求で読み取ることができますが、コンテナー データは匿名では利用できません。 匿名クライアントはコンテナー内の BLOB を列挙することはできません。
- コンテナーとその BLOB に対するパブリック読み取りアクセス: コンテナーと BLOB のデータは、コンテナーのアクセス許可設定とコンテナーのメタデータを除いて、匿名要求によって読み取ることができます。 クライアントは匿名要求でコンテナー内の BLOB を列挙できますが、ストレージ アカウント内のコンテナーを列挙することはできません。
個々の BLOB の匿名アクセス レベルを変更することはできません。 匿名アクセス レベルはコンテナー レベルでのみ設定されます。 コンテナーの作成時にコンテナーの匿名アクセス レベルを設定することもできれば、既存のコンテナーで設定を更新することもできます。
Azure portal で 1 つ以上の既存のコンテナーの匿名アクセス レベルを更新するには、次の手順を実行します。
Azure portal でご利用のストレージ アカウントの概要に移動します。
メニュー ブレードの [データ ストレージ] で [コンテナー] を選択します。
匿名アクセス レベルを設定するコンテナーを選択します。
[アクセス レベルの変更] ボタンを使用して、匿名アクセス設定を表示します。
[匿名アクセス レベル] ドロップダウンから目的の匿名アクセス レベルを選択し、[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 機能のサポート」 を参照して、この機能のサポートを評価してください。