关于 azure-bastion-jit
azure-bastion-jit 是为 Azure IaaS 虚拟机及 VMSS 管理访问提供设计指导的技能,面向需要强化管理员连接的团队。它结合 Azure Bastion 与 Defender for Cloud 的 JIT 访问,减少公网暴露和长期开放的管理端口。
主要功能
- 01选择 Bastion SKU
- 02规划 JIT 临时网络访问
- 03通过策略移除虚拟机公网 IP
- 04结合 Entra 登录和 RBAC
- 05配置会话录制与监控
适用场景
- 01将虚拟机管理改为私有连接
- 02为 RDP 或 SSH 设置限时访问
- 03设计管理员 Bastion 权限
- 04将 Bastion 与 JIT 活动接入监控
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ vinayaklatthe/ microsoft-security-skills --skill azure-bastion-jit安装后在 Claude Code 中输入/azure-bastion-jit确认已加载。
详细介绍
Azure Bastion + 即时 VM 访问
Azure Bastion(托管式浏览器/原生客户端跳板服务)与 Defender for Cloud 即时(JIT)VM 访问(为管理端口设置有时限的 NSG 允许规则)结合使用,可消除 Azure VM 最常见的两种遭入侵途径: 暴露于互联网的 RDP/SSH,以及长期开放的管理端口。
适用场景
设计或加固 Azure IaaS VM 和 VMSS 的管理访问。使用此技能进行 SKU 选择、JIT 策略制定、移除公共 IP,以及规划运维工作流。
请勿将此技能用于混合 VPN/SD-WAN 设计、以 ZTNA 替代 VPN
(entra-global-secure-access)或仅限 AKS 的访问。
Bastion SKU — 根据功能需求选择
| SKU | 功能 |
|---|---|
| Developer | 免费,临时通过浏览器连接单个 VM、单个 VNet,仅支持 RDP/SSH;不支持扩展或可共享链接 |
| Basic | 通过门户使用 RDP/SSH,支持仅限专用 IP 的 VM,单实例扩展 |
| Standard | + 原生客户端、可共享链接、基于 IP 的连接、Kerberos、Linux 文件复制、自定义端口,最多可扩展至 50 个实例 |
| Premium | + 会话录制、仅限专用网络的部署及其他管理功能 |
**经验法则:**大多数企业场景选择 Standard;需要会话录制或仅限专用网络部署时(受监管行业)选择 Premium。Developer 适用于非生产环境/沙盒中的个人使用。
方法
-
架构。 每个中心 VNet 部署一个 Bastion(如果流量隔离有要求,也可以每个分支 VNet 部署一个)。所需子网:
AzureBastionSubnet,最小为 /26。子网上的 NSG 应遵循文档中规定的允许规则——如果不包含文档中规定的允许例外,就不要写“拒绝所有来自互联网的流量”,否则 Bastion 将无法正常工作。 -
移除 VM 公共 IP。 Azure Policy:“公共 IP 地址不应与虚拟机关联”——在生产范围内将其设为 Deny。新 VM 仅使用私有 IP;管理员通过 Bastion + JIT 访问。
-
Bastion + VM 上的 Entra 登录。 配合
Microsoft Entra login for Windows/Linux VM扩展使用,让 RDP/SSH 通过 Entra 凭据进行身份验证,并在 VM 登录时应用条件访问(MFA、设备合规性、命名位置)。这是大多数仅部署 Bastion 的方案所忽略的关键环节。 -
为每个允许 RDP/SSH 访问的 VM 配置 JIT。
- 默认端口:RDP 3389、SSH 22、WinRM 5985/5986。
- 最大请求时长:3 小时。
- 来源:请求者的 IP(或 Bastion 子网,因为请求来自该子网)。
- 审批:由 RBAC 隐式授权,或为第 0 层 VM 添加手动审批步骤。
-
Bastion 连接的 RBAC。 Bastion 连接权限与 VM RBAC 并不相同。所需角色:
- Bastion、VM、VM 的 NIC 和 VNet 上的
Reader。 - 用于基于 Entra 的 VM 登录的
Virtual Machine User Login(Linux)/Virtual Machine Administrator Login。 - JIT 请求:
Microsoft.Security/locations/jitNetworkAccessPolicies/initiate/action。 按人员角色将这些权限纳入自定义角色,避免授予过多权限。
- Bastion、VM、VM 的 NIC 和 VNet 上的
-
原生客户端 + 基于 IP 的连接 + 可共享链接(Standard 及更高版本)。
- 原生客户端(
az network bastion rdp/ssh):管理员使用本地 mstsc/SSH 工具;相比浏览器标签页,体验更好。VM 登录仍会应用条件访问。 - 基于 IP 的连接:通过 ExpressRoute/VPN,让 Bastion 连接到对等互联的本地 VM。
- 可共享链接:用于承包商紧急访问的限时 URL。除非明确需要,否则请禁用;并审计其使用情况。
- 原生客户端(
-
会话录制(Premium)。将管理员会话录制为视频,并存储到 Log Analytics 工作区 / Storage。某些受监管行业有此要求;请检查保留期限和访问控制。
-
JIT 请求工作流。 为管理员编写文档:
- 打开 Defender for Cloud → JIT VM access → Request access → 端口 + 时长。
- 在时限内通过 Bastion 连接。
- NSG 规则会在到期时自动还原。
-
监控。 将 Bastion 诊断日志(BastionAuditLogs)和 JIT 活动日志事件发送到 Sentinel。检测:非工作时间来自意外 IP 的请求,以及同一主体连续快速访问多个 VM 的情况。
防护措施
- 不要在 AzureBastionSubnet 上配置拒绝所有流量的 NSG。 必须允许特定服务标记 / 端口;服务正常运行需要遵循文档中规定的规则。
- JIT 会更改 NSG 规则,不会更改 Azure Firewall / NVA 规则。 如果管理流量经过防火墙,仅靠 JIT 无法放行。应设置防火墙策略,或仅通过 Bastion 路由管理流量。
- 仅使用 Bastion 并不等于条件访问。 如果 VM 上没有 Entra 登录,虽然移除了公网暴露,但被盗的 VM 凭据仍然有效。请组合使用。
- 可共享链接会绕过发起用户的 MFA,除非同时启用 Entra VM 登录。请避免在敏感 VM 上使用。
- Premium 会话录制会带来较大的存储开销。 请规划保留期限和成本。
- 不要为了“方便”在每个分支 VNet 中都部署 Bastion。 通常通过对等互联在中心部署一个即可;每个实例的成本会不断累积。
- 通过共享 NAT IP 发起的 JIT 请求会在授权时段内为该 NAT 后所有人开放端口。请结合命名位置和条件访问使用。
- **同时配置 VM 公共 IP 和 Bastion 对等访问作为“备用方案”**会破坏安全模型。请二选一。
常见反模式
- “保留带有公共 IP 的 VM 上的堡垒主机,‘以备紧急访问’”——紧急访问是一种流程,而不是一个无人监控的开放 RDP 端口。
- “JIT 请求窗口 = 8 小时,来源 = 任意”——这相当于让互联网开放端口一个工作日。
- “没有 Entra VM 登录的 Bastion”——本地管理员密码一旦泄露,依然会导致灾难性后果。
- “通过电子邮件永久分享可共享链接”——这会变成永久后门。请设置有效时限并进行审计。
- “将所有会话录制到任何人都能读取的工作区”——录制内容会暴露特权操作和凭据。
- “每台开发 VM 都配备独立的 Bastion”——不经济且会产生过多噪声。每个中心网络配置一个即可。
- “跳过 Sentinel/日志集成”——SOC 无法看到 Bastion 会话。
- “使用 Bastion 访问 AKS API 服务器”——工具不合适;应使用专用群集 + GSA Private Access,或跳转箱 + kube-config。
示例提示词
为包含 3 个中心网络、跨多个区域且拥有 2,000 台 VM 的着陆区设计 Bastion + JIT。从自管理的 Windows 跳转主机迁移到 Bastion + Entra VM 登录 + JIT。通过 Azure Policy 移除 Linux VM 的公共 IP,并推出仅限专用网络的访问方式。在 Bastion Premium 上配置会话录制,并将录制内容保留 1 年到 Storage。构建自定义 RBAC 角色“通过 Bastion 操作 VM”,仅组合 Bastion 连接 + Entra 登录 + JIT 请求。Sentinel 检测:非工作时间的 JIT 请求、同一主体快速连续访问 VM、创建可共享链接。比较 Bastion 可共享链接与 Entra Private Access 在偶尔需要的承包商访问场景中的差异。
Microsoft Learn
- Bastion 概述:https://learn.microsoft.com/azure/bastion/bastion-overview
- SKU 和功能:https://learn.microsoft.com/azure/bastion/configuration-settings
- Bastion 子网 NSG 要求:https://learn.microsoft.com/azure/bastion/bastion-nsg
- 本机客户端连接:https://learn.microsoft.com/azure/bastion/connect-native-client-windows
- 可共享链接:https://learn.microsoft.com/azure/bastion/shareable-link
- 会话录制(Premium):https://learn.microsoft.com/azure/bastion/session-recording
- VM 即时访问: https://learn.microsoft.com/azure/defender-for-cloud/just-in-time-access-overview
- Linux VM 的 Entra 登录:https://learn.microsoft.com/entra/identity/devices/howto-vm-sign-in-azure-ad-linux
- Windows VM 的 Entra 登录:https://learn.microsoft.com/entra/identity/devices/howto-vm-sign-in-azure-ad-windows
- Azure Policy — 禁止公共 IP:https://learn.microsoft.com/azure/governance/policy/samples/built-in-policies#network