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 来获取合规性数据。 例如,在 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