Check ID:
Provider: OpenStack
Service:
Severity: MEDIUM
Categories:
Resource type:
compute_instance_public_ip_exposedProvider: OpenStack
Service:
computeSeverity: MEDIUM
Categories:
internet-exposed, trust-boundariesResource type:
OS::Nova::ServerWhat this check verifies
OpenStack compute instances are evaluated to verify they are not exposed to the internet via public IPs (floating IPs or access IPs). Instances with public IPs are directly reachable from the internet, increasing attack surface. Best practices recommend using bastion hosts, VPN gateways, or load balancers instead.Risk
Instances with public IPs are directly reachable from the internet, enabling reconnaissance, port scanning, and vulnerability exploitation. Attackers can target instances for brute-force attacks, credential stuffing, and malware injection. Public exposure bypasses network segmentation and defense-in-depth. Compromised public instances become pivot points for lateral movement.Recommendation
Avoid public IPs on application/database instances; use private networks only. Deploy bastion hosts or VPN gateways for operator access. Use load balancers (Octavia, HAProxy) with public IPs for web traffic instead of direct instance exposure. Apply least-privilege security groups. Enable flow logs. Use cloud NAT gateways for outbound access without inbound exposure.Remediation
- CLI
- Terraform
- Dashboard steps
openstack server remove floating ip <instance_id> <floating_ip>
ssh -J bastion private-instance
References
- https://docs.openstack.org/neutron/latest/admin/intro-nat.html
- https://docs.openstack.org/security-guide/networking/architecture.html
- https://docs.openstack.org/neutron/latest/admin/intro-os-networking.html
Where this check fires
This check runs on every scheduled scan against your OpenStack account. Findings appear at Cloud Security → Findings filterable byCheck ID = compute_instance_public_ip_exposed. 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 OpenStack checks