Azure コンテナー レジストリからの成果物のエクスポートを無効にする
組織内のレジストリ ユーザーが故意に、または誤って仮想ネットワークの外部に成果物をリークするのを防ぐには、エクスポートを無効にするようにレジストリの "エクスポート ポリシー" を構成できます。
エクスポート ポリシーは、Premium コンテナー レジストリ用に API バージョン 2021-06-01-preview で導入されたプロパティです。 exportPolicy
プロパティの状態が disabled
に設定されていると、ユーザーが次の操作を試みたとき、ネットワーク制限付きレジストリからの成果物のエクスポートがブロックされます。
- レジストリの成果物を別の Azure コンテナー レジストリにインポートする
- 別のコンテナーレジストリに成果物を転送するレジストリ エクスポート パイプラインを作成する
Note
成果物のエクスポートを無効にしても、許可されているユーザーが仮想ネットワーク内のレジストリにアクセスして、成果物をプルしたり、他のデータ プレーン操作を実行したりすることは妨げられません。 この使用を監査するため、レジストリ操作を監視するよう診断設定を構成することをお勧めします。
前提条件
- プライベート エンドポイントを使用して構成された Premium コンテナー レジストリ。
Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の Bash のクイックスタート」を参照してください。
CLI リファレンス コマンドをローカルで実行する場合、Azure CLI をインストールします。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。
ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、Azure CLI でのサインインに関するページを参照してください。
初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、Azure CLI で拡張機能を使用する方法に関するページを参照してください。
az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。
エクスポートを無効にするためのその他の要件
パブリック ネットワーク アクセスを無効にする - 成果物のエクスポートを無効にするには、レジストリへのパブリック アクセスも無効にする必要があります (レジストリの
publicNetworkAccess
プロパティをdisabled
に設定する必要があります)。 エクスポートを無効にする前に、またはそれを無効にするのと同時に、レジストリへのパブリック ネットワーク アクセスを無効にすることができます。レジストリのパブリック エンドポイントへのアクセスを無効にすることで、レジストリ操作が仮想ネットワーク内でのみ許可されるようになります。 成果物をプルしたり、他の操作を実行したりするためのレジストリへのパブリック アクセスは禁止されます。
エクスポート パイプラインを削除する - レジストリの
exportPolicy
の状態をdisabled
に設定する前に、レジストリに構成されている既存のエクスポート パイプラインを削除します。 パイプラインが構成されていると、exportPolicy
の状態を変更できません。
既存のレジストリの exportPolicy を無効にする
レジストリを作成すると、exportPolicy
の状態は既定で enabled
に設定され、アーティファクトをエクスポートできるようになります。 ARM テンプレートまたは az resource update
コマンドを使用して、状態を disabled
に更新できます。
ARM テンプレート
exportPolicy
の状態を更新し、publicNetworkAccess
プロパティを disabled
に設定するには、次の JSON を追加します。 詳細については、ARM テンプレートでのリソースのデプロイに関する記事を参照してください。
{
[...]
"resources": [
{
"type": "Microsoft.ContainerRegistry/registries",
"apiVersion": "2021-06-01-preview",
"name": "myregistry",
[...]
"properties": {
"publicNetworkAccess": "disabled",
"policies": {
"exportPolicy": {
"status": "disabled"
}
}
}
}
]
[...]
}
Azure CLI
既存のレジストリで exportPolicy
の状態を disabled
に設定するには、az resource update を実行します。 レジストリとリソース グループの名前を置き換えてください。
この例で示すように、exportPolicy
プロパティを無効にするときは、publicNetworkAccess
プロパティも disabled
に設定します。
az resource update --resource-group myResourceGroup \
--name myregistry \
--resource-type "Microsoft.ContainerRegistry/registries" \
--api-version "2021-06-01-preview" \
--set "properties.policies.exportPolicy.status=disabled" \
--set "properties.publicNetworkAccess=disabled"
出力では、エクスポート ポリシーの状態が無効であることが示されています。
{
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.ContainerRegistry/registries/myregistry",
"identity": null,
"kind": null,
"location": "centralus",
"managedBy": null,
"name": "myregistry",
"plan": null,
"properties": {
[...]
"policies": {
"exportPolicy": {
"status": "disabled"
},
"quarantinePolicy": {
"status": "disabled"
},
"retentionPolicy": {
"days": 7,
"lastUpdatedTime": "2021-07-20T23:20:30.9985256+00:00",
"status": "disabled"
},
"trustPolicy": {
"status": "disabled",
"type": "Notary"
},
"privateEndpointConnections": [],
"provisioningState": "Succeeded",
"publicNetworkAccess": "Disabled",
"zoneRedundancy": "Disabled"
[...]
}
exportPolicy を有効にする
レジストリで exportPolicy
の状態を無効にした後は、ARM テンプレートまたは az resource update
コマンドを使用して、いつでも再び有効にすることができます。
ARM テンプレート
exportPolicy
の状態を enabled
に更新するには、次の JSON を追加します。 詳細については、ARM テンプレートでのリソースのデプロイに関する記事を参照してください
{
[...]
"resources": [
{
"type": "Microsoft.ContainerRegistry/registries",
"apiVersion": "2021-06-01-preview",
"name": "myregistry",
[...]
"properties": {
"policies": {
"exportPolicy": {
"status": "enabled"
}
}
}
}
]
[...]
}
Azure CLI
exportPolicy
の状態を enabled
に設定するには、az resource update を実行します。 レジストリとリソース グループの名前を置き換えてください。
az resource update --resource-group myResourceGroup \
--name myregistry \
--resource-type "Microsoft.ContainerRegistry/registries" \
--api-version "2021-06-01-preview" \
--set "properties.policies.exportPolicy.status=enabled"
次のステップ
- Azure Container Registry のロールとアクセス許可について確認します。
- レジストリ成果物が誤って削除されないようにするには、コンテナー イメージのロックに関する記事を参照してください。
- Azure コンテナー レジストリをセキュリティで保護するには、組み込みの Azure ポリシーについて確認してください