使用 Azure Bastion 安全访问虚拟机

使用 Azure Bastion 安全访问虚拟机

2025年4月1日

本文旨在指导安全分析师、IT 管理员和系统工程师实施和配置 Azure Bastion,以安全访问 Azure 中的虚拟机 (VM)。在云环境中,虚拟机访问的安全性对于保护资源和数据至关重要。传统上,通过 RDP(远程桌面协议)或 SSH(安全外壳)访问虚拟机需要将公共端口暴露到互联网,这显着增加了攻击面。 Azure Bastion 提供了强大且安全的解决方案,无需 VPN 或公共 IP [1]即可提供安全访问,从而消除这种暴露。

简介

将基础设施迁移到云在可扩展性和灵活性方面带来了许多好处。然而,安全仍然是首要问题。对虚拟机的访问是一个关键点,因为它们通常是许多应用程序和服务的核心。将 RDP (3389) 或 SSH (22) 端口直接暴露到互联网是一种不明智的安全做法,因为这使它们很容易成为暴力攻击和其他漏洞利用的目标 [2]。

Azure Bastion 是在虚拟网络中预配的完全托管的平台即服务 (PaaS) 服务。它允许您使用 RDP 和 SSH 直接从 Azure 门户连接到虚拟网络中的虚拟机,而无需 VM 上的公共 IP、VM 上安装的代理或本地计算机上的特殊客户端/配置。 Bastion 充当安全代理,通过安全 TLS(传输层安全)连接将 RDP/SSH 流量路由到用户浏览器,从而保护虚拟机免遭直接暴露于互联网 [3]。

本操作指南将介绍先决条件、如何预配和配置 Azure Bastion、如何使用 RDP 和 SSH 连接到 Windows 和 Linux VM、如何管理会话以及如何测试和验证安全访问。将提供分步说明、实际示例和简洁的解释,以便读者可以实现、测试和验证这些功能。此外,还将讨论安全提示、合规性检查和最佳实践,以确保以自主、专业和可靠的方式安全、高效地远程访问虚拟机。

为什么 Azure Bastion 对于 VM 访问至关重要?

  • 增强的安全性:消除了虚拟机上对公共 IP 的需求,保护它们免受来自互联网的直接攻击。通过浏览器通过 TLS 进行访问。
  • 简化访问:直接从 Azure 门户连接到 VM,无需本机 RDP/SSH 客户端或 VPN。
  • 零信任:符合零信任原则,确保无论用户位于何处,访问始终经过验证和授权。
  • 审核和监控:允许您监控和管理会话,并可选择会话记录(在高级 SKU 上提供)以用于审核和合规性目的。
  • 降低成本和复杂性:作为完全托管的 PaaS 服务,它无需管理您自己的跳线盒或复杂的 VPN。
  • 端口扫描保护:虚拟机没有公共 IP,这使得它们对互联网上的端口扫描仪和恶意机器人不可见。

先决条件

要实施 Azure Bastion,您将需要以下项目:

  1. 活动 Azure 订阅:用于创建和管理资源的 Azure 订阅。
  2. 管理访问权限:在虚拟机所在的订阅或资源组上具有“所有者”或“贡献者”角色的帐户。
  3. Azure 虚拟网络 (VNet):包含要连接到的 VM 的现有虚拟网络。
  4. Azure Bastion 的专用子网:VNet 中的子网,名称为“AzureBastionSubnet”,前缀至少为“/27”(例如:“10.0.2.0/27”)。该子网是 Bastion 专有的,不能用于其他资源 [4]。
  5. 虚拟机 (VM):要连接到的同一 VNet(或对等 VNet)中的现有 Windows 或 Linux VM。

分步:配置 Azure Bastion

让我们配置 Azure Bastion 并使用它连接到 VM。

1. 创建“AzureBastionSubnet”子网

之前并部署Bastion,需要创建专用子网。

  1. 打开浏览器并导航到 Azure 门户:“https://portal.azure.com”。
  2. 使用具有必要权限的帐户登录。
  3. 在顶部搜索字段中,输入“虚拟网络”并从结果中选择它。
  4. 选择您的虚拟机所在的虚拟网络
  5. 在左侧导航窗格中的“设置”下,选择“子网”。
  6. 单击“+子网”。

  7. 添加子网

    • 名称:输入“AzureBastionSubnet”(此名称是必需的)。
    • 子网地址范围:提供前缀至少为“/27”的地址范围(例如“10.0.2.0/27”)。
    • 将其他设置保留为默认值。
  8. 单击“保存”。

    • 说明AzureBastionSubnet 是将部署 Azure Bastion 服务的位置。名称必须准确为“AzureBastionSubnet”,这样才能正确配置服务,这一点至关重要。

