启用 VM 上的实时访问

可以使用 Microsoft Defender for Cloud 的实时 (JIT) 访问保护 Azure 虚拟机 (VM) 免遭未经授权的网络访问。 很多时候,防火墙包含使 VM 容易受到攻击的允许规则。 JIT 使你能够仅在需要访问时、在所需端口上以及在所需的时间段内允许访问 VM。

详细了解 JIT 的工作原理以及配置和使用 JIT 所需的权限

在本文中,你将了解如何在安全计划中包括 JIT,包括如何:

  • 从 Azure 门户或以编程方式在 VM 上启用 JIT
  • 从 Azure 门户或以编程方式请求访问启用了 JIT 的 VM
  • 审核 JIT 活动,确保 VM 得到适当的保护

可用性

方面 详细信息
发布状态: 正式发布版 (GA)
支持的 VM: 通过 Azure 资源管理器部署的 VM
通过经典部署模型部署的 VM
与 VM 在同一 VNET 上的受 Azure 防火墙保护的 VM
Azure 防火墙管理器控制的 Azure 防火墙保护的 VM
所需角色和权限: 读者、SecurityReader 或自定义角色可以查看 JIT 状态和参数。
若要为只需要请求 VM 的 JIT 访问权限的用户创建最低特权角色,请使用 Set-JitLeastPrivilegedRole 脚本
云: 由世纪互联运营的 Microsoft Azure

