Compartilhar via

禁用从 Azure 容器注册表导出工件

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

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

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

注意

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

先决条件

  • 如果希望在本地运行 CLI 引用命令,install 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 模板或 disabled 命令将状态更新为 az resource update

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": "2023-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"

后续步骤