使用 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-networks 和 https://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-endpoints 和 https://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-networks 和 https://docs.azure.cn/container-registry/container-registry-private-link 了解详细信息。 | Audit、Deny、Disabled | 1.0.0 |
创建策略分配
- 使用 Azure 门户、Azure CLI、资源管理器模板 或 Azure Policy SDK 创建策略分配。
- 将策略分配的作用域限定为资源组、订阅或 Azure 管理组。 容器注册表策略分配适用于该作用域内现有的和新的容器注册表。
- 可以随时启用或禁用策略实施功能。
注意
在创建或更新某个策略分配后,需要花费一些时间,该分配才会评估定义范围中的资源。 请查看有关策略评估触发器的信息。
查看策略合规性
可以使用 Azure 门户、Azure 命令行工具或 Azure Policy SDK 来访问策略分配生成的合规性信息。 有关详细信息,请参阅获取 Azure 资源的合规性数据。
有多种可能的原因会导致资源不合规。 若要确定原因或查找导致问题的变更,请参阅确定不合规情况。
门户中的策略合规性:
选择“所有服务” ,然后搜索“策略”。
选择“合规性”。
将筛选器用于限制合规性状态,或用于搜索策略。
选择一个策略来查看聚合合规性详细信息和事件。 然后,根据需要选择一个适用于资源合规性的特定注册表。
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