先决条件

  • JIT 要求在订阅上启用适用于服务器的 Microsoft Defender。

  • “读取者”角色和“安全读取者”角色都可以查看 JIT 状态和参数。

  • 如果要创建使用 JIT 的自定义角色,将需要下表中的详细信息:

    使用户能够: 要设置的权限
    配置或编辑 VM 的 JIT 策略 将这些“操作”分配给角色:
    • 在与 VM 关联的订阅或资源组的范围内:
      Microsoft.Security/locations/jitNetworkAccessPolicies/write
    • 在 VM 的订阅或资源组的范围内:
      Microsoft.Compute/virtualMachines/write
    请求 JIT 对 VM 的访问权限 将这些“操作”分配给用户:
    • Microsoft.Security/locations/jitNetworkAccessPolicies/initiate/action
    • Microsoft.Security/locations/jitNetworkAccessPolicies/*/read
    • Microsoft.Compute/virtualMachines/read
    • Microsoft.Network/networkInterfaces/*/read
    • Microsoft.Network/publicIPAddresses/read
    读取 JIT 策略 将这些“操作”分配给用户:
    • Microsoft.Security/locations/jitNetworkAccessPolicies/read
    • Microsoft.Security/locations/jitNetworkAccessPolicies/initiate/action
    • Microsoft.Security/policies/read
    • Microsoft.Security/pricings/read
    • Microsoft.Compute/virtualMachines/read
    • Microsoft.Network/*/read

注意

为了成功创建自定义 JIT 策略,策略名称以及目标 VM 名称总共不得超过 56 个字符。

通过 Microsoft Defender for Cloud 使用 JIT VM 访问

可以使用 Defender for Cloud,也可以使用自己的自定义选项以编程方式启用 JIT VM 访问,或者可以使用 Azure 虚拟机中的默认硬编码参数启用 JIT。

实时 VM 访问显示 VM 分组为:

  • 已配置 - 将 VM 配置为支持实时 VM 访问,并显示:
    • 过去七天批准的 JIT 请求数
    • 上次访问日期和时间
    • 已配置的连接详细信息
    • 上一个用户
  • 未配置 - 未启用 JIT 但可以支持 JIT 的 VM。 建议为这些 VM 启用 JIT。
  • 不支持 - VM 不支持 JIT,因为:

从 Microsoft Defender for Cloud 在 VM 上启用 JIT

Screenshot showing configuring JIT VM access in Microsoft Defender for Cloud.

从 Defender for Cloud 可以启用和配置 JIT VM 访问。

  1. 打开“工作负载保护”,在高级保护中选择“实时 VM 访问”。

  2. 在“未配置”虚拟机选项卡中,将 VM 标记为使用 JIT 进行保护,然后选择“在 VM 上启用 JIT”。

    JIT VM 访问页随即打开,列出 Defender for Cloud 建议保护的端口:

    • 22 - SSH
    • 3389 - RDP
    • 5985 - WinRM
    • 5986 - WinRM

    若要自定义 JIT 访问,请执行以下操作:

    1. 选择 添加

    2. 选择列表中的某个端口进行编辑或输入其他端口。 对于每个端口,可以设置:

      • 协议 - 批准某个请求时此端口允许的协议
      • 允许的源 IP - 批准某个请求时此端口允许的 IP 范围
      • 最大请求时间 - 可以打开特定端口的最大时间范围
    3. 选择“确定”。

  3. 若要保存端口配置,请选择“保存”。

使用 Defender for Cloud 在启用了 JIT 的 VM 上编辑 JIT 配置

可以对 VM 的实时配置进行以下修改:添加并配置要针对该 VM 进行保护的新端口,或更改与已保护的端口相关的任何其他设置。

若要编辑 VM 的现有 JIT 规则,请执行以下操作:

  1. 打开“工作负载保护”,在高级保护中选择“实时 VM 访问”。

  2. 在“已配置”虚拟机选项卡中,右键单击某个 VM 并选择“编辑”。

  3. 在“JIT VM 访问配置”中,可以编辑端口列表或选择“添加”以添加新的自定义端口。

  4. 编辑完端口后,选择“保存”。

从 Microsoft Defender for Cloud 请求访问启用了 JIT 的 VM

如果 VM 启用了 JIT,则必须请求连接到它所需的访问权限。 不管你启用 JIT 的方式如何,你都可以通过任何受支持的方式请求访问权限。

  1. 从“实时 VM 访问”页选择“已配置”选项卡。

  2. 选择要访问的 VM:

    • “连接详细信息”列中的图标指示是对网络安全组还是对防火墙启用了 JIT。 如果对二者均启用了 JIT,则只会显示防火墙图标。

    • “连接详细信息”列显示可以访问 VM 的用户和端口。

  3. 选择“请求访问权限”。 此时会打开“请求访问”窗口。

  4. 在“请求访问”下,选择要为每个 VM 打开的端口、要打开端口的源 IP 地址以及打开端口的时间范围。

  5. 选择“打开端口”。

    注意

    如果请求访问的用户位于代理后面,你可以输入该代理的 IP 地址范围。

使用 JIT VM 访问的其他方法

Azure 虚拟机

从 Azure 虚拟机对 VM 启用 JIT

可以从 Azure 门户的 Azure 虚拟机页面对 VM 启用 JIT。

提示

如果 VM 已启用 JIT,则 VM 配置页会显示已启用 JIT。 可以使用链接在 Defender for Cloud 中打开 JIT VM 访问页,以查看和更改设置。

  1. Azure 门户中,搜索并选择“虚拟机”。

  2. 选择要通过 JIT 保护的虚拟机。

  3. 在菜单中选择“配置”。

  4. 在“实时访问”下,选择“启用实时” 。

    默认情况下,VM 的实时访问使用以下设置:

    • Windows 计算机
      • RDP 端口:3389
      • 允许的最长访问时间:三小时
      • 允许的源 IP 地址:任意
    • Linux 计算机
      • SSH 端口:22
      • 允许的最长访问时间:三小时
      • 允许的源 IP 地址:任意
  5. 若要编辑任意这些值,或将更多端口添加到 JIT 配置,请使用 Microsoft Defender for Cloud 的实时访问页:

    1. 在 Defender for Cloud 的菜单中,选择“实时 VM 访问”。

    2. 在“已配置”选项卡上,右键单击要向其添加端口的 VM,然后选择“编辑”。

      Editing a JIT VM access configuration in Microsoft Defender for Cloud.

    3. 在“JIT VM 访问配置”下,可以编辑已保护的端口的现有设置,也可以添加新的自定义端口。

    4. 编辑完端口后,选择“保存”。

从 Azure 虚拟机的连接页请求访问启用了 JIT 的 VM

如果 VM 启用了 JIT,则必须请求连接到它所需的访问权限。 不管你启用 JIT 的方式如何,你都可以通过任何受支持的方式请求访问权限。

Screenshot showing jit just-in-time request.

若要请求从 Azure 虚拟机进行访问,请执行以下操作:

  1. 在 Azure 门户中,打开虚拟机页面。

  2. 选择要连接到的 VM,然后打开“连接”页。

    Azure 会查看是否已在该 VM 上启用了 JIT。

    • 如果没有为该 VM 启用 JIT,系统会提示你启用它。

    • 如果启用了 JIT,则选择“请求访问”,以便传递访问请求,其中包含已为该 VM 配置的请求 IP、时间范围和端口。

注意

批准对受 Azure 防火墙保护的 VM 的请求之后,Defender for Cloud 会为用户提供正确的连接详细信息(DNAT 表中的端口映射),用于连接到 VM。

PowerShell

使用 PowerShell 对 VM 启用 JIT

若要从 PowerShell 启用实时 VM 访问,请使用官方 Microsoft Defender for Cloud PowerShell cmdlet Set-AzJitNetworkAccessPolicy

示例 - 按照以下规则对特定 VM 启用实时 VM 访问:

  • 关闭端口 22 和 3389
  • 将每个端口的最大时间窗口设置为 3 小时,使它们能够按已批准的请求打开
  • 允许正在请求访问权限的用户控制源 IP 地址
  • 允许正在请求访问权限的用户在实时访问请求获得批准后建立一个成功的会话

以下 PowerShell 命令创建此 JIT 配置:

  1. 分配变量,以便保存 VM 的实时 VM 访问规则:

    $JitPolicy = (@{
        id="/subscriptions/SUBSCRIPTIONID/resourceGroups/RESOURCEGROUP/providers/Microsoft.Compute/virtualMachines/VMNAME";
        ports=(@{
             number=22;
             protocol="*";
             allowedSourceAddressPrefix=@("*");
             maxRequestAccessDuration="PT3H"},
             @{
             number=3389;
             protocol="*";
             allowedSourceAddressPrefix=@("*");
             maxRequestAccessDuration="PT3H"})})
    
  2. 将 VM 的实时 VM 访问规则插入数组:

    $JitPolicyArr=@($JitPolicy)
    
  3. 对所选 VM 配置实时 VM 访问规则:

    Set-AzJitNetworkAccessPolicy -Kind "Basic" -Location "LOCATION" -Name "default" -ResourceGroupName "RESOURCEGROUP" -VirtualMachine $JitPolicyArr
    

    使用 -Name 参数指定 VM。 例如,若要为两个不同的 VM(VM1 和 VM2)建立 JIT 配置,请使用 Set-AzJitNetworkAccessPolicy -Name VM1Set-AzJitNetworkAccessPolicy -Name VM2

使用 PowerShell 请求访问启用了 JIT 的 VM

在以下示例中,可以看到针对端口 22、特定 IP 地址和特定时间量对特定 VM 的实时 VM 访问请求:

在 PowerShell 中运行以下命令:

  1. 配置 VM 请求访问属性:

    $JitPolicyVm1 = (@{
        id="/subscriptions/SUBSCRIPTIONID/resourceGroups/RESOURCEGROUP/providers/Microsoft.Compute/virtualMachines/VMNAME";
        ports=(@{
           number=22;
           endTimeUtc="2020-07-15T17:00:00.3658798Z";
           allowedSourceAddressPrefix=@("IPV4ADDRESS")})})
    
  2. 在数组中插入 VM 访问请求参数:

    $JitPolicyArr=@($JitPolicyVm1)
    
  3. 发送访问请求(使用步骤 1 中的资源 ID)

    Start-AzJitNetworkAccessPolicy -ResourceId "/subscriptions/SUBSCRIPTIONID/resourceGroups/RESOURCEGROUP/providers/Microsoft.Security/locations/LOCATION/jitNetworkAccessPolicies/default" -VirtualMachine $JitPolicyArr
    

有关详细信息,请参阅 PowerShell cmdlet 文档

REST API

使用 REST API 对 VM 启用 JIT

通过 Microsoft Defender for Cloud API 可以使用实时 VM 访问功能。 使用此 API 获取有关已配置 VM 的信息、添加新的 VM、请求访问 VM,等等。

有关详细信息,请参阅 JIT 网络访问策略

使用 REST API 请求访问启用了 JIT 的 VM

通过 Microsoft Defender for Cloud API 可以使用实时 VM 访问功能。 使用此 API 获取有关已配置 VM 的信息、添加新的 VM、请求访问 VM,等等。

有关详细信息,请参阅 JIT 网络访问策略

在 Defender for Cloud 中审核 JIT 访问活动

可以使用日志搜索深入了解 VM 活动。 若要查看日志,请执行以下操作:

  1. 从“实时 VM 访问”选择“已配置”选项卡 。

  2. 对于要审核的 VM,请打开行末尾的省略号菜单。

  3. 从菜单中选择“活动日志”。

    Select just-in-time JIT activity log.

    活动日志提供了一个经筛选的视图,其中包含以前针对该 VM 进行的操作以及时间、日期和订阅。

  4. 若要下载日志信息,请选择“以 CSV 格式下载”。

后续步骤

本文介绍了如何配置和使用实时 VM 访问。 若要了解为何应使用 JIT,请阅读说明了 JIT 防御的威胁的文章: