Azure Storage アカウントの プライベート エンドポイント を使用して、Azure Virtual Network 上のクライアントが Private Link 経由でデータに安全にアクセスできるようにします。 プライベート エンドポイントは、ストレージ アカウント サービスごとに仮想ネットワーク アドレス空間とは別の IP アドレスを使用します。 仮想ネットワーク上のクライアントとストレージ アカウント間のネットワーク トラフィックは、仮想ネットワークと Microsoft バックボーン ネットワーク上のプライベート リンクを経由し、パブリック インターネットからの露出を排除します。
注
プライベート エンドポイントは、汎用 v1 ストレージ アカウントでは使用できません。
ストレージ アカウントにプライベート エンドポイントを使用すると、次のことが可能になります。
- プライベート リンクを使用してストレージ アカウントをセキュリティで保護します。 ストレージ サービスのパブリック エンドポイントでの接続をブロックするように、ストレージ ファイアウォールを手動で構成できます。 プライベート リンクを作成しても、パブリック エンドポイントでの接続は自動的にはブロックされません。
- 仮想ネットワークからのデータの流出をブロックできるようにすることで、仮想ネットワークのセキュリティを強化する。
- VPN または ExpressRoute とプライベート ピアリングを使用して仮想ネットワークに接続するオンプレミス ネットワークからストレージ アカウントに安全に接続します。
概念の概要
プライベート エンドポイントは、仮想ネットワーク内の Azure サービス用の特別な ネットワーク インターフェイスです。 ストレージ アカウントのプライベート エンドポイントを作成すると、仮想ネットワーク上のクライアントとストレージ間のセキュリティで保護された接続が提供されます。 プライベート エンドポイントには、仮想ネットワークの IP アドレス範囲から IP アドレスが割り当てられます。 プライベート エンドポイントとストレージ サービス間の接続には、セキュリティで保護されたプライベート リンクが使用されます。
仮想ネットワーク内のアプリケーションは、それ 以外の場合と同じ接続文字列と承認メカニズムを使用して、プライベート エンドポイント経由でストレージ サービスにシームレスに接続できます。 プライベート エンドポイントは、ストレージ アカウントでサポートされているすべてのプロトコル (REST や SMB を含む) で使用できます。
プライベート エンドポイントは、サービス エンドポイントを使用するサブネットに作成できます。 そのため、サブネット内のクライアントは、プライベート エンドポイントを使用して 1 つのストレージ アカウントに接続し、サービス エンドポイントを使用して他のユーザーにアクセスできます。
仮想ネットワーク内のストレージ サービスのプライベート エンドポイントを作成すると、同意要求がストレージ アカウント所有者に承認のために送信されます。 プライベート エンドポイントの作成を要求しているユーザーがストレージ アカウントの所有者でもある場合、この同意要求は自動的に承認されます。
ストレージ アカウントの所有者は、Azure portal でストレージ アカウントの [プライベート エンドポイント] タブを使用して、同意要求とプライベート エンドポイントを管理できます。
ヒント
ストレージ アカウントへのアクセスを、プライベート エンドポイント経由のみに制限する場合は、パブリック エンドポイント経由のアクセスを拒否または制御するようにストレージ ファイアウォールを構成します。
ストレージ ファイアウォールを構成 して既定でパブリック エンドポイント経由のアクセスを拒否することで、仮想ネットワークからの接続のみを受け入れるようにストレージ アカウントをセキュリティで保護できます。 ストレージ ファイアウォールはパブリック エンドポイント経由でのみアクセスを制御するため、プライベート エンドポイントを持つ仮想ネットワークからのトラフィックを許可するファイアウォール規則は必要ありません。 代わりに、プライベート エンドポイントは、ストレージ サービスへのアクセスをサブネットに許可するための同意フローに依存します。
注
ストレージ アカウント間で BLOB をコピーする場合、クライアントは、両方のアカウントへのネットワーク アクセスを持っている必要があります。 そのため、1 つのアカウント (送信元または送信先) にのみプライベート リンクを使用する場合は、クライアントが他のアカウントへのネットワーク アクセスを持っていることをご確認ください。 ネットワーク アクセスを構成するその他の方法の詳細については、「Azure Storage ファイアウォールおよび仮想ネットワークを構成する」を参照してください。
プライベート エンドポイントの作成
Azure portal を使用してプライベート エンドポイントを作成する方法については、「Azure portal のストレージ アカウント エクスペリエンスから非公開でストレージ アカウントに接続する」を参照してください。
PowerShell または Azure CLI を使用してプライベート エンドポイントを作成するには、これらの記事のいずれかを参照してください。 どちらの方法でも、Azure Web アプリはターゲット サービスとして機能しますが、プライベート リンクを作成する手順は、Azure Storage アカウントの場合と同じです。
プライベート エンドポイントを作成するときは、ストレージ アカウントと、その接続先のストレージ サービスを指定する必要があります。
アクセスする必要があるストレージ リソース (つまり、BLOB、Data Lake Storage、Files、キュー、Table、または静的な Web サイト) ごとに別々のプライベート エンドポイントが必要です。 プライベート エンドポイントでは、これらのストレージ サービスは、関連付けられたストレージ アカウントのターゲット サブリソースとして定義されます。
Data Lake Storage ストレージ リソース用にプライベート エンドポイントを作成する場合は、Blob Storage リソース用にも作成する必要があります。 これは、Data Lake Storage エンドポイントをターゲットとする操作が、BLOB エンドポイントにリダイレクトされる可能性があるためです。 同様に、Blob Storage 用のみにプライベート エンドポイントを追加し、Data Lake Storage 用に追加しない場合、API には DFS プライベート エンドポイントが必要であるため、一部の操作 (ACL の管理、ディレクトリの作成、ディレクトリの削除など) が失敗します。 両方のリソースにプライベート エンドポイントを作成して、すべての操作が正常に完了できるようにします。
ヒント
RA-GRS アカウントでの読み取りパフォーマンスを向上させるために、ストレージ サービスのセカンダリ インスタンスに対して別個のプライベート エンドポイントを作成します。 必ず汎用 v2 (Standard または Premium) ストレージ アカウントを作成してください。
geo 冗長ストレージ向けに構成されているストレージ アカウントを使用してセカンダリ リージョンに読み取りアクセスするには、サービスのプライマリ インスタンスとセカンダリ インスタンスの両方に、別々のプライベート エンドポイントが必要です。 フェールオーバー用のセカンダリ インスタンスのプライベート エンドポイントを作成する必要はありません。 プライベート エンドポイントは、フェールオーバー後、新しいプライマリ インスタンスに自動的に接続されます。 ストレージ冗長オプションの詳細については、「Azure Storage の冗長性」を参照してください。
プライベート エンドポイントへの接続
プライベート エンドポイントを使用する仮想ネットワーク上のクライアントは、パブリック エンドポイントに接続するクライアントと同じ接続文字列をストレージ アカウントに使用する必要があります。 プライベート リンク経由で仮想ネットワークからストレージ アカウントに接続を自動的にルーティングするには、DNS 解決に依存します。
重要
プライベート エンドポイントを使用したストレージアカウントへの接続には、他の方法で使用するのと同じ接続文字列を使用します。 privatelink
サブドメイン URL を使用してストレージ アカウントに接続しないでください。
既定では、プライベート エンドポイントに必要な更新プログラムを使用して、仮想ネットワークに接続されたプライベート DNS ゾーン を作成します。 ただし、独自の DNS サーバーを使用している場合は、DNS 構成に追加の変更が必要になることがあります。 以下の DNS の変更に関するセクションで、プライベート エンドポイントに必要な更新について説明しています。
プライベート エンドポイントの DNS の変更
注
プライベート エンドポイントの DNS 設定を構成する方法の詳細については、「Azure プライベート エンドポイントの DNS 構成」を参照してください。
プライベート エンドポイントを作成すると、ストレージ アカウントの DNS CNAME リソース レコードは、プレフィックス privatelink
を持つサブドメイン内のエイリアスに更新されます。 既定で、privatelink
サブドメインに対応するプライベート DNS ゾーンも作成されます。これには、プライベート エンドポイントの DNS A リソース レコードが含まれます。
プライベート エンドポイントを使用して仮想ネットワークの外部からストレージ エンドポイント URL を解決すると、ストレージ サービスのパブリック エンドポイントに解決されます。 プライベート エンドポイントをホストしている仮想ネットワークから解決されると、ストレージ エンドポイント URL はプライベート エンドポイントの IP アドレスに解決されます。
上の図の例では、ストレージ アカウント 'StorageAccountA' の DNS リソース レコードは、プライベート エンドポイントをホストする仮想ネットワークの外部から解決されると、次のようになります。
名前 | タイプ | 値 |
---|---|---|
StorageAccountA.blob.core.windows.net |
CNAME | StorageAccountA.privatelink.blob.core.windows.net |
StorageAccountA.privatelink.blob.core.windows.net |
CNAME | <ストレージ サービスのパブリック エンドポイント> |
<ストレージ サービスのパブリック エンドポイント> | A | <ストレージ サービスのパブリック IP アドレス> |
前述のように、ストレージ ファイアウォールを使用して、パブリック エンドポイントを介して仮想ネットワークの外部にあるクライアントのアクセスを拒否または制御できます。
プライベート エンドポイントをホストする仮想ネットワーク内のクライアントによって解決された StorageAccountA の DNS リソース レコードは、次のようになります。
名前 | タイプ | 値 |
---|---|---|
StorageAccountA.blob.core.windows.net |
CNAME | StorageAccountA.privatelink.blob.core.windows.net |
StorageAccountA.privatelink.blob.core.windows.net |
A | 10.1.1.5 |
この方法では、プライベート エンドポイントをホストしている仮想ネットワーク上のクライアントと、仮想ネットワークの外部のクライアントに対 して、同じ接続文字列を使用して ストレージ アカウントにアクセスできます。
ネットワーク上でカスタム DNS サーバーを使用している場合、クライアントで、ストレージ アカウント エンドポイントの FQDN をプライベート エンドポイントの IP アドレスに解決できる必要があります。 プライベート リンク サブドメインを仮想ネットワークのプライベート DNS ゾーンに委任するように DNS サーバーを構成するか、プライベート エンドポイント IP アドレスを使用して StorageAccountA.privatelink.blob.core.windows.net
の A レコードを構成する必要があります。
ヒント
カスタムまたはオンプレミスの DNS サーバーを使用している場合は、privatelink
サブドメインのストレージ アカウント名をプライベート エンドポイントの IP アドレスに解決するように DNS サーバーを構成する必要があります。 これを行うには、 privatelink
サブドメインを仮想ネットワークのプライベート DNS ゾーンに委任するか、DNS サーバーで DNS ゾーンを構成し、DNS A レコードを追加します。
ストレージ サービスのプライベート エンドポイントに推奨される DNS ゾーン名、および関連付けられたエンドポイント ターゲット サブリソースは次のとおりです。
ストレージ サービス | ターゲット サブリソース | ゾーン名 |
---|---|---|
Blob service | BLOB | privatelink.blob.core.windows.net |
Data Lake Storage | dfs | privatelink.dfs.core.windows.net |
ファイル サービス | ファイル | privatelink.file.core.windows.net |
Queue サービス | キュー | privatelink.queue.core.windows.net |
Table service | テーブル | privatelink.table.core.windows.net |
静的な Web サイト | Web | privatelink.web.core.windows.net |
プライベート エンドポイントをサポートするように独自の DNS サーバーを構成する方法の詳細については、次の記事を参照してください。
価格
料金の詳細については、「Azure Private Link の料金」をご覧ください。
既知の問題
Azure Storage のプライベート エンドポイントに関する以下の既知の問題に注意してください。
プライベート エンドポイントを持つ仮想ネットワーク内のクライアントのストレージ アクセス制約
既存のプライベート エンドポイントを持つ仮想ネットワーク内のクライアントは、プライベート エンドポイントを持つ他のストレージ アカウントにアクセスするときに制約に直面します。 たとえば、仮想ネットワーク N1 に Blob Storage 用のストレージ アカウント A1 のプライベート エンドポイントがあるとします。 ストレージ アカウント A2 に BLOB ストレージ用の仮想ネットワーク N2 にプライベート エンドポイントがある場合、仮想ネットワーク N1 内のクライアントは、プライベート エンドポイントを使用してアカウント A2 の BLOB ストレージにもアクセスする必要があります。 ストレージ アカウント A2 に BLOB ストレージ用のプライベート エンドポイントがない場合、仮想ネットワーク N1 内のクライアントは、プライベート エンドポイントなしでそのアカウントの Blob Storage にアクセスできます。
この制約は、アカウント A2 がプライベート エンドポイントを作成するときに行われる DNS 変更の結果です。
ストレージ アカウント間で BLOB をコピーする
Azure REST API を使用する場合、または REST API を使用するツールを使用する場合にのみ、プライベート エンドポイントを使用してストレージ アカウント間で BLOB をコピーできます。 このようなツールには、AzCopy、Storage Explorer、Azure PowerShell、Azure CLI、Azure Blob Storage SDK などがあります。
blob
または file
ストレージ リソース エンドポイントをターゲットとするプライベート エンドポイントのみがサポートされます。 これには、blob
リソース エンドポイントを明示的または暗黙的に参照する Data Lake Storage アカウントに対する REST API 呼び出しが含まれます。 Data Lake Storage の dfs
リソース エンドポイントを対象とするプライベート エンドポイントは、まだサポートされていません。 Network File System (NFS) プロトコルを使用したストレージ アカウント間でのコピーは、まだサポートされていません。