你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

禁止从 Azure 容器注册表导出项目

若要防止组织的注册表用户恶意或意外将项目泄漏到虚拟网络外部,可以配置注册表的导出策略以禁用导出。

导出策略是 API 版本 2021-06-01-preview 中为高级容器注册表引入的属性。 exportPolicy 属性在其状态设置为 disabled 时,会在用户尝试执行以下操作时阻止从受网络限制的注册表导出项目:

  • 将注册表的项目导入到另一个 Azure 容器注册表
  • 创建注册表导出管道以将项目传输到另一个容器注册表

注意

禁用项目导出不会阻止授权用户访问虚拟网络中的注册表以拉取项目或执行其他数据平面操作。 若要审核使用情况,建议配置诊断设置以监视注册表操作。

先决条件

禁用导出的其他要求

  • 禁用公用网络访问 - 若要禁用项目导出,还必须禁用对注册表的公共访问(注册表的 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": "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 模板

包含以下 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"

后续步骤