2. 配置 Azure Bastion

现在子网已准备就绪,我们可以部署 Bastion 服务了。

  1. 在 Azure 门户的顶部搜索字段中,输入“Bastion”并从结果中选择它。
  2. 单击“+ 创建”。

  3. 基础知识

    • 订阅:选择您的订阅。
    • 资源组:选择与您的 VNet 相同的资源组。
    • 名称:为您的 Bastion 实例命名(例如“myBastionHost”)。
    • 区域:选择与您的 VNet 相同的区域。
    • :选择“基本”(适用于基本 RDP/SSH)或“标准”(适用于会话记录、链接共享等附加功能)。对于本指南,我们将使用“Basic”。
  4. 虚拟网络

    • 虚拟网络:选择在其中创建“AzureBastionSubnet”的 VNet。
    • 子网:将自动选择“AzureBastionSubnet”。
    • 公共IP地址:点击“新建”。为公共 IP 命名(例如“myBastionPublicIP”)。此公共 IP 用于堡垒服务,不会暴露给您的虚拟机。
  5. 单击“查看 + 创建”,然后单击“创建”。

    • 说明:Azure Bastion 预配可能需要 5 到 10 分钟。部署后,即可使用它来访问您的虚拟机。

3.通过 RDP 连接到 Windows 虚拟机

让我们在不公开其 RDP 端口的情况下连接到 Windows 虚拟机。

  1. 在 Azure 门户中,导航到您的 Windows VM
  2. 在左侧导航窗格中,选择“连接”。
  3. 选择堡垒
  4. 输入您的 Windows VM 用户凭据和密码。
  5. 单击“连接”。

    • 预期操作:将打开一个新的浏览器选项卡,您将看到 Windows VM 桌面。连接完全基于浏览器中的 HTML5。

4. 通过 SSH 连接到 Linux 虚拟机

让我们在不公开 SSH 端口的情况下连接到 Linux VM。

  1. 在 Azure 门户中,导航到您的 Linux VM
  2. 在左侧导航窗格中,选择“连接”。
  3. 选择堡垒
  4. 选择“身份验证类型”:“用户名和密码”或“SSH 私钥”。
    • 如果是“用户名和密码”,请输入您的 Linux VM 凭据。
    • 如果是“SSH Private Key”,请上传您的私钥文件(“.pem”或“.ppk”)。
  5. 单击“连接”。

    • 预期操作:将打开一个新的浏览器选项卡,您将看到 Linux VM 的终端,允许您执行 SSH 命令。

验证和测试

验证通过 Azure Bastion 的访问是否按预期工作以及虚拟机是否无法通过其他方式访问至关重要。

1. 检查堡垒连接

  1. 场景:尝试使用 Azure Bastion 访问 Windows 和 Linux VM,按照上面的步骤 3 和 4。
  2. 预期操作:应通过浏览器成功建立 RDP 和 SSH 连接。
  3. 验证
    • 确认您可以与Windows虚拟机桌面交互并在Linux虚拟机终端中执行命令。

2. 检查虚拟机的直接不可访问性

  1. 场景:尝试使用 RDP 或 SSH 客户端直接从 Internet 访问 VM,指向 VM 的公共 IP(如果有)或私有 IP(如果您位于 VNet 外部)。
  2. 预期操作:直接连接尝试应该会失败,因为 RDP/SSH 端口不应公开暴露。
  3. 验证: *如果您的 VM 具有公共 IP,请检查与 VM 的网络接口或 VM 子网关联的网络安全组 (NSG) 规则。确保端口 3389 (RDP) 和 22 (SSH) 未对“任何”或“Internet”开放。
    • 理想情况下,通过 Bastion 访问的虚拟机不应具有关联的公共 IP。

3.堡垒会话监控(标准 SKU)

如果您使用标准 SKU 配置 Bastion,则可以监控活动会话。

  1. 在 Azure 门户中,导航到 Azure Bastion 资源 (myBastionHost)。
  2. 在左侧导航窗格中的“监控”下,选择“会话”。
  3. 您将看到活动 RDP 和 SSH 会话的列表,包括用户、源 IP 和目标 VM。

