Back to Checks
ECS instances should have security groups attached
ecs_instance_security_groups_attached
Service: ecsSeverity: medium
OfficialBuilt-inVerified
Categories:internet-exposed
Resource Type:NotDefined
Ensure that Elastic Cloud Server (ECS) instances have at least one security group attached to control network traffic.
Risk
ECS instances without security groups have no network-level access control, potentially allowing unrestricted inbound or outbound traffic.
Run this check with Prowler
Run in Prowler CloudRun
prowler huaweicloud --checks ecs_instance_security_groups_attachedRecommendation
Attach at least one properly configured security group to every ECS instance.
Remediation
CLI
hcloud ECS NovaAssociateSecurityGroup --server_id=<instance_id> --addSecurityGroup.name=<sg_name>Other
1Log on to the **Huawei Cloud** console
2Navigate to **Elastic Cloud Server**
3Select the instance
4Click **More** > **Manage Security Group**
5Attach an appropriate **security group**
Check Code
from prowler.lib.check.models import Check, CheckReportHuaweiCloud
from prowler.providers.huaweicloud.services.ecs.ecs_client import ecs_client
class ecs_instance_security_groups_attached(Check):
"""Ensure ECS instances have security groups attached."""
def execute(self) -> list[CheckReportHuaweiCloud]:
findings = []
for instance in ecs_client.instances.values():
report = CheckReportHuaweiCloud(metadata=self.metadata(), resource=instance)
report.region = instance.region
report.resource_id = instance.id
report.resource_arn = f"huaweicloud:ecs:{instance.region}:{ecs_client.audited_account}:instance/{instance.id}"
if instance.security_groups:
sg_names = ", ".join(
name or sg_id for sg_id, name in instance.security_groups.items()
)
report.status = "PASS"
report.status_extended = f"ECS instance {instance.name} ({instance.id}) has security group(s) attached: {sg_names}."
else:
report.status = "FAIL"
report.status_extended = f"ECS instance {instance.name} ({instance.id}) does not have any security groups attached."
findings.append(report)
return findings