パブリック 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

規則を追加してから有効になるまで数分かかります。

選択したパブリック ネットワークからのアクセス - ポータル

  1. ポータルで、自分のコンテナー レジストリに移動します。
  2. [設定] で、 [ネットワーク] を選択します。
  3. [パブリック アクセス] タブで、 [選択されたネットワーク] からのパブリック アクセスを許可するよう選択します。
  4. [ファイアウォール] で、仮想ネットワーク内の VM のパブリック IP アドレスなどのパブリック IP アドレスを入力します。 または、VM の IP アドレスを含むアドレス範囲を CIDR 表記法で入力します。
  5. [保存] を選択します。

コンテナー レジストリのファイアウォール規則の構成

注意

規則を追加してから有効になるまで数分かかります。

ヒント

必要に応じて、ローカル クライアント コンピューターまたは IP アドレス範囲からのレジストリ アクセスを有効にします。 このアクセスを許可するには、コンピューターのパブリック IPv4 アドレスが必要です。 このアドレスは、インターネット ブラウザーで "what is my IP address" と検索することで確認できます。 現在のクライアント IPv4 アドレスは、ポータルの [ネットワーク] ページでファイアウォール設定を構成したときにも自動的に表示されます。

パブリック ネットワーク アクセスの無効化

必要に応じて、レジストリのパブリック エンドポイントを無効にします。 パブリック エンドポイントを無効にすると、すべてのファイアウォール構成がオーバーライドされます。 たとえば、Private Link を使用して、仮想ネットワークでセキュリティ保護されたレジストリへのパブリック アクセスを無効にする場合などです。

Note

サービス エンドポイントのある仮想ネットワークでレジストリが設定される場合、レジストリのパブリック エンドポイントへのアクセスを無効にすると、仮想ネットワーク内のレジストリへのアクセスも無効になります。

パブリック アクセスを無効にする - CLI

Azure CLI を使用してパブリック アクセスを無効にするには、az acr update を実行し、--public-network-enabledfalse に設定します。 public-network-enabled 引数には、Azure CLI 2.6.0 以降が必要です。

az acr update --name myContainerRegistry --public-network-enabled false

パブリック アクセスを無効にする - ポータル

  1. ポータルで、コンテナー レジストリに移動し、[設定] > [ネットワーク] の順に選びます。
  2. [パブリック アクセス] タブの [Allow public network access](パブリック ネットワーク アクセスを許可する) で、 [無効] を選択します。 次に、 [保存] を選択します。

パブリック アクセスを無効にする

パブリック ネットワーク アクセスの復元

パブリック エンドポイントを再度有効にするには、パブリック アクセスを許可するようにネットワーク設定を更新します。 パブリック エンドポイントを有効にすると、すべてのファイアウォール構成がオーバーライドされます。

パブリック アクセスの復元 - CLI

az acr update を実行し、--public-network-enabledtrue に設定します。

Note

public-network-enabled 引数には、Azure CLI 2.6.0 以降が必要です。

az acr update --name myContainerRegistry --public-network-enabled true

パブリック アクセスの復元 - ポータル

  1. ポータルで、コンテナー レジストリに移動し、[設定] > [ネットワーク] の順に選びます。
  2. [パブリック アクセス] タブの [Allow public network access](パブリック ネットワーク アクセスを許可する) で、 [すべてのネットワーク] を選択します。 次に、 [保存] を選択します。

すべてのネットワークからのパブリック アクセス

トラブルシューティング

HTTPS プロキシの内側のアクセス

パブリック ネットワーク ルールが設定されている場合、またはレジストリへのパブリック アクセスが拒否された場合は、許可されていないパブリック ネットワークからレジストリにログインしようとすると失敗します。 プロキシのアクセス ルールが設定されていない場合も、HTTPS プロキシの内側からクライアントにアクセスすることはできません。 Error response from daemon: login attempt failed with status: 403 ForbiddenLooks 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 を使用している場合は、クラスターからのエグレス トラフィックの制御に関するガイダンスを参照してください。

次のステップ