使用 Azure Policy 审核 Azure 容器注册表的合规性

Azure Policy 是 Azure 中的一项服务,可用于创建、分配和管理策略定义。 这些策略定义将在整个资源中强制实施不同的规则和效果,以便这些资源符合公司标准和服务级别协议。

本文介绍适用于 Azure 容器注册表的内置策略定义。 可以使用这些定义来审核新的和现有的注册表的合规性。

使用 Azure Policy 免费。

内置策略定义

以下内置策略定义特定于 Azure 容器注册表:

名称
(Azure 门户)
说明 效果 版本
(GitHub)
[预览]:容器注册表应为区域冗余 容器注册表可以配置为区域冗余或非区域冗余。 如果容器注册表的 zoneRedundancy 属性设置为“Disabled”,则表示注册表不是区域冗余的。 强制实施此策略有助于确保适当配置容器注册表来实现区域复原,从而降低在区域中断期间发生停机的风险。 Audit、Deny、Disabled 1.0.0-preview
[预览版]:容器注册表应使用虚拟网络服务终结点 此策略审核任何未配置为使用虚拟网络服务终结点的容器注册表。 Audit、Disabled 1.0.0-preview
Azure 注册表容器映像应已解决漏洞(由 Microsoft Defender 漏洞管理提供支持) 容器映像漏洞评估会扫描注册表中的常见漏洞 (CVE),并为每个映像提供详细的漏洞报告。 解决漏洞可以极大地改善安全状况,确保在部署之前可以安全地使用映像。 AuditIfNotExists、Disabled 1.0.1
Azure 注册表容器映像应该已解决漏洞(由 Qualys 提供支持) 容器映像漏洞评估功能会扫描注册表中的安全漏洞,并公开每个映像的详细发现结果。 修复这些漏洞可以极大改善容器的安全状况,并保护其不受攻击影响。 AuditIfNotExists、Disabled 2.0.2
配置容器注册表以禁用匿名身份验证。 禁用注册表的匿名拉取,使未经身份验证的用户无法访问数据。 禁用本地身份验证方法(如管理员用户、存储库范围的访问令牌和匿名拉取)可确保容器注册表仅将 Azure Active Directory 标识作为身份验证方法,从而提高安全性。 有关详细信息,请访问:https://docs.azure.cn/container-registry/container-registry-authentication 修改,已禁用 1.0.0
配置容器注册表以禁用 ARM 受众令牌身份验证。 禁用 Azure Active Directory ARM 受众令牌以向注册表进行身份验证。 将仅使用 Azure 容器注册表 (ACR) 受众令牌进行身份验证。 这可确保只有用于注册表的令牌才可用于身份验证。 禁用 ARM 受众令牌不会影响管理员用户身份验证,也不影响设有范围的访问令牌的身份验证。 有关详细信息,请访问:https://docs.azure.cn/container-registry/container-registry-authentication 修改,已禁用 1.0.0
配置容器注册表以禁用本地管理员帐户。 禁用注册表的管理员帐户,以便本地管理员无法访问。禁用本地身份验证方法(例如管理员用户、存储库范围内的访问令牌和匿名拉取)可确保容器注册表仅将 Azure Active Directory 标识作为身份验证方法,从而提高安全性。 有关详细信息,请访问:https://docs.azure.cn/container-registry/container-registry-authentication 修改,已禁用 1.0.1
将容器注册表配置为禁用公用网络访问 禁用对容器注册表的公用网络访问,确保不可通过公共 Internet 对其进行访问。 这样可以减少数据泄露风险。 请访问 https://docs.azure.cn/container-registry/container-registry-access-selected-networkshttps://docs.azure.cn/container-registry/container-registry-private-link 了解详细信息。 修改,已禁用 1.0.0
配置容器注册表以禁用存储库范围的访问令牌。 禁用注册表的存储库范围的访问令牌,以便无法通过令牌访问存储库。 禁用本地身份验证方法(如管理员用户、存储库范围的访问令牌和匿名拉取)可确保容器注册表仅将 Azure Active Directory 标识作为身份验证方法,从而提高安全性。 有关详细信息,请访问:https://docs.azure.cn/container-registry/container-registry-authentication 修改,已禁用 1.0.0
为容器注册表配置专用终结点 专用终结点可在源或目标位置没有公共 IP 地址的情况下将虚拟网络连接到 Azure 服务。 将专用终结点映射到高级容器注册表资源可以降低数据泄露的风险。 请访问 https://docs.azure.cn/event-grid/configure-private-endpointshttps://docs.azure.cn/container-registry/container-registry-private-link 了解详细信息。 DeployIfNotExists、Disabled 1.0.0
应使用客户管理的密钥对容器注册表进行加密 使用客户管理的密钥来管理注册表内容的静态加密。 默认情况下,使用服务管理的密钥对数据进行静态加密,但为了满足法规符合性标准,通常需要使用客户管理的密钥。 客户管理的密钥允许使用由你创建并拥有的 Azure Key Vault 密钥对数据进行加密。 你可以完全控制并负责关键生命周期,包括轮换和管理。 更多信息请访问 https://docs.azure.cn/container-registry/tutorial-customer-managed-keys Audit、Deny、Disabled 1.1.2
容器注册表应禁用匿名身份验证。 禁用注册表的匿名拉取,使未经身份验证的用户无法访问数据。 禁用本地身份验证方法(如管理员用户、存储库范围的访问令牌和匿名拉取)可确保容器注册表仅将 Azure Active Directory 标识作为身份验证方法,从而提高安全性。 有关详细信息,请访问:https://docs.azure.cn/container-registry/container-registry-authentication Audit、Deny、Disabled 1.0.0
容器注册表应禁用 ARM 受众令牌身份验证。 禁用 Azure Active Directory ARM 受众令牌以向注册表进行身份验证。 将仅使用 Azure 容器注册表 (ACR) 受众令牌进行身份验证。 这可确保只有用于注册表的令牌才可用于身份验证。 禁用 ARM 受众令牌不会影响管理员用户身份验证,也不影响设有范围的访问令牌的身份验证。 有关详细信息,请访问:https://docs.azure.cn/container-registry/container-registry-authentication Audit、Deny、Disabled 1.0.0
容器注册表应禁用导出功能 禁用导出功能可确保注册表中的数据仅通过数据平面 (docker pull) 访问,从而提高安全性。 无法通过“acr import”或“acr transfer”将数据移出注册表。 若要禁用导出功能,必须禁用公用网络访问。 有关详细信息,请访问:https://docs.azure.cn/container-registry/data-loss-prevention Audit、Deny、Disabled 1.0.0
容器注册表应禁用本地管理员帐户。 禁用注册表的管理员帐户,以便本地管理员无法访问。禁用本地身份验证方法(例如管理员用户、存储库范围内的访问令牌和匿名拉取)可确保容器注册表仅将 Azure Active Directory 标识作为身份验证方法,从而提高安全性。 有关详细信息,请访问:https://docs.azure.cn/container-registry/container-registry-authentication Audit、Deny、Disabled 1.0.1
容器注册表应禁用存储库范围的访问令牌。 禁用注册表的存储库范围的访问令牌,以便无法通过令牌访问存储库。 禁用本地身份验证方法(如管理员用户、存储库范围的访问令牌和匿名拉取)可确保容器注册表仅将 Azure Active Directory 标识作为身份验证方法,从而提高安全性。 有关详细信息,请访问:https://docs.azure.cn/container-registry/container-registry-authentication Audit、Deny、Disabled 1.0.0
容器注册表应包含支持专用链接的 SKU 通过 Azure 专用链接,在没有源位置或目标位置的公共 IP 地址的情况下,也可以将虚拟网络连接到 Azure 服务。 专用链接平台处理使用者与服务之间通过 Microsoft Azure 主干网络进行的连接。 将专用终结点映射到容器注册表(而不是整个服务)可以降低数据泄露的风险。 有关详细信息,请访问:https://docs.azure.cn/container-registry/container-registry-private-link Audit、Deny、Disabled 1.0.0
容器注册表不得允许无限制的网络访问 默认情况下,Azure 容器注册表接受来自任何网络上的主机的 Internet 连接。 为了防止注册表受到潜在的威胁,只允许来自特定的专用终结点、公共 IP 地址或地址范围的访问。 如果注册表没有配置网络规则,它将出现在不正常资源中。 有关容器注册表网络规则的详细信息,请访问此处:https://aka.ms/acr/privatelink、 https://docs.azure.cn/container-registry/container-registry-access-selected-networks Audit、Deny、Disabled 2.0.0
容器注册表应阻止创建缓存规则 禁止对 Azure 容器注册表创建缓存规则,以防止通过缓存拉取来进行拉取。 有关详细信息,请访问:https://aka.ms/acr/cache Audit、Deny、Disabled 1.0.0
容器注册表应使用专用链接 通过 Azure 专用链接,在没有源位置或目标位置的公共 IP 地址的情况下,也可以将虚拟网络连接到 Azure 服务。 专用链接平台处理使用者与服务之间通过 Microsoft Azure 主干网络进行的连接。通过将专用终结点映射到容器注册表,而不是整个服务,还可以防范数据泄露风险。 有关详细信息,请访问:https://docs.azure.cn/container-registry/container-registry-private-link Audit、Disabled 1.0.1
应禁用通过公用网络访问容器注册表 禁用公用网络访问可确保容器注册表不会在公共 Internet 上公开,从而提高安全性。 创建专用终结点可以避免容器注册表资源暴露。 请访问 https://docs.azure.cn/container-registry/container-registry-access-selected-networkshttps://docs.azure.cn/container-registry/container-registry-private-link 了解详细信息。 Audit、Deny、Disabled 1.0.0

