パブリック IP ネットワーク ルールを構成する
既定では、Azure コンテナー レジストリは、任意のネットワーク上のホストからのインターネット経由の接続を受け入れます。 この記事では、特定のパブリック IP アドレスまたはアドレス範囲からのアクセスのみを許可するようにコンテナー レジストリを構成する方法について説明します。 Azure CLI と Azure portal を使用した同等の手順が提供されます。
IP ネットワーク ルールは、パブリック レジストリ エンドポイントで構成されます。 IP ネットワーク ルールは、Private Link を使用して構成されたプライベート エンドポイントには適用されません
IP アクセス規則の構成は、Premium コンテナー レジストリ サービス レベルで利用できます。 レジストリ サービスのレベルと制限については、Azure Container Registry のレベルに関する記事を参照してください。
各レジストリでは、最大 100 個の IP アクセス規則がサポートされています。
重要
プライベート エンドポイント、選択されたサブネット、または IP アドレスへのアクセスを制限するコンテナー レジストリでは、一部の機能が使用できないか、または追加の構成が必要になることがあります。
- レジストリへのパブリック ネットワーク アクセスが無効になっている場合、Azure Security Center を含む特定の信頼されたサービスによるレジストリ アクセスのためには、ネットワーク設定でのネットワーク ルールのバイパスを有効にする必要があります。
- パブリックネットワーク アクセスが無効になると、Azure DevOps Services を含む特定の Azure サービスのインスタンスは現在のところ、コンテナー レジストリにアクセスできません。
- プライベート エンドポイントは現在、Azure DevOps マネージド エージェントでサポートされていません。 プライベート エンドポイントへのネットワーク回線を備えたセルフホステッド エージェントを使用する必要があります。
- レジストリに承認されたプライベート エンドポイントが含まれ、かつパブリック ネットワーク アクセスが無効になっている場合、Azure portal、Azure CLI、またはその他のツールを使用してリポジトリやタグを仮想ネットワークの外部で一覧表示することはできません。
選択したパブリック ネットワークからのアクセス - CLI
レジストリへの既定のネットワーク アクセスを変更する
選択したパブリック ネットワークへのアクセスを制限するには、まず既定のアクションを変更してアクセスを拒否します。 次の az acr update コマンドでは、自分のレジストリの名前に置き換えます。
az acr update --name myContainerRegistry --default-action Deny
レジストリにネットワーク規則を追加する
az acr network-rule add コマンドを使用して、パブリック IP アドレスまたは範囲からのアクセスを許可するネットワーク規則をレジストリに追加します。 たとえば、仮想ネットワーク内の VM のコンテナー レジストリの名前とパブリック IP アドレスを置き換えます。
az acr network-rule add \
--name mycontainerregistry \
--ip-address <public-IP-address>
Note
規則を追加してから有効になるまで数分かかります。
選択したパブリック ネットワークからのアクセス - ポータル
- ポータルで、自分のコンテナー レジストリに移動します。
- [設定] で、 [ネットワーク] を選択します。
- [パブリック アクセス] タブで、 [選択されたネットワーク] からのパブリック アクセスを許可するよう選択します。
- [ファイアウォール] で、仮想ネットワーク内の VM のパブリック IP アドレスなどのパブリック IP アドレスを入力します。 または、VM の IP アドレスを含むアドレス範囲を CIDR 表記法で入力します。
- [保存] を選択します。
注意
規則を追加してから有効になるまで数分かかります。
ヒント
必要に応じて、ローカル クライアント コンピューターまたは IP アドレス範囲からのレジストリ アクセスを有効にします。 このアクセスを許可するには、コンピューターのパブリック IPv4 アドレスが必要です。 このアドレスは、インターネット ブラウザーで "what is my IP address" と検索することで確認できます。 現在のクライアント IPv4 アドレスは、ポータルの [ネットワーク] ページでファイアウォール設定を構成したときにも自動的に表示されます。
パブリック ネットワーク アクセスの無効化
必要に応じて、レジストリのパブリック エンドポイントを無効にします。 パブリック エンドポイントを無効にすると、すべてのファイアウォール構成がオーバーライドされます。 たとえば、Private Link を使用して、仮想ネットワークでセキュリティ保護されたレジストリへのパブリック アクセスを無効にする場合などです。
Note
サービス エンドポイントのある仮想ネットワークでレジストリが設定される場合、レジストリのパブリック エンドポイントへのアクセスを無効にすると、仮想ネットワーク内のレジストリへのアクセスも無効になります。
パブリック アクセスを無効にする - CLI
Azure CLI を使用してパブリック アクセスを無効にするには、az acr update を実行し、--public-network-enabled
を false
に設定します。 public-network-enabled
引数には、Azure CLI 2.6.0 以降が必要です。
az acr update --name myContainerRegistry --public-network-enabled false
パブリック アクセスを無効にする - ポータル
- ポータルで、コンテナー レジストリに移動し、[設定] > [ネットワーク] の順に選びます。
- [パブリック アクセス] タブの [Allow public network access](パブリック ネットワーク アクセスを許可する) で、 [無効] を選択します。 次に、 [保存] を選択します。
パブリック ネットワーク アクセスの復元
パブリック エンドポイントを再度有効にするには、パブリック アクセスを許可するようにネットワーク設定を更新します。 パブリック エンドポイントを有効にすると、すべてのファイアウォール構成がオーバーライドされます。
パブリック アクセスの復元 - CLI
az acr update を実行し、--public-network-enabled
を true
に設定します。
Note
public-network-enabled
引数には、Azure CLI 2.6.0 以降が必要です。
az acr update --name myContainerRegistry --public-network-enabled true
パブリック アクセスの復元 - ポータル
- ポータルで、コンテナー レジストリに移動し、[設定] > [ネットワーク] の順に選びます。
- [パブリック アクセス] タブの [Allow public network access](パブリック ネットワーク アクセスを許可する) で、 [すべてのネットワーク] を選択します。 次に、 [保存] を選択します。
トラブルシューティング
HTTPS プロキシの内側のアクセス
パブリック ネットワーク ルールが設定されている場合、またはレジストリへのパブリック アクセスが拒否された場合は、許可されていないパブリック ネットワークからレジストリにログインしようとすると失敗します。 プロキシのアクセス ルールが設定されていない場合も、HTTPS プロキシの内側からクライアントにアクセスすることはできません。 Error response from daemon: login attempt failed with status: 403 Forbidden
や Looks like you don't have access to registry
のようなエラー メッセージが表示されます。
これらのエラーは、ネットワーク アクセス ルールで許可されている HTTPS プロキシを使用しているにも関わらず、プロキシがクライアント環境で適切に構成されていない場合にも発生する可能性があります。 Docker クライアントと Docker デーモンの両方がプロキシの動作用に構成されていることを確認します。 詳細については、Docker ドキュメントの HTTP/HTTPS プロキシに関するページを参照してください。
Azure Pipelines からのアクセス
特定の IP アドレスへのアクセスが制限されている Azure コンテナー レジストリで Azure Pipelines を使用した場合、パイプラインからのアウトバウンド IP アドレスが固定されていないため、パイプラインでレジストリにアクセスできない可能性があります。 既定では、パイプラインにより、IP アドレスのセットが変化する仮想マシン プール上の Microsoft ホステッド エージェントを使用して、ジョブが実行されます。
回避策の 1 つは、パイプラインの実行に使用されるエージェントを、Microsoft ホステッドからセルフホステッドに変更することです。 お客様が管理する Windows または Linux マシン上で実行されるセルフホステッド エージェントを使用すると、パイプラインのアウトバウンド IP アドレスをお客様が制御するので、このアドレスをレジストリ IP アクセス ルールに追加することができます。
AKS からのアクセス
特定の IP アドレスへのアクセスが制限されている Azure コンテナー レジストリで Azure Kubernetes Service (AKS) を使用する場合、既定では固定の AKS IP アドレスを構成できません。 AKS クラスターからのエグレス IP アドレスはランダムに割り当てられます。
AKS クラスターがレジストリにアクセスできるようにするには、次のオプションがあります。
- Azure Basic Load Balancer を使用している場合は、AKS クラスターに対して静的 IP アドレスを設定します。
- Azure Standard Load Balancer を使用している場合は、クラスターからのエグレス トラフィックの制御に関するガイダンスを参照してください。
次のステップ
- 仮想ネットワーク内のプライベート エンドポイントを使用してレジストリへのアクセスを制限するには、「Azure コンテナー レジストリ用に Azure Private Link を構成する」を参照してください。
- クライアント ファイアウォールの内側からレジストリ アクセス規則を設定する必要がある場合は、「ファイアウォールの内側から Azure コンテナー レジストリにアクセスする規則を構成する」を参照してください。
- トラブルシューティングに関する他のガイダンスについては、「レジストリに関するネットワークの問題のトラブルシューティング」を参照してください。