Check ID: network_bastion_host_exists
Provider: Azure
Service: network
Severity: MEDIUM
Categories: internet-exposed
Resource type: microsoft.network/bastionhosts

What this check verifies

Azure subscription contains an Azure Bastion host for secure RDP/SSH brokering over TLS on 443/TCP to virtual machines using private IPs. The assessment identifies whether such a bastion is available.

Risk

Absent Bastion, admins often assign public IPs or open 22/3389, expanding attack surface. This enables Internet brute force, credential stuffing, and RDP/SSH exploits, leading to unauthorized access, data exfiltration, and lateral movement. CIA impact: confidentiality/integrity loss and potential downtime from ransomware.

Recommendation

Standardize on Azure Bastion for admin access. Remove VM public IPs and deny inbound 22/3389 via perimeter controls and NSGs. Apply least privilege and just-in-time access, integrate Entra ID with MFA and conditional access, monitor sessions/logs, and segment networks so only Bastion can reach management ports.

Remediation

az network bastion create —name <BASTION_NAME> —public-ip-address <PUBLIC_IP_NAME> —resource-group <RESOURCE_GROUP> —vnet-name <VNET_NAME> —location <LOCATION>

References

Where this check fires

This check runs on every scheduled scan against your Azure account. Findings appear at Cloud Security → Findings filterable by Check ID = network_bastion_host_exists. To re-evaluate after a fix, hit Run now on the account’s schedule under Cloud Security → Schedules — the next scan re-checks this control and marks the finding fixed or keeps it persistent.
← Back to Azure checks