Azure Container Registryの専用データ エンドポイント

Azure Container Registryの専用データ エンドポイントは、コンテナー イメージ レイヤーのダウンロード用にスコープ指定されたレジストリ固有の URL を提供し、既定のワイルドカード Azureストレージ アカウント エンドポイント (*.blob.core.windows.net) に置き換えます。 これにより、厳密にスコープが設定されたクライアント ファイアウォール規則が有効になり、データ流出のリスクが軽減されます。

Note

専用データ エンドポイントは、レイヤー BLOB の ダウンロード (プル) 中にのみ使用されます。 プッシュ中に BLOB をアップロードする場合、専用データ エンドポイントではなく、ログイン サーバー (グローバル エンドポイントまたはリージョン エンドポイント) を経由します。

専用データ エンドポイント機能は、 Premiumサービス レベルのレジストリで使用できます。

専用データ エンドポイントは、 IPv6 デュアルスタック エンドポイントの前提条件でもあります。 レジストリでは、エンドポイント プロトコルを IPv4AndIPv6 に設定する前に、専用データ エンドポイントを有効にする必要があります。

コンテナー イメージのダウンロードのしくみ: ログイン サーバーと 307 によるデータ エンドポイントへのリダイレクト

レジストリからコンテンツをプルするには、次の 2 種類のエンドポイントが含まれます。

  1. ログイン サーバー エンドポイント — 認証とコンテンツの検出に使用されます。 ログイン サーバーは次のいずれかになります。

    • グローバル エンドポイント (contoso.azurecr.io) - ACR は、クライアントに最適なネットワーク パフォーマンス プロファイルを使用して、geo レプリカに要求を自動的にルーティングします。 詳細については、「 geo レプリケーション」を参照してください。
    • 地域エンドポイント (contoso.eastus.geo.azurecr.io) — Azureマネージド ルーティングをバイパスして、特定の geo レプリカに直接要求をルーティングします。 詳細については、「 geo レプリケーション」を参照してください。

    docker pull contoso.azurecr.io/hello-world (グローバル エンドポイント) やdocker pull contoso.eastus.geo.azurecr.io/hello-world (リージョン エンドポイント) などのコマンドを実行すると、クライアントはログイン サーバーに対して認証を行い、要求された成果物を構成するレイヤーをネゴシエートします。

  2. データ エンドポイント - 実際のイメージ レイヤー BLOB のダウンロードに使用されます。 ログイン サーバーは、必要なレイヤーを識別した後、クライアントをリダイレクトしてデータ エンドポイントからダウンロードします。

エンドポイントを示す図。

ACR は、データ エンドポイントの基になるストレージ アカウントを管理します。 負荷分散、より高い同時配信のためのストレージ アカウント間でのコンテンツの分割、 geo レプリケーションによる複数リージョンのサポートなどの利点があります。

専用データエンドポイントなし

専用データ エンドポイントがない場合、ログイン サーバーは、ワイルドカード URL (*.blob.core.windows.net) を使用して、レイヤー BLOB のダウンロード用に 307 リダイレクトをAzureストレージ アカウントに発行します。

グローバル エンドポイント (Azure マネージド ルーティングの使用):

グローバル エンドポイントを使用した専用データ エンドポイントのない要求フローを示すダイアグラム: クライアントが contoso.azurecr.io に接続します。 Azureマネージド ルーティングでは最適な geo レプリカが選択され、geo レプリカはレイヤー BLOB のダウンロード用に *.blob.core.windows.net に 307 リダイレクトを発行します。

リージョン エンドポイント (クライアント指定のルーティング) の使用:

リージョン エンドポイントを使用する専用データ エンドポイントを使用しない要求フローを示す図。クライアントが contoso.eastus.geo.azurecr.io に接続し、要求が米国東部 geo レプリカに直接送信され、geo レプリカがレイヤー BLOB のダウンロードのために *.blob.core.windows.net に 307 リダイレクトを発行します。

どちらの場合も、ファイアウォール経由でこれらのダウンロードを許可するには、*.blob.core.windows.netを許可する必要があります。これは、レジストリのストレージだけでなく、すべてのAzureストレージ アカウントを対象とする広範なワイルドカードです。

専用データ エンドポイントを使用する

専用データ エンドポイントが有効になっている場合、ログイン サーバーは、レジストリ固有のリージョン スコープ URL へのレイヤー BLOB のダウンロードに対して 307 リダイレクトを発行します。

グローバル エンドポイント (Azure マネージド ルーティングの使用):

