ファイアウォールの内側から Azure Container Registry にアクセスする規則を構成する
この記事では、Azure コンテナー レジストリへのアクセスを許可するようにファイアウォールの規則を構成する方法について説明します。 たとえば、ファイアウォールまたはプロキシ サーバーの背後にある Azure IoT Edge デバイスは、コンテナーのイメージをプルするためにコンテナー レジストリにアクセスする必要がある場合があります。 または、オンプレミス ネットワーク内のロックダウンされたサーバーが、イメージをプッシュするためのアクセスを必要とする場合があります。
代わりに、Azure 仮想ネットワーク内でのみコンテナー レジストリへの着信ネットワーク アクセスを構成する場合は、「Azure コンテナー レジストリ用に Azure Private Link を構成する」を参照してください。
レジストリ エンドポイントについて
イメージまたはその他の成果物を Azure コンテナー レジストリにプルまたはプッシュするには、Docker デーモンなどのクライアントが 2 つの異なるエンドポイントを使用して HTTPS 経由でやり取りする必要があります。 ファイアウォールの内側からレジストリにアクセスするクライアントでは、両方のエンドポイントのアクセス規則を構成する必要があります。 どちらのエンドポイントもポート 443 経由でアクセスされます。
レジストリ REST API エンドポイント - 認証およびレジストリ管理操作は、レジストリのパブリック REST API エンドポイントを介して処理されます。 このエンドポイントは、レジストリのログイン サーバー名です。 例:
myregistry.azurecr.io
- 証明書のレジストリ REST API エンドポイント - Azure コンテナー レジストリでは、すべてのサブドメインにワイルドカード SSL 証明書が使用されます。 SSL を使用して Azure コンテナー レジストリに接続する場合、クライアントは TLS ハンドシェイク用の証明書をダウンロードできる必要があります。 このような場合は、
azurecr.io
にもアクセスできる必要があります。
- 証明書のレジストリ REST API エンドポイント - Azure コンテナー レジストリでは、すべてのサブドメインにワイルドカード SSL 証明書が使用されます。 SSL を使用して Azure コンテナー レジストリに接続する場合、クライアントは TLS ハンドシェイク用の証明書をダウンロードできる必要があります。 このような場合は、
ストレージ (データ) エンドポイント - Azure では、コンテナー イメージやその他の成果物のデータを管理するために、各レジストリに代わって Azure Storage アカウントに BLOB ストレージが割り当てられます。 クライアントは、Azure コンテナー レジストリ内のイメージ レイヤーにアクセスするときに、レジストリによって提供されるストレージ アカウントのエンドポイントを使用して要求を行います。
レジストリが geo レプリケートされている場合、クライアントは、特定のリージョンまたは複数のレプリケートされたリージョンでデータ エンドポイントを操作する必要がある場合があります。
REST エンドポイントとデータ エンドポイントへのアクセスを許可する
- REST エンドポイント - レジストリ ログイン サーバーの完全修飾名 (
<registry-name>.azurecr.io
) または関連付けられた IP アドレス範囲へのアクセスを許可します - ストレージ (データ) エンドポイント - ワイルドカード (
*.blob.core.windows.net
) または関連付けられた IP アドレス範囲を使用して、すべての Azure BLOB ストレージ アカウントへのアクセスを許可します。
Note
Azure Container Registry には専用データ エンドポイントが導入されています。これにより、レジストリ ストレージのクライアント ファイアウォール規則のスコープを厳密に設定できます。 必要に応じて、<registry-name>.<region>.data.azurecr.io
の形式を使用して、レジストリが配置またはレプリケートされているすべてのリージョンで、データ エンドポイントを有効にします。
レジストリ FQDN について
レジストリには、 ログイン URL と データ エンドポイントの 2 つの FQDN があります。
- プライベート リンクを有効にすることで、プライベート IP を使用して、 ログイン URL と データ エンドポイント の両方に仮想ネットワーク内からアクセスできます。
- データ エンドポイントを使用しないレジストリは、フォーム
*.blob.core.windows.net
のエンドポイントからデータにアクセスする必要があり、ファイアウォール規則を構成するときに必要な分離を提供しません。 - プライベート リンクが有効になっているレジストリでは、専用データ エンドポイントが自動的に取得されます。
- 専用データ エンドポイントは、レジストリのリージョンごとに作成されます。
- データ エンドポイントが有効か無効かに関係なく、ログイン URL は変わりません。
IP アドレス範囲によりアクセスを許可する
組織に特定の IP アドレスまたはアドレス範囲のみへのアクセスを許可するポリシーがある場合は、Azure の IP 範囲とサービス タグ – パブリック クラウドをダウンロードしてください。
アクセスを許可する必要がある ACR REST エンドポイントの IP 範囲を検索するには、JSON ファイル内で AzureContainerRegistry を検索します。
重要
Azure サービスの IP アドレス範囲は変更でき、更新は毎週公開されます。 JSON ファイルを定期的にダウンロードし、アクセス規則で必要な更新を行います。 実際のシナリオで、Azure 仮想ネットワークでネットワーク セキュリティ グループの規則を構成する必要がある場合、または Azure Firewall を使用する場合、代わりに AzureContainerRegistry のサービス タグを使用します。
すべてのリージョンの REST IP アドレス
{
"name": "AzureContainerRegistry",
"id": "AzureContainerRegistry",
"properties": {
"changeNumber": 10,
"region": "",
"platform": "Azure",
"systemService": "AzureContainerRegistry",
"addressPrefixes": [
"13.66.140.72/29",
[...]
特定のリージョンの REST IP アドレス
特定のリージョン (AzureContainerRegistry.AustraliaEast など) を検索します。
{
"name": "AzureContainerRegistry.AustraliaEast",
"id": "AzureContainerRegistry.AustraliaEast",
"properties": {
"changeNumber": 1,
"region": "australiaeast",
"platform": "Azure",
"systemService": "AzureContainerRegistry",
"addressPrefixes": [
"13.70.72.136/29",
[...]
すべてのリージョンのストレージ IP アドレス
{
"name": "Storage",
"id": "Storage",
"properties": {
"changeNumber": 19,
"region": "",
"platform": "Azure",
"systemService": "AzureStorage",
"addressPrefixes": [
"13.65.107.32/28",
[...]
特定のリージョンのストレージ IP アドレス
特定のリージョン (Storage.AustraliaCentral など) を検索します。
{
"name": "Storage.AustraliaCentral",
"id": "Storage.AustraliaCentral",
"properties": {
"changeNumber": 1,
"region": "australiacentral",
"platform": "Azure",
"systemService": "AzureStorage",
"addressPrefixes": [
"52.239.216.0/23"
[...]
サービス タグによるアクセスを許可する
Azure 仮想ネットワークでは、ネットワーク セキュリティ規則を使用して、仮想マシンなどのリソースからコンテナー レジストリへのトラフィックをフィルター処理します。 Azure ネットワーク規則の作成を簡略化するには、AzureContainerRegistry のサービス タグを使用します。 サービス タグは、グローバルまたは Azure リージョンごとに Azure サービスにアクセスするための IP アドレス プレフィックスのグループを表します。 アドレスが変更されると、タグは自動的に更新されます。
たとえば、Azure コンテナー レジストリへのトラフィックを許可するために、宛先が AzureContainerRegistry の送信ネットワーク セキュリティ グループの規則を作成します。 特定のリージョンでのみサービス タグへのアクセスを許可するには、次の形式でリージョンを指定します。AzureContainerRegistry.[リージョン名]
専用データ エンドポイントを有効にする
警告
既存の *.blob.core.windows.net
エンドポイントへのクライアント ファイアウォール アクセスを以前に構成した場合、専用データ エンドポイントへの切り替えによってクライアント接続が影響を受け、プル エラーが発生します。 クライアントが一貫してアクセスできるようにするには、新しいデータ エンドポイント規則をクライアントのファイアウォール規則に追加します。 完了したら、Azure CLI またはその他のツールを使用して、レジストリの専用データ エンドポイントを有効にします。
専用データ エンドポイントは、Premium コンテナー レジストリ サービス レベルのオプション機能です。 レジストリ サービスのレベルと制限については、「Azure Container Registry のサービス レベル」を参照してください。
Azure portal または Azure CLI を使用して、専用のデータ エンドポイントを有効にすることができます。 データ エンドポイントは、リージョンのパターン <registry-name>.<region>.data.azurecr.io
に従います。 Geo レプリケートされたレジストリでは、データ エンドポイントを有効にすると、すべてのレプリカ リージョンでエンドポイントが有効になります。
ポータル
ポータルを使用してデータ エンドポイントを有効にするには:
- お使いのコンテナー レジストリに移動します。
- [ネットワーク]>[パブリック アクセス] を選択します。
- [Enable dedicated data endpoint](専用データ エンドポイントを有効にする) チェックボックスを選択し ます。
- [保存] を選択します。
データ エンドポイントがポータルに表示されます。
Azure CLI
Azure CLI を使用してデータ エンドポイントを有効にするには、Azure CLI バージョン 2.4.0 以降を使用します。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。
次の az acr update コマンドを使用すると、レジストリ myregistry の専用データ エンドポイントが有効になります。
az acr update --name myregistry --data-endpoint-enabled
データ エンドポイントを表示するには、az acr show-endpoints コマンドを使用します。
az acr show-endpoints --name myregistry
デモンストレーション目的での出力には、2 つのリージョン エンドポイントが示されています
{
"loginServer": "myregistry.azurecr.io",
"dataEndpoints": [
{
"region": "eastus",
"endpoint": "myregistry.eastus.data.azurecr.io",
},
{
"region": "westus",
"endpoint": "myregistry.westus.data.azurecr.io",
}
]
}
レジストリの専用データ エンドポイントを設定した後、データ エンドポイントのクライアント ファイアウォール アクセス規則を有効にすることができます。 必要なすべてのレジストリ リージョンについて、データ エンドポイント アクセス規則を有効にします。
MCR 用のクライアント ファイアウォール規則を構成する
ファイアウォールの内側から Microsoft Container Registry (MCR) にアクセスする必要がある場合は、MCR クライアント ファイアウォール規則を構成するためのガイダンスを参照してください。 MCR は、Microsoft が公開しているすべての docker イメージ (Windows Server イメージなど) のプライマリ レジストリです。
次のステップ
Azure のネットワーク セキュリティのベスト プラクティスについて学習する
Azure 仮想ネットワークのセキュリティ グループについて学習する
コンテナー レジストリの Private Link の設定について学習する
Azure Container Registry の専用データ エンドポイントについて学習する