扩展安全性

本文介绍已启用 Azure Arc 的服务器的 VM 扩展基础知识,并详细说明如何自定义扩展设置。

扩展基础知识

已启用 Azure Arc 的服务器的 VM 扩展是可选的加载项,可以实现其他功能,例如监视、修补程序管理和脚本执行。 扩展由 Azure 发布,并从 Azure 市场中选择第三方,并存储在 Azure 托管存储帐户中。 在发布过程中,所有扩展都会经过恶意软件扫描。 已启用 Azure Arc 的服务器的扩展与 Azure VM 可用的扩展相同,从而确保了操作环境的一致性。

除非已配置专用终结点,否则在安装或升级时会直接从 Azure 存储 (*.blob.core.chinacloudapi.cn) 下载扩展。 存储帐户会定期更改,无法提前预测。 当使用专用终结点时,扩展将通过 Azure Arc 服务的区域 URL 进行代理。

经过数字签名的目录文件将与扩展包分开下载,用于在扩展管理器打开或执行扩展包之前验证每个扩展的完整性。 如果下载的扩展 ZIP 文件与目录文件中的内容不匹配,则扩展操作将中止。

扩展可能采用设置来自定义或配置安装,例如代理 URL 或 API 密钥以将监视代理连接到其云服务。 扩展设置分为两种类型:常规设置和受保护的设置。 受保护的设置不会保留在 Azure 中,并在本地计算机上进行静态加密。

所有扩展操作均通过 API 调用、CLI、PowerShell 或门户操作源自 Azure。 这种设计可确保在服务器上安装、更新或升级扩展的任何操作都会记录在 Azure 活动日志中。 Azure Connected Machine 代理确实允许在本地删除扩展以进行故障排除和清理。 但是,如果在本地删除了扩展,而服务仍希望计算机安装该扩展,则扩展管理器下次与 Azure 同步时将重新安装该扩展。

脚本执行

扩展管理器可用于在使用自定义脚本扩展或运行命令的计算机上运行脚本。 默认情况下,这些脚本将在扩展管理器的用户上下文(Windows 上的本地系统或 Linux 上的根)中运行,这意味着这些脚本可以不受限制地访问计算机。 如果你不打算使用这些功能,可以使用允许列表或阻止列表来阻止它们。 下一部分提供了一个示例。

本地代理安全控制

从代理版本 1.16 开始,你可以选择性地限制可安装在服务器上的扩展和禁用来宾配置。 在将服务器连接到 Azure 以实现单个目的(例如收集事件日志)时,这些控件非常有用,无需允许在服务器上使用其他管理功能。

这些安全控制只能通过在服务器本身上运行命令进行配置,且不能从 Azure 进行修改。 在使用 Azure Arc 启用远程管理方案时,此方法将按照服务器管理员的原有意图行事,但这也意味着,今后更改设置会更困难。 此功能适用于敏感服务器(例如 Active Directory 域控制器、处理付款数据的服务器和受严格更改控制措施约束的服务器)。 在大多数其他情况下,无需修改这些设置。

允许列表和阻止列表

Azure Connected Machine 代理支持允许列表和阻止列表,以限制可在计算机上安装哪些扩展。 允许列表是排他性的,这意味着只能安装列表中包含的特定扩展。 阻止列表是排他性的,这意味着可以安装除这些扩展之外的任何扩展。 允许列表优先于阻止列表,因为它们本质上会阻止将来推出的任何新扩展。 允许列表和阻止列表是根据每个服务器在本地配置的。 这可以确保没有任何人(甚至包括 Azure 中具有所有者或全局管理员权限的用户)可以通过尝试安装未经授权的扩展来替代安全规则。 如果有人尝试安装未经授权的扩展,扩展管理器将拒绝安装,并将扩展安装标记为失败并向 Azure 报告。 可以在代理安装后的任何时间配置允许列表和阻止列表,包括在代理连接到 Azure 之前。

如果代理上未配置允许列表或阻止列表,则允许所有扩展。