グローバル エンドポイントを使用する専用データ エンドポイントでのリクエスト フローを示す図: クライアントは contoso.azurecr.io に接続し、Azure 管理のルーティングによって最適な geo レプリカが選択され、geo レプリカはレイヤー BLOB のダウンロード用に contoso.eastus.data.azurecr.io への 307 リダイレクトを返します。

リージョン エンドポイント (クライアント指定のルーティング) の使用:

リージョン エンドポイントを使用した専用データ エンドポイントを使用した要求フローを示す図。クライアントが contoso.eastus.geo.azurecr.io に接続し、要求が米国東部の geo レプリカに直接送信され、geo レプリカによってレイヤー BLOB のダウンロード用の contoso.eastus.data.azurecr.io への 307 リダイレクトが発行されます。

各 geo レプリカは、パターン [registry].[region].data.azurecr.ioを使用して独自の専用データ エンドポイントを取得します。 ファイアウォール規則は、広範なワイルドカードではなく、これらの特定のエンドポイントにスコープを設定できます。

専用データ エンドポイントが重要な理由

専用データ エンドポイントのないデータ流出リスク

専用データ エンドポイントがない場合、ファイアウォール規則では、レイヤーのダウンロードを許可する *.blob.core.windows.net を許可する必要があります。 この広範なワイルドカードにより、レジストリのストレージだけでなく、すべてのAzureストレージ アカウントへのアクセスが開きます。 不適切なアクターは、ネットワークから到達可能な任意のAzureストレージ アカウントにデータを書き込むコードをデプロイする可能性があります。

クライアント データ流出のリスクを示す図。

専用データ エンドポイントを使用したスコープ付きファイアウォール規則

専用データ エンドポイントを使用すると、広範な *.blob.core.windows.net ワイルドカードを、特定のレジストリのデータ エンドポイントのスコープ付きファイアウォール規則に置き換えることができます。 たとえば、ファイアウォール構成で contoso.eastus.data.azurecr.iocontoso.westeurope.data.azurecr.io のみを許可できます。レジストリのストレージへのアクセスを制限し、他のストレージ アカウントへの流出をブロックできます。

専用データ エンドポイントを使用する Contoso の例を示す図。

これは、オンプレミスのホスト、IoT デバイス、カスタム ビルド エージェント、またはプライベート エンドポイントがオプションではない環境から接続するクライアントに適用されます。

地理レプリケーションを備えた専用データ エンドポイント

geo レプリケートされたレジストリの場合、各 geo レプリカは独自の専用データ エンドポイントを取得します。 URL パターンが [registry].[region].data.azurecr.io

グローバル エンドポイントからイメージをプルすると、ACR はクライアントに最適なネットワーク パフォーマンス プロファイルを使用して geo レプリカに要求をルーティングします。 その後、サービス geo レプリカは、サービス geo レプリカ独自の専用データ エンドポイントへのレイヤー BLOB のダウンロードに対して 307 リダイレクトを発行します。 リダイレクトは常に、サービス geo レプリカと 同じリージョン 内に留まれます。米国東部 geo レプリカにルーティングされたプルは常に contoso.eastus.data.azurecr.ioにリダイレクトされ、別のリージョンの専用データ エンドポイントにはリダイレクトされません。

これは、 リージョン エンドポイントを使用する場合にも適用されます。 リージョン エンドポイント (contoso.eastus.geo.azurecr.io) からのプルは、レイヤーのダウンロードをリージョン間で行わない contoso.eastus.data.azurecr.io にリダイレクトします。 つまり、ファイアウォール規則はリージョンごとにスコープを設定できます。

専用データ エンドポイントを有効にする

Note

既存の *.blob.core.windows.net エンドポイントへのクライアント ファイアウォール アクセスを以前に構成した場合、専用データ エンドポイントに切り替えるとクライアント接続に影響が出て、プル エラーが発生します。 クライアントが一貫してアクセスできるようにするには、新しいデータ エンドポイント規則をクライアントのファイアウォール規則に追加します。 完了したら、Azure CLI またはその他のツールを使用して、レジストリの専用データ エンドポイントを有効にします。

イメージ プル中に、専用データ エンドポイントが有効になっている場合、ACR はイメージ レイヤーをフェッチする必要があるたびにクライアントに一時的なダウンロード リンクを提供します。 このリンクは専用データ エンドポイントを指し、少なくとも 20 分から最大 30 分間有効であり、レイヤーをダウンロードするための安全で有効期間の短い URL を提供します。 リンクの有効期限が切れると、クライアントはイメージをプルするときに別のレイヤーをダウンロードする必要がある場合に、新しいレイヤーを要求するだけです。

