Compartilhar via

Azure Arc 启用服务器的扩展安全性

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

扩展基础知识

Azure Arc启用的服务器的虚拟机(VM)扩展是用于启用其他功能的可选加载项,例如监控、补丁管理和脚本执行。 扩展由Azure发布,并从Azure Marketplace中选择第三方,并将其存储在Azure托管存储帐户中。 在发布过程中,所有扩展都会经过恶意软件扫描。 支持 Azure Arc 的服务器所支持的扩展与可用于 Azure VM 的扩展相同,可确保在操作环境中保持一致性。

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

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

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

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

脚本执行

扩展管理器可用于在使用自定义脚本扩展或运行命令的计算机上运行脚本。 默认情况下,这些脚本在扩展管理器的用户上下文(Windows上的本地系统或 Linux 上的根系统)中运行,这意味着这些脚本对计算机的访问权限不受限制。 如果不打算使用这些功能,则可以使用 允许列表或阻止列表阻止这些功能。 例如,除非计划使用自定义脚本扩展执行远程代码,否则应禁用其使用,因为攻击者可以使用它来远程执行部署恶意代码的命令。

本地代理安全控制

可以选择限制可在服务器上安装的扩展功能,并禁用来宾配置功能。 在将服务器连接到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"

使用其发布者和类型指定扩展,用正斜杠 / 分隔。 请参阅文档中 最常见的扩展 的详细信息。

可以在 portalAzure PowerShellAzure CLI 中列出服务器上已安装的 VM 扩展。

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

操作 在允许列表中 在块列表中 在允许列表和阻止列表中 不在任何列表中,但已配置允许列表
安装扩展 允许 已阻止 已阻止 已阻止
更新(重新配置)扩展 允许 已阻止 已阻止 已阻止
升级插件 允许 已阻止 已阻止 已阻止
删除扩展 允许 允许 允许 允许

重要

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

允许列表值 Allow/None 指示扩展管理器运行,但不允许安装任何扩展。 建议在使用 Azure Arc 以获取 Windows Server 2012 扩展安全更新 (ESU) 的情况下选择此值,并不计划使用其他扩展。

azcmagent config set extensions.allowlist "Allow/None"

Azure Policy

限制可安装的扩展的另一个选项是使用 Azure Policy。 策略具有在云中可配置的优势,因此,如果需要更改已批准的扩展列表,则不需要对每个单独的服务器进行更改。 但是,任何有权限修改策略分配的人都可以替代或去除此保护。 如果选择使用Azure Policy来限制扩展,请确保查看组织中哪些帐户有权编辑策略分配,以及相应的更改控制措施已到位。

代理监视模式

默认情况下,Connected Machine 代理以 full 模式运行,该模式允许安装和使用所有扩展(除非受允许列表、阻止列表或Azure Policy限制)。 为监视和安全方案配置本地安全控制的一种简单方法是为 Connected Machine 代理启用 监视模式

当代理处于监视模式时,只能部署与监视和安全相关的扩展,例如Azure Monitor代理和Microsoft Defender for Cloud。 代理会阻止任何可能更改系统配置或运行任意脚本的扩展,并禁用来宾配置策略代理程序。

随着新的扩展可用,Azure更新监视模式允许列表。 可以通过运行 azcmagent config list来查看允许扩展的当前列表。

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

azcmagent config set config.mode monitor

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

azcmagent config list

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

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

azcmagent config set config.mode full

锁定设备最佳实践

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

  • 尽可能对扩展使用允许列表,而不是阻止列表。
  • 除非出于特定目的需要自定义脚本扩展,否则不允许使用自定义脚本扩展。
  • 禁用来宾配置,以防止使用可能会更改代理配置的自定义来宾配置策略。

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

通常使用Azure Arc通过Azure Monitor和Microsoft Sentinel监视服务器,并使用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

监视和安全性

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

禁用扩展管理器

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

azcmagent config set extensions.enabled false

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