信頼されたサービスがネットワーク制限付きコンテナー レジストリに安全にアクセスできるようにする
Azure Container Registry を使用すると、特定の信頼された Azure サービスが、ネットワーク アクセス ルールを使用して構成されたレジストリにアクセスすることを許可できます。 信頼されたサービスが許可されると、信頼されたサービス インスタンスは、レジストリのネットワーク ルールを安全にバイパスし、イメージのプルやプッシュなどの操作を実行できます。 この記事では、ネットワーク制限付き Azure コンテナー レジストリで信頼されたサービスを有効にして使用する方法について説明します。
この記事のサンプル コマンドは、Azure Cloud Shell または Azure CLI のローカル インストールを使用して実行します。 これをローカルで使用したい場合は、バージョン 2.18 以降が必要です。 バージョンを確認するには、az --version
を実行します。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。
制限事項
- 信頼できるサービスを使用する特定のレジストリにアクセスするシナリオでは、Azure リソースのマネージド ID が必要です。 ユーザー割り当てのマネージド ID がサポートされている場合を除き、システムによって割り当てられた ID のみ使用できます。
- 信頼されたサービスを許可することは、サービス エンドポイントで構成されたコンテナー レジストリには適用されません。 この機能は、プライベート エンドポイントで制限されているか、パブリック IP アクセス ルールが適用されているレジストリにのみ影響します。
信頼されたサービスについて
Azure Container Registry には多層型セキュリティ モデルがあり、レジストリへのアクセスを制限する、次のものを含む複数のネットワーク構成がサポートされています。
- Azure Private Link によるプライベート エンドポイント。 構成した場合、レジストリのプライベート エンドポイントは、プライベート IP アドレスを使用して、仮想ネットワーク内のリソースにのみアクセスできます。
- レジストリのファイアウォール規則。これは、特定のパブリック IP アドレスまたはアドレス範囲からのみレジストリのパブリック エンドポイントへのアクセスを許可します。 プライベート エンドポイントの使用時には、パブリック エンドポイントへのすべてのアクセスをブロックするようにファイアウォールを構成することもできます。
仮想ネットワークにデプロイされている場合、またはファイアウォール規則で構成されている場合、レジストリでは、それらのソースの外部からのユーザーまたはサービスへのアクセスが拒否されます。
いくつかのマルチテナント Azure サービスは、これらのレジストリ ネットワーク設定に含めることができないネットワークから動作するため、レジストリに対してイメージをプルしたりプッシュしたりするなどの操作の実行が妨げられます。 特定のサービス インスタンスを "信頼済み" として指定することで、レジストリ所有者は、選択された Azure リソースが、レジストリ操作を実行するために、レジストリのネットワーク設定を安全にバイパスできるようにすることができます。
信頼できるサービス
レジストリの信頼されたサービスを許可する設定が有効になっている場合 (既定)、次のサービスのインスタンスはネットワーク制限付きコンテナー レジストリにアクセスできます。 今後、さらに多くのサービスが追加される予定です。
ここで示されている場合、信頼されたサービスによるアクセスでは、サービス インスタンスでのマネージド ID の追加の構成、RBAC ロールの割り当て、およびレジストリによる認証が必要になります。 手順の例については、この記事の後半の「信頼されたサービスのワークフロー」を参照してください。
信頼できるサービス | サポートされる使用シナリオ | RBAC ロールによるマネージド ID の構成 |
---|---|---|
Azure Container Instances | マネージド ID を使用した Azure Container Registry から Azure Container Instances へのデプロイ | システム割り当て ID またはユーザー割り当て ID |
Microsoft Defender for Cloud | Microsoft Defender for container registries による脆弱性スキャン | いいえ |
ACR タスク | ACR タスクから親レジストリまたは別のレジストリにアクセスする | はい |
Machine Learning | カスタムの Docker コンテナー イメージを使用して、Machine Learning ワークスペースでモデルをデプロイまたはトレーニングする | はい |
Azure Container Registry | ネットワークで制限された Azure Container Registry との間でイメージをインポートする | いいえ |
Note
現在、[信頼できるサービスを許可する] 設定を有効にしても、App Service には適用されません。
信頼されたサービスを許可する - CLI
既定では、信頼されたサービスを許可する設定は、新しい Azure コンテナー レジストリで有効になっています。 az acr update コマンドを実行して、設定を無効または有効にします。
無効にするには:
az acr update --name myregistry --allow-trusted-services false
既存のレジストリ、または設定が既に無効になっているレジストリで設定を有効にするには、次のようにします。
az acr update --name myregistry --allow-trusted-services true
信頼されたサービスを許可する - ポータル
既定では、信頼されたサービスを許可する設定は、新しい Azure コンテナー レジストリで有効になっています。
ポータルで設定を無効にするか、再度有効にするには、次のようにします。
- ポータルで、自分のコンテナー レジストリに移動します。
- [設定] で [ネットワーク] を選択します。
- [Allow public network access](パブリック ネットワーク アクセスを許可する) で、 [選択されたネットワーク] または [無効] を選択します。
- 次のいずれかの操作を行います。
- 信頼されたサービスによるアクセスを無効にするには、 [ファイアウォールの例外] で、 [信頼された Microsoft サービスによるこのコンテナー レジストリへのアクセスを許可] のチェックをオフにします。
- 信頼されたサービスを許可するには、 [ファイアウォールの例外] で、 [信頼された Microsoft サービスによるこのコンテナー レジストリへのアクセスを許可] のチェックをオンにします。
- [保存] を選択します。
信頼されたサービスのワークフロー
信頼されたサービスのインスタンスが、ネットワーク制限付きコンテナー レジストリにアクセスできるようにするための一般的なワークフローをここに示します。 このワークフローは、サービス インスタンスのマネージド ID を使用してレジストリのネットワーク ルールをバイパスする場合に必要です。
- Azure Container Registry の信頼できるサービスのいずれかのインスタンスでマネージド ID を有効にします。
- ID に、レジストリに対する Azure ロール を割り当てます。 たとえば、コンテナー イメージをプルするには、ACRPull ロールを割り当てます。
- ネットワーク制限付きレジストリで、信頼されたサービスによるアクセスを許可するように設定を構成します。
- ID の資格情報を使用して、ネットワーク制限付きレジストリで認証します。
- レジストリからイメージをプルするか、ロールで許可されている他の操作を実行します。
例:ACR タスク
次の例は、信頼されたサービスとして ACR タスクを使用する方法を示しています。 タスクの詳細については、「ACR タスクでの Azure マネージド ID を使用したクロスレジストリ認証」を参照してください。
- Azure コンテナー レジストリを作成または更新します。
ACR タスクを作成します。
- タスクの作成時に、システム割り当てマネージド ID を有効にします。
- タスクの既定の認証モード (
--auth-mode None
) を無効にします。
- タスク ID に、レジストリにアクセスするための Azure ロールを割り当てます。 たとえば、イメージをプルおよびプッシュするアクセス許可を持つ AcrPush ロールを割り当てます。
- タスクにレジストリのマネージド ID 資格情報を追加します。
- タスクがネットワーク制限をバイパスすることを確認するために、レジストリでパブリック アクセスを無効にします。
- タスクを実行します。 レジストリとタスクが適切に構成されている場合は、レジストリによってアクセスが許可されるため、タスクは正常に実行されます。
信頼されたサービスによるアクセスを無効にするテストを行うには、次のようにします。
- 信頼されたサービスによるアクセスを許可する設定を無効にします。
- タスクを再び実行します。 この場合、レジストリでタスクによるアクセスが許可されなくなるため、タスクの実行は失敗します。
次のステップ
- 仮想ネットワーク内のプライベート エンドポイントを使用してレジストリへのアクセスを制限するには、「Azure コンテナー レジストリ用に Azure Private Link を構成する」を参照してください。
- レジストリのファイアウォール規則を設定するには、「パブリック IP ネットワーク ルールを構成する」を参照してください。