创建策略分配

注意

在创建或更新某个策略分配后,需要花费一些时间,该分配才会评估定义范围中的资源。 请查看有关策略评估触发器的信息。

查看策略合规性

可以使用 Azure 门户、Azure 命令行工具或 Azure Policy SDK 来访问策略分配生成的合规性信息。 有关详细信息,请参阅获取 Azure 资源的合规性数据

有多种可能的原因会导致资源不合规。 若要确定原因或查找导致问题的变更,请参阅确定不合规情况

门户中的策略合规性:

  1. 选择“所有服务” ,然后搜索“策略”。

  2. 选择“合规性”。

  3. 将筛选器用于限制合规性状态,或用于搜索策略。

    门户中的策略合规性

  4. 选择一个策略来查看聚合合规性详细信息和事件。 然后,根据需要选择一个适用于资源合规性的特定注册表。

Azure CLI 中的策略合规性

也可使用 Azure CLI 来获取合规性数据。 例如,在 CLI 中使用 az policy assignment list 命令获取已应用的 Azure 容器注册表策略的策略 ID:

az policy assignment list --query "[?contains(displayName,'Container Registries')].{name:displayName, ID:id}" --output table

示例输出:

Name                                                                                   ID
------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------
Container Registries should not allow unrestricted network access           /subscriptions/<subscriptionID>/providers/Microsoft.Authorization/policyAssignments/b4faf132dc344b84ba68a441
Container Registries should be encrypted with a Customer-Managed Key (CMK)  /subscriptions/<subscriptionID>/providers/Microsoft.Authorization/policyAssignments/cce1ed4f38a147ad994ab60a

然后运行 az policy state list,以便返回特定策略 ID 下所有资源的 JSON 格式合规性状态:

az policy state list \
  --resource <policyID>

也可运行 az policy state list,以便返回特定注册表资源(例如 myregistry)的 JSON 格式合规性状态:

az policy state list \
 --resource myregistry \
 --namespace Microsoft.ContainerRegistry \
 --resource-type registries \
 --resource-group myresourcegroup

后续步骤