安全提示和最佳实践

  • 从 VM 中删除公共 IP:配置 Azure Bastion 后,从 VM 中删除所有公共 IP。这是堡垒的主要安全优势。
  • 适当配置 NSG:确保正确配置 VM 子网和“AzureBastionSubnet”的网络安全组 (NSG),以仅允许必要的流量。 Bastion 需要访问 VM 的专用 RDP/SSH 端口,但 VM 不需要公共入站访问。
  • 最小权限原则:仅分配必要的权限,以便用户可以通过 Bastion 连接到虚拟机。 Azure RBAC 可用于控制谁可以使用 Bastion。
  • 强身份验证:始终对您的虚拟机凭据使用强身份验证。与 Azure AD 结合进行身份验证,并在可能的情况下与条件访问结合使用,以要求 MFA 来访问 Azure 门户,从而控制对 Bastion 的访问。
  • 会话记录(高级 SKU):对于需要严格合规性和审核的环境,请考虑使用 Azure Bastion 高级 SKU 来记录 RDP 和 SSH 会话。这提供了虚拟机上所做操作的可视化记录。
  • 日志监控:监控堡垒的 Azure 活动日志和 VM 的安全日志,以检测可疑活动或未经授权的访问尝试。
  • 更新和补丁:使用最新的安全补丁让您的虚拟机保持最新状态,以缓解内部漏洞。

常见故障排除

  • 尝试连接到虚拟机时看不到 Bastion 选项
    • 验证是否已在与 VM 相同的 VNet(或对等 VNet)中预配 Azure Bastion。
    • 确保“AzureBastionSubnet”存在并且具有正确的地址前缀(“/27”或更大)。
    • 检查 Azure 门户中的 Bastion 是否处于“正在运行”状态。
  • 通过 Bastion 的 RDP/SSH 连接错误
    • 凭据无效:验证 VM 的用户和密码凭据(或 SSH 密钥)是否正确。
    • NSG 问题:确认 VM 子网的 NSG 允许“AzureBastionSubnet”的端口 3389 (RDP) 或 22 (SSH) 上的入站流量。
    • 虚拟机防火墙:检查虚拟机的内部防火墙是否阻止 RDP/SSH 连接。
    • RDP/SSH 服务未运行:确保 RDP(适用于 Windows)或 SSH(适用于 Linux)服务正在 VM 上运行。
  • 性能缓慢或断开连接
    • 检查您的互联网连接带宽。 Bastion 将会话视频传输到您的浏览器。
    • 考虑使用 Bastion 的标准或高级 SKU,它们提供更好的性能和附加功能。
    • 检查目标虚拟机上的 CPU 或内存利用率是否较高,这可能会影响会话性能。
  • 我无法通过 Bastion 访问内部虚拟机资源
    • Azure Bastion 提供与 VM 的连接。连接到 VM 后,对 VNet 其他内部资源的访问将取决于 VM 自身的网络配置和适用的 NSG 规则。

结论

Azure Bastion 是云环境安全的重要组件,提供安全且简化的虚拟机访问方法。通过消除 RDP/SSH 端口直接暴露于互联网的情况,它显着减少了攻击面并增强了整体安全态势。仔细实施、与安全最佳实践集成以及持续监控对于最大限度地发挥 Bastion 的优势至关重要。有了这个克通过这种实践方法,安全专业人员和 IT 管理员将能够配置、验证和管理 Azure Bastion,确保对其虚拟机的访问始终安全且合规。


参考资料:

[1] 微软学习。 什么是蔚蓝堡垒?。位于:https://learn.microsoft.com/pt-br/azure/bastion/bastion-overview [2] 微软学习。 使用 Azure Bastion 实现对 Azure 中虚拟机的安全远程访问的设计和规划注意事项。网址:https://learn.microsoft.com/pt-br/azure/cloud-adoption-framework/ready/azure-best-practices/plan-for-virtual-machine-remote-access [3] 微软学习。 使用 RDP - Azure Bastion 连接到 Windows 虚拟机。位于:https://learn.microsoft.com/pt-br/azure/bastion/bastion-connect-vm-rdp-windows [4] 微软学习。 配置堡垒主机。位于:https://learn.microsoft.com/pt-br/azure/bastion/tutorial-create-host-portal [5] 微软学习。 使用 SSH 连接到 Linux VM - Azure Bastion。位于:https://learn.microsoft.com/pt-br/azure/bastion/bastion-connect-vm-ssh-linux [6] 微软学习。 Azure Bastion 会话监控和管理。位于:https://learn.microsoft.com/pt-br/azure/bastion/session-monitoring [7] 微软学习。 配置堡垒会话录制。位于:https://learn.microsoft.com/pt-br/azure/bastion/session-recording