最安全的选项是显式允许你希望安装的扩展。 将自动阻止不在允许列表中的任何扩展。 若要将 Azure Connected Machine 代理配置为仅允许适用于 Linux 的 Azure Monitor 代理,请在每台服务器上运行以下命令:

azcmagent config set extensions.allowlist "Microsoft.Azure.Monitor/AzureMonitorLinuxAgent"

下面是一个示例阻止列表,它会阻止所有具有运行任意脚本功能的扩展:

azcmagent config set extensions.blocklist "Microsoft.Cplat.Core/RunCommandHandlerWindows, Microsoft.Cplat.Core/RunCommandHandlerLinux,Microsoft.Compute/CustomScriptExtension,Microsoft.Azure.Extensions/CustomScript,Microsoft.Azure.Automation.HybridWorker/HybridWorkerForWindows,Microsoft.Azure.Automation.HybridWorkerForLinux,Microsoft.EnterpriseCloud.Monitoring/MicrosoftMonitoringAgent, Microsoft.EnterpriseCloud.Monitoring/OMSAgentForLinux"

使用其发布者和类型指定扩展,用正斜杠 / 分隔。 查看文档中的最常见扩展列表,或者在门户Azure PowerShellAzure CLI 中列出服务器上已安装的 VM 扩展。

表格描述了针对配置了允许列表或阻止列表的代理执行扩展操作时的行为。

操作 在允许列表中 在阻止列表中 同时在允许列表和阻止列表中 不在任一列表中,但配置了允许列表
安装扩展 允许 已阻止 已阻止 已阻止
更新(重新配置)扩展 允许 已阻止 已阻止 已阻止
升级扩展 允许 已阻止 已阻止 已阻止
删除扩展 允许 允许 允许 允许

重要

如果在配置允许列表或阻止列表之前已在服务器上安装扩展,不会自动删除该扩展。 你负责从 Azure 中删除扩展,以完全将其从计算机中删除。 始终接受删除请求以适应这种情况。 删除后,允许列表和阻止列表将确定是否允许将来的安装尝试。

从代理版本 1.35 开始,有一个特殊的允许列表值 Allow/None,它指示扩展管理器运行,但不允许安装任何扩展。 使用 Azure Arc 传递 Windows Server 2012 扩展安全更新 (ESU) 而不打算使用任何其他扩展时,建议使用此配置。

azcmagent config set extensions.allowlist "Allow/None"

Azure 策略还可用于限制可以安装哪些扩展。 Azure Policy 的优势在于可以在云中配置,如果需要更改已批准扩展的列表,它不需要在每个服务器上进行更改。 但是,任何有权限修改策略分配的人都可以替代或去除此保护。 如果选择使用 Azure 策略来限制扩展,请务必检查组织中哪些帐户有权编辑策略分配,并且已采取适当的变更控制措施。

锁定计算机最佳做法

使用减少的功能集配置 Azure Connected Machine 代理时,请务必考虑某人可用于删除这些限制并实施适当控制的机制。 能够在服务器上以管理员或 root 用户身份运行命令的任何人都可以更改 Azure Connected Machine 代理配置。 扩展和来宾配置策略在服务器上的特权上下文中执行,因此,可能无法更改代理配置。 如果你应用本地代理安全控制来锁定代理,Azure 建议采用以下最佳做法,以确保只有本地服务器管理员能够更新代理配置:

  • 尽可能对扩展使用允许列表而不是阻止列表。
  • 不要在扩展允许列表中包含自定义脚本扩展,以防止执行可能会更改代理配置的任意脚本。
  • 禁用来宾配置,以防止使用可能会更改代理配置的自定义来宾配置策略。

监视和安全方案的示例配置

通常使用 Azure Monitor 和 Microsoft Sentinel 通过 Azure Arc 监视服务器,并使用 Microsoft Defender for Cloud 来保护服务器。 本部分包含有关如何锁定代理以仅支持监视和安全方案的示例。

仅限 Azure Monitor 代理

在 Windows 服务器上,在权限提升的命令控制台中运行以下命令:

azcmagent config set extensions.allowlist "Microsoft.Azure.Monitor/AzureMonitorWindowsAgent"
azcmagent config set guestconfiguration.enabled false

