コンテナーと BLOB の匿名パブリック読み取りアクセスを構成する

Azure Storage では、コンテナーと BLOB へのオプションの匿名パブリック読み取りアクセスがサポートされています。 既定では、データへの匿名アクセスは許可されません。 匿名アクセスを明示的に有効にしない限り、コンテナーとその BLOB へのすべての要求には承認が必要です。 匿名アクセスを許可するようにコンテナーのパブリック アクセス レベル設定を構成すると、クライアントは要求の承認なしでそのコンテナー内のデータを読み取ることができます。

警告

コンテナーがパブリック アクセス用に構成されている場合、任意のクライアントがそのコンテナー内のデータを読み取ることができます。 パブリック アクセスは潜在的なセキュリティ リスクをもたらすため、Microsoft では、シナリオで必要な場合を除き、ストレージ アカウントに対してこれを禁止するようお勧めします。 詳細については、「コンテナーと BLOB への匿名パブリック読み取りアクセスを防ぐ」を参照してください。

この記事では、コンテナーとその BLOB の匿名パブリック読み取りアクセスを構成する方法について説明します。 クライアント アプリケーションから匿名で BLOB データにアクセスする方法については、「.NET を使用してパブリックのコンテナーと BLOB に匿名でアクセスする」を参照してください。

匿名のパブリック読み取りアクセスについて

データへのパブリック アクセスは、既定では常に禁止されています。 パブリック アクセスに影響を与える 2 つの別個の設定があります。

  1. ストレージ アカウントのパブリック アクセスを許可する。 既定では、ストレージ アカウントにおいて、適切なアクセス許可を持つユーザーは、コンテナーへのパブリック アクセスを有効にすることが許可されます。 そのユーザーが追加の手順によってコンテナーのパブリック アクセスの設定を明示的に構成しない限り、BLOB データへのパブリック アクセスは利用できません。
  2. コンテナーのパブリック アクセス設定を構成する。 既定では、コンテナーのパブリック アクセスの設定は無効になっています。つまり、コンテナーまたはそのデータへのすべての要求には承認が必要となります。 ストレージ アカウントの匿名アクセスが許可されている場合のみ、適切なアクセス許可を持つユーザーは、コンテナーのパブリック アクセスの設定を変更して、匿名アクセスを有効にできます。

次の表に、これらの両方の設定がコンテナーのパブリック アクセスにどのように影響を与えるかをまとめます。

コンテナーのパブリック アクセス レベルが、プライベートに設定されている (既定の設定) コンテナーのパブリック アクセス レベルが、コンテナーに設定されている コンテナーのパブリック アクセス レベルが、BLOB に設定されている
ストレージ アカウントのパブリック アクセスが禁止されている ストレージ アカウントのどのコンテナーにもパブリック アクセスはない。 ストレージ アカウントのどのコンテナーにもパブリック アクセスはない。 ストレージ アカウントの設定は、コンテナーの設定をオーバーライドする。 ストレージ アカウントのどのコンテナーにもパブリック アクセスはない。 ストレージ アカウントの設定は、コンテナーの設定をオーバーライドする。
ストレージ アカウントのパブリック アクセスが許可されている (既定の設定) このコンテナーへのパブリック アクセスはない (既定の構成)。 このコンテナーとその BLOB へのパブリック アクセスが許可される。 このコンテナーの BLOB へのパブリック アクセスは許可されるが、コンテナーそのものに対しては許可されない。

ストレージ アカウントのパブリック読み取りアクセスを許可または禁止する

既定では、ストレージ アカウントの構成において、適切なアクセス許可を持つユーザーは、コンテナーへのパブリック アクセスを有効にすることが許可されます。 パブリック アクセスが許可されている場合、適切なアクセス許可を持つユーザーは、コンテナーのパブリック アクセスの設定を変更して、そのコンテナーのデータへの匿名のパブリック アクセスを有効にできます。 そのユーザーが追加の手順によってコンテナーのパブリック アクセスの設定を明示的に構成しない限り、BLOB データへのパブリック アクセスは利用できません。

コンテナーへのパブリック アクセスは既定で常に無効になっており、匿名の要求を許可するには明示的に構成する必要があることにご注意ください。 ストレージ アカウントの設定に関わりなく、適切なアクセス許可を持つユーザーがこの追加手順によってコンテナー上でパブリック アクセスを有効にしない限り、データへのパブリック アクセスが可能になることはありません。

ストレージ アカウントのパブリック アクセスを禁止すると、そのアカウントのすべてのコンテナーと BLOB への匿名アクセスが妨げられます。 アカウントのパブリック アクセスが禁止されると、コンテナーのパブリック アクセスの設定を構成して、匿名アクセスを許可することはできなくなります。 Microsoft では、ユーザーが匿名で BLOB リソースにアクセスすることが必要なシナリオを除き、セキュリティを向上させるため、ストレージ アカウントのパブリック アクセスは禁止することをお勧めします。

重要

