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

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

警告

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

この記事では、コンテナーとその BLOB の匿名パブリック読み取りアクセスを構成する方法について説明します。 最適なセキュリティのために匿名アクセスを修復する方法については、次のいずれかの記事を参照してください。

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

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

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

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

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

ストレージ アカウントで匿名パブリック アクセスが許可され、特定のコンテナーに対して構成されている場合、そのコンテナー内で Authorization ヘッダーなしで渡された BLOB を読み取る要求は、サービスに受け取られ、その BLOB のデータが応答で返されます。

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

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

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

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

重要

ストレージ アカウントに対して匿名パブリック アクセスが禁止されると、匿名ベアラー チャレンジを使用するクライアントには、Azure Storage から 401 エラー (未承認) ではなく 403 エラー (禁止) が返されます。 この問題を軽減するために、すべてのコンテナーをプライベートにすることをお勧めします。 コンテナーのパブリック アクセス設定の変更の詳細については、「コンテナーのパブリック アクセス レベルを設定する」を参照してください。

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

パブリック アクセスを禁止するためのアクセス許可

ストレージ アカウントの AllowBlobPublicAccess プロパティを設定するには、ストレージ アカウントを作成および管理するためのアクセス許可が必要です。 これらのアクセス許可を提供する Azure ロールベースのアクセス制御 (Azure RBAC) ロールには、Microsoft.Storage/storageAccounts/write アクションが含まれています。 このアクションの組み込みロールには、次のようなロールがあります。

ユーザーがストレージ アカウントに対するパブリック アクセスを禁止できるようにするには、ロールの割り当てのスコープをストレージ アカウント以上のレベルにする必要があります。 ロール スコープの詳細については、「Azure RBAC のスコープについて」を参照してください。

これらのロールを割り当てる際には、ストレージ アカウントを作成したり、そのプロパティを更新したりする機能を必要とする管理ユーザーにのみ割り当てるように、注意してください。 最小限の特権の原則を使用して、ユーザーに、それぞれのタスクを実行するのに必要な最小限のアクセス許可を割り当てるようにします。 Azure RBAC でアクセスを管理する方法の詳細については、「Azure RBAC のベスト プラクティス」を参照してください。

これらのロールでは、Azure Active Directory (Azure AD) を使用してストレージ アカウントのデータにアクセスすることはできません。 ただし、アカウント アクセス キーへのアクセスを許可する Microsoft.Storage/storageAccounts/listkeys/action が含まれています。 このアクセス許可では、ユーザーがアカウント アクセス キーを使用して、ストレージ アカウント内のすべてのデータにアクセスできます。

Microsoft.Storage/storageAccounts/listkeys/action 自体は、アカウント キーを使用してデータ アクセスを許可しますが、ストレージ アカウントの AllowBlobPublicAccess プロパティを変更する機能はユーザーに付与されません。 ストレージ アカウント内のデータにアクセスする必要があるが、ストレージ アカウントの構成を変更できないようにする必要があるユーザーの場合は、ストレージ BLOB データ共同作成者ストレージ BLOB データ閲覧者閲覧者とデータ アクセスなどのロールを割り当てることを検討してください。

Note

従来のサブスクリプション管理者ロールであるサービス管理者と共同管理者には、Azure Resource Manager の所有者ロールと同等のものが含まれています。 所有者ロールにはすべてのアクションが含まれているため、これらの管理者ロールのいずれかを持つユーザーも、ストレージ アカウントを作成し、アカウント構成を管理することができます。 詳細については、従来のサブスクリプション管理者ロール、Azure ロール、および Azure AD 管理者ロールに関する記事を参照してください。

ストレージ アカウントの AllowBlobPublicAccess プロパティを設定する

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

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

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

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

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

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

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

注意

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

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

匿名パブリック アクセス用にコンテナーが構成されている場合、そのコンテナー内の BLOB を読み取る要求を認可する必要はありません。 ただし、ストレージ アカウントに対して構成されているファイアウォール規則は引き続き有効であり、構成された ACL を使用してトラフィックをインラインでブロックします。

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

機能サポート

Data Lake Storage Gen2、Network File System (NFS) 3.0 プロトコル、または SSH ファイル転送プロトコル (SFTP) を有効にすると、この機能のサポートが影響を受ける場合があります。

これらの機能のいずれかを有効にしている場合は、「Azure Storage アカウントでの Blob Storage 機能のサポート」 を参照して、この機能のサポートを評価してください。

次のステップ