在 Linux 服务器上运行以下命令:

sudo azcmagent config set extensions.allowlist "Microsoft.Azure.Monitor/AzureMonitorLinuxAgent"
sudo azcmagent config set guestconfiguration.enabled false

仅限 Log Analytics 和依赖项 (Azure Monitor VM Insights)

此配置适用于旧版 Log Analytics 代理和依赖项代理。

在 Windows 服务器上,在权限提升的控制台中运行以下命令:

azcmagent config set extensions.allowlist "Microsoft.EnterpriseCloud.Monitoring/MicrosoftMonitoringAgent,Microsoft.Azure.Monitoring.DependencyAgent/DependencyAgentWindows"
azcmagent config set guestconfiguration.enabled false

在 Linux 服务器上运行以下命令:

sudo azcmagent config set extensions.allowlist "Microsoft.EnterpriseCloud.Monitoring/OMSAgentForLinux,Microsoft.Azure.Monitoring.DependencyAgent/DependencyAgentLinux"
sudo azcmagent config set guestconfiguration.enabled false

监视和安全性

Microsoft Defender for Cloud 在服务器上部署扩展,以识别服务器上易受攻击的软件,并启用 Microsoft Defender for Endpoint(如果已配置)。 Microsoft Defender for Cloud 还使用来宾配置来实现其合规性功能。 由于可以使用自定义来宾配置分配来消除代理限制,因此你应该仔细评估是否需要合规性功能,从而确定是否需要在计算机上启用来宾配置。

在 Windows 服务器上,在权限提升的命令控制台中运行以下命令:

azcmagent config set extensions.allowlist "Microsoft.EnterpriseCloud.Monitoring/MicrosoftMonitoringAgent,Qualys/WindowsAgent.AzureSecurityCenter,Microsoft.Azure.AzureDefenderForServers/MDE.Windows,Microsoft.Azure.AzureDefenderForSQL/AdvancedThreatProtection.Windows"
azcmagent config set guestconfiguration.enabled true

在 Linux 服务器上运行以下命令:

sudo azcmagent config set extensions.allowlist "Microsoft.EnterpriseCloud.Monitoring/OMSAgentForLinux,Qualys/LinuxAgent.AzureSecurityCenter,Microsoft.Azure.AzureDefenderForServers/MDE.Linux"
sudo azcmagent config set guestconfiguration.enabled true

代理模式

为监视和安全方案配置本地安全控制的更简单方法是使用代理版本 1.18 及更高版本的监视模式。 模式是 Microsoft 维护的扩展允许列表和来宾配置代理的预定义配置。 随着新的扩展可用于启用监视方案,Azure 会根据需要更新允许列表和代理配置,以包括或排除新功能。

有两种模式可供选择:

  1. 完整 - 默认模式。 这允许所有代理功能。
  2. 监视 - 禁用来宾配置策略代理的受限模式,仅允许使用与监视和安全相关的扩展。

若要启用监视模式,请运行以下命令:

azcmagent config set config.mode monitor

可以使用以下命令检查代理的当前模式和允许的扩展:

azcmagent config list

在监视模式下,不能修改扩展允许列表或阻止列表。 如果需要更改任一列表,请将代理更改回完整模式,并指定自己的允许列表和阻止列表。

若要将代理更改回完整模式,请运行以下命令:

azcmagent config set config.mode full

禁用扩展管理器

如果不需要将扩展与 Azure Arc 配合使用,也可以完全禁用扩展管理器。 可以使用以下命令禁用扩展管理器(在每台计算机上本地运行):

azcmagent config set extensions.enabled false

禁用扩展管理器不会删除服务器上已安装的任何扩展。 托管在其自己的 Windows 或 Linux 服务(如 Log Analytics Agent)中的扩展可能会继续运行,即使禁用扩展管理器也是如此。 扩展管理器本身托管的其他扩展(如 Azure Monitor Agent)在禁用扩展管理器时不会运行。 在禁用扩展管理器之前,应删除所有扩展,以确保不会有任何扩展在服务器上继续运行。