ストレージ アカウントでパブリック アクセスを禁止すると、そのストレージ アカウント内のすべてのコンテナーのパブリック アクセス設定がオーバーライドされます。 ストレージ アカウントでパブリック アクセスを禁止すると、以後、そのアカウントに対する匿名要求は失敗します。 この設定を変更する前に、ストレージ アカウントのデータに匿名でアクセスしている可能性があるクライアント アプリケーションへの影響を理解しておいてください。 詳細については、「コンテナーと BLOB への匿名パブリック読み取りアクセスを防ぐ」を参照してください。

ストレージ アカウントのパブリック アクセスを許可または禁止するには、アカウントの AllowBlobPublicAccess プロパティを構成します。 このプロパティは、Azure Resource Manager デプロイ モデルで作成されたすべてのストレージ アカウントで使用できます。 詳細については、「ストレージ アカウントの概要」を参照してください。

既定では、ストレージ アカウントに AllowBlobPublicAccess プロパティは設定されておらず、明示的に設定されるまで値を返しません。 プロパティ値が nulltrue の場合、ストレージ アカウントによってパブリック アクセスが許可されます。

Azure portal でストレージ アカウントのパブリック アクセスを許可または禁止するには、次の手順を実行します。

  1. Azure Portal のストレージ アカウントに移動します。

  2. [設定] から [構成] 設定を探します。

  3. [Blob public access](BLOB パブリック アクセス)[有効] または [無効] に設定します。

    アカウントの BLOB パブリック アクセスを許可または禁止する方法を示すスクリーンショット

注意

ストレージ アカウントのパブリック アクセスを禁止しても、そのストレージ アカウントでホストされている静的な Web サイトには影響しません。 $web コンテナーは常にパブリック アクセスが可能です。

ストレージ アカウントのパブリック アクセス設定を更新した後、変更が完全に反映されるまでに最大で 30 秒かかることがあります。

BLOB パブリック アクセスを許可または禁止するには、Azure Storage リソース プロバイダーのバージョンが 2019-04-01 以降である必要があります。 詳細については、「Azure Storage Resource Provider REST API」 (Azure ストレージ リソース プロバイダー REST API) をご覧ください。

このセクションの例では、ストレージ アカウントの AllowBlobPublicAccess プロパティを読み取り、パブリック アクセスが現在許可されているのか、禁止されているかを確認する方法を示しました。 匿名アクセスが禁止されるようにアカウントのパブリック アクセス設定が構成されていることを確認する方法の詳細については、「匿名パブリック アクセスの修正」を参照してください。

コンテナーのパブリック アクセス レベルの設定

匿名ユーザーにコンテナーとその BLOB に対する読み取りアクセスを許可するには、まずストレージ アカウントのパブリック アクセスを許可してから、コンテナーのパブリック アクセス レベルを設定します。 ストレージ アカウントのパブリック アクセスが拒否されている場合、コンテナーのパブリック アクセスを構成することはできません。

ストレージ アカウントのパブリック アクセスが許可されている場合、次のアクセス許可を使用してコンテナーを構成できます。

  • パブリック読み取りアクセスなし: コンテナーとその BLOB には、承認された要求を使用しなければアクセスできません。 このオプションは、すべての新しいコンテナーの既定値です。
  • BLOB に限定したパブリック読み取りアクセス: コンテナー内の BLOB は匿名要求で読み取り可能ですが、コンテナー データは匿名では使用できません。 匿名クライアントはコンテナー内の BLOB を列挙することはできません。
  • コンテナーとその BLOB に対するパブリック読み取りアクセス: コンテナーと BLOB のデータは、コンテナーのアクセス許可設定とコンテナーのメタデータを除いて、匿名要求によって読み取ることができます。 クライアントは匿名要求でコンテナー内の BLOB を列挙できますが、ストレージ アカウント内のコンテナーを列挙することはできません。

個々の BLOB のパブリック アクセス レベルを変更することはできません。 パブリック アクセス レベルは、コンテナー レベルでのみ設定されます。 コンテナーの作成時にコンテナーのパブリック アクセス レベルを設定することも、既存のコンテナーで設定を更新することもできます。

Azure portal で 1 つ以上の既存のコンテナーのパブリック アクセス レベルを更新するには、次の手順を実行します。

  1. Azure portal でご利用のストレージ アカウントの概要に移動します。

  2. メニュー ブレードの [データ ストレージ] で、 [BLOB コンテナー] を選択します。

  3. パブリック アクセス レベルを設定するコンテナーを選択します。

  4. [アクセス レベルの変更] ボタンを使用して、パブリック アクセスの設定を表示します。

  5. [パブリック アクセス レベル] ドロップダウンから目的のパブリック アクセス レベルを選択し、[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

機能サポート

次の表は、アカウントでのこの機能のサポートと、特定の機能を有効にした場合のサポートへの影響を示しています。

ストレージ アカウントの種類 Blob Storage (既定のサポート) Data Lake Storage Gen2 1 NFS 3.0 1 SFTP 1
Standard 汎用 v2 はい はい はい はい
Premium ブロック BLOB はい はい はい はい

1 Data Lake Storage Gen2、ネットワーク ファイル システム (NFS) 3.0 プロトコル、セキュア ファイル転送プロトコル (SFTP) のサポートでは、すべて階層型名前空間が有効になっているストレージ アカウントが必要です。

次のステップ