禁止从 Azure 容器注册表导出项目
若要防止组织的注册表用户恶意或意外将项目泄漏到虚拟网络外部,可以配置注册表的导出策略以禁用导出。
导出策略是 API 版本 2021-06-01-preview 中为高级容器注册表引入的属性。 exportPolicy
属性在其状态设置为 disabled
时,会在用户尝试执行以下操作时阻止从受网络限制的注册表导出项目:
注意
禁用项目导出不会阻止授权用户访问虚拟网络中的注册表以拉取项目或执行其他数据平面操作。 若要审核使用情况,建议配置诊断设置以监视注册表操作。
先决条件
- 配置有专用终结点的高级容器注册表。
如需在本地运行 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 模板
包含以下 JSON 以更新 exportPolicy
状态,并将 publicNetworkAccess
属性设置为 disabled
。 详细了解如何使用 ARM 模板部署资源。
{
[...]
"resources": [
{
"type": "Microsoft.ContainerRegistry/registries",
"apiVersion": "2021-06-01-preview",
"name": "myregistry",
[...]
"properties": {
"publicNetworkAccess": "disabled",
"policies": {
"exportPolicy": {
"status": "disabled"
}
}
}
}
]
[...]
}
Azure CLI
运行 az resource update,将现有注册表中的 exportPolicy
状态设置为 disabled
。 替换注册表和资源组的名称。
如此示例中所示,禁用 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": "chinaeast2",
"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 模板
包含以下 JSON 以将 exportPolicy
状态更新为 enabled
。 详细了解如何使用 ARM 模板部署资源
{
[...]
"resources": [
{
"type": "Microsoft.ContainerRegistry/registries",
"apiVersion": "2021-06-01-preview",
"name": "myregistry",
[...]
"properties": {
"policies": {
"exportPolicy": {
"status": "enabled"
}
}
}
}
]
[...]
}
Azure CLI
运行 az resource update,将 exportPolicy
状态设置为 enabled
。 替换注册表和资源组的名称。
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 容器注册表角色和权限的信息。
- 若要防止意外删除注册表项目,请参阅锁定容器映像。
- 了解用于保护 Azure 容器注册表的内置 Azure 策略