你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

已启用 Azure Arc 的服务器安全概述

本文介绍在企业中部署已启用 Azure Arc 的服务器之前应评估的安全配置和注意事项。

标识和访问控制

Azure 基于角色的访问控制用于控制哪些帐户可以查看和管理已启用 Azure Arc 的服务器。 在 Azure 门户中的访问控制 (IAM) 页上,可验证谁有权访问已启用 Azure Arc 的服务器。

Azure Arc-enabled server access control

授予了对资源的参与者角色或管理员角色访问权限的用户和应用程序可以对资源进行更改,包括在计算机上部署或删除扩展。 扩展可以包含在特权上下文中运行的任意脚本,因此请考虑将 Azure 资源上的任何参与者作为服务器的间接管理员。

Azure Connected Machine Onboarding 角色可用于进行大规模加入,只能在 Azure 中读取或创建新的已启用 Azure Arc 的服务器。 它不能用于删除已注册的服务器或用于管理扩展。 最佳做法是,建议仅将此角色分配给用于大规模载入计算机的 Microsoft Entra 服务主体。

如果用户是 Azure Connected Machine 资源管理员角色的成员,则可以读取、修改、重新加入和删除计算机。 此角色旨在支持对已启用 Azure Arc 的服务器进行管理,但不支持对资源组或订阅中的其他资源进行管理。

安全性和权限

若要在 Windows 上管理 Azure Connected Machine Agent (azcmagent),用户帐户必须是本地管理员组的成员。 在 Linux 上,你必须具有根访问权限。

Azure Connected Machine 代理由三个服务组成,这些服务在计算机上运行。

  • Hybrid Instance Metadata Service (HIMDS) 负责 Arc 的所有核心功能。这包括向 Azure 发送检测信号,为其他应用公开本地实例元数据服务,以了解计算机的 Azure 资源 ID,并检索 Microsoft Entra 令牌以便对其他 Azure 服务进行身份验证。 此服务在 Windows 上作为无特权虚拟服务帐户 (NT SERVICE\himds) 运行,在 Linux 上作为“himds”用户运行。 虚拟服务帐户需要 Windows 上的“作为服务登录”权限。

  • 来宾配置服务 (GCService) 负责评估计算机上的 Azure Policy。

  • 来宾配置扩展服务 (ExtensionService) 负责在计算机上安装、升级和删除扩展(代理、脚本或其他软件)。

来宾配置和扩展服务在 Windows 上作为本地系统运行,在 Linux 上作为根运行。

本地代理安全控制

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

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

扩展允许列表和阻止列表

若要限制可在服务器上安装的扩展,可以配置要在服务器上允许和阻止的扩展列表。 扩展管理器根据允许列表和阻止列表评估安装、更新或升级扩展的所有请求,以确定该扩展是否可以安装在服务器上。 始终允许删除请求。

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

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

可以通过将一个或多个扩展添加到阻止列表来阻止它们。 如果允许列表和阻止列表中都存在扩展,则会阻止该扩展。 若要阻止适用于 Linux 的自定义脚本扩展,请运行以下命令:

azcmagent config set extensions.blocklist "Microsoft.Azure.Extensions/CustomScript"

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

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

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

重要

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

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

azcmagent config set extensions.allowlist "Allow/None"

启用或禁用来宾配置

使用 Azure Policy 的来宾配置功能,可以从 Azure 审核和配置服务器上的设置。 如果你不想要允许此功能,可以通过运行以下命令禁止来宾配置在服务器上运行:

azcmagent config set guestconfiguration.enabled false

禁用来宾配置后,分配给 Azure 中的计算机的任何来宾配置策略将显示为不符合要求。 如果不想看到这些计算机报告为不符合,请考虑为这些计算机创建豁免 ,或者更改策略分配的范围

启用或禁用扩展管理器

扩展管理器负责在服务器上安装、更新和删除 VM 扩展。 可以禁用扩展管理器以避免在服务器上管理任何扩展,但我们建议改用允许列表和阻止列表进行更精细的控制。

azcmagent config set extensions.enabled false

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

锁定计算机最佳做法

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

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

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

通常使用 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 维护的扩展允许列表和来宾配置代理的预定义配置。 随着新的扩展可用于启用监视方案,Microsoft 会根据需要更新允许列表和代理配置,以包括或排除新功能。

有两种模式可供选择:

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

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

azcmagent config set config.mode monitor

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

azcmagent config list

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

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

azcmagent config set config.mode full

将托管标识用于已启用 Azure Arc 的服务器

默认情况下,Arc 使用的 Microsoft Entra 系统分配的标识仅可用于在 Azure 中更新已启用 Azure Arc 的服务器的状态。 例如,最后见到的检测信号的状态。 如果服务器上的应用程序使用系统分配的标识来访问其他 Azure 服务,则可以根据需要向该标识分配其他角色。 若要详细了解如何配置用于访问 Azure 资源的系统分配的托管标识,请参阅使用已启用 Azure Arc 的服务器对 Azure 资源进行身份验证

尽管计算机上运行的任何应用程序都可以访问 Hybrid Instance Metadata Service,但只有经过授权的应用程序才能为系统分配的标识请求 Microsoft Entra 令牌。 第一次尝试访问令牌 URI 时,服务会在文件系统上仅受信任的调用方可以读取的位置中生成随机生成的加密 blob。 然后调用方必须读取文件(证明其具有适当的权限),然后使用授权标头中的文件内容重试请求,以成功检索 Microsoft Entra 令牌。

  • 在 Windows 上,调用方必须是本地管理员组或混合代理扩展应用程序组的成员才能读取 blob。

  • 在 Linux 上,调用方必须是 himds 组的成员才能读取 blob。

若要详细了解如何在已启用 Arc 的服务器上使用托管标识来验证和访问 Azure 资源,请观看以下视频。

使用磁盘加密

Azure Connected Machine 代理使用公钥身份验证与 Azure 服务进行通信。 将服务器加入 Azure Arc 后,私钥将保存到磁盘,并在代理与 Azure 通信时使用。 如果被盗,则可以在另一台服务器上使用私钥与服务进行通信,让该服务器充当原始服务器。 这包括获取对系统分配的标识以及标识有权访问的任何资源的访问权限。 私钥文件受到保护,只允许 himds 帐户访问读取它。 为了防止脱机攻击,我们强烈建议在服务器的操作系统卷上使用完整磁盘加密(例如 BitLocker、dm-crypt 等)。

后续步骤

  • 在多台混合计算机中评估或启用已启用了 Azure Arc 的服务器之前,请先查看连接的计算机代理概述,以了解要求、有关代理的技术详细信息以及部署方法。

  • 查看规划和部署指南,以便对按任意规模部署启用了 Azure Arc 的服务器进行规划,并实现集中管理和监视。