Azure portal または Azure CLI を使用して、専用のデータ エンドポイントを有効にすることができます。 データ エンドポイントは、リージョンのパターン <registry-name>.<region>.data.azurecr.io に従います。 ジオレプリケーションされたレジストリでは、データエンドポイントを有効にすると、すべてのレプリカリージョンでエンドポイントが有効化されます。

Azure ポータルを使用して専用データ エンドポイントを有効にする

  1. コンテナー レジストリに移動します。
  2. サービス メニューの [設定] で、[ネットワーク] を選択します。
  3. [ パブリック アクセス] で、[ 専用データ エンドポイントを使用 する] チェック ボックスをオンにします。
  4. 保存を選びます。

これで、Azure portal にデータ エンドポイントが表示されます。

Azure CLIを使用して専用データ エンドポイントを有効にする

az acr update --name myregistry --data-endpoint-enabled

データ エンドポイントを表示するには、az acr show-endpoints コマンドを使用します。

az acr show-endpoints --name myregistry

この出力例は、専用データ エンドポイントとリージョン エンドポイント (有効な場合) を含む、完全なエンドポイント スキーマを示しています。

{
    "loginServer": "myregistry.azurecr.io",
    "dataEndpoints": [
        {
            "region": "eastus",
            "endpoint": "myregistry.eastus.data.azurecr.io"
        },
        {
            "region": "westus",
            "endpoint": "myregistry.westus.data.azurecr.io"
        }
    ],
    "regionalEndpoints": [
        {
            "region": "eastus",
            "endpoint": "myregistry.eastus.geo.azurecr.io"
        },
        {
            "region": "westus",
            "endpoint": "myregistry.westus.geo.azurecr.io"
        }
    ]
}

レジストリの専用データ エンドポイントを設定した後、データ エンドポイントのクライアント ファイアウォール アクセス規則を有効にすることができます。 必要なすべてのレジストリ リージョンについて、データ エンドポイント アクセス規則を有効にします。 詳細については、「ファイアウォールの内側から Azure コンテナー レジストリにアクセスする規則を構成する」を参照してください。

データ エンドポイントへのネットワーク アクセスの制限

専用データ エンドポイントを有効にすると、クライアントがそれらのエンドポイントに到達する方法を制限できます。 次の 2 つのアプローチがあります。

Azure プライベート エンドポイント (仮想ネットワーク)

Azureプライベート エンドポイントは、仮想ネットワーク内のクライアントからレジストリへのネットワーク アクセスを制御する最も安全な方法です。 プライベート エンドポイントを構成すると、仮想ネットワーク内のプライベート エンドポイント リソースに割り当てられたプライベート IP を使用して、ログイン サーバー (グローバル エンドポイントとリージョン エンドポイント) とデータ エンドポイントの両方に仮想ネットワーク内からアクセスできます。 お客様は、レジストリで パブリック ネットワーク アクセスを無効 にして、専用データ エンドポイントがプライベート エンドポイント経由でのみ到達可能であることを確認することもできます。

レジストリに少なくとも 1 つのプライベート エンドポイントが構成されている場合、専用データ エンドポイントが自動的に有効になります。 詳細については、「 プライベート エンドポイントを使用して仮想ネットワークからレジストリにプライベートに接続する」を参照してください。

プライベート エンドポイントの IP アドレスに関する考慮事項

各プライベート エンドポイント リソースは、仮想ネットワーク サブネットのプライベート IP アドレスを使用します。 それに応じてサブネットのサイズ設定を計画します。

  • グローバル エンドポイントの 1 つの IP (myregistry.azurecr.io)
  • 専用データ エンドポイント () の myregistry.<region>.data.azurecr.io - プライベート エンドポイントが構成されると自動的に有効になります
  • リージョン エンドポイント () の myregistry.<region>.geo.azurecr.io - レジストリでリージョン エンドポイントが有効になっている場合のみ

たとえば、3 つの geo レプリカとリージョン エンドポイントが有効になっているレジストリでは、プライベート エンドポイント リソースあたり 1 (グローバル) + 3 (データ) + 3 (リージョン) = 7 個のプライベート IP アドレス が必要です。 詳細については、「 プライベート エンドポイントを使用して仮想ネットワークからレジストリにプライベートに接続する」を参照してください。

クライアント ファイアウォール規則

プライベート エンドポイントがオプションでない場合は、必要なレジストリ リージョンごとに専用データ エンドポイントへのアクセスを許可するようにクライアント ファイアウォール規則を構成します。 詳細については、「ファイアウォールの内側から Azure コンテナー レジストリにアクセスする規則を構成する」を参照してください。

次のステップ