Back to Checks
aws

Security Hub is enabled with standards or integrations configured

securityhub_enabled
Service: securityhubSeverity: high
OfficialBuilt-inVerified
Resource Type:Other

AWS Security Hub is ACTIVE in the Region and has at least one enabled security standard or connected integration. Otherwise, it is either not enabled or enabled without standards/integrations.

Risk

Absent Security Hub coverage or standards, security signals are fragmented and control checks don't run. High-risk findings can be missed or delayed, enabling data exfiltration, persistence, and lateral movement. This reduces visibility and undermines confidentiality, integrity, and availability across accounts/Regions.

Run this check with Prowler

Run in Prowler Cloud
Run
prowler aws --checks securityhub_enabled

Recommendation

  • Enable in all required accounts/Regions
  • Turn on relevant standards (AWS FSBP, CIS)
  • Connect AWS and third-party integrations
  • Use central configuration and least privilege
  • Automate triage and monitor continuously for defense in depth

Remediation

Terraform

# Enable Security Hub
resource "aws_securityhub_account" "<example_resource_name>" {}

# Critical: Enable at least one standard so the check passes
resource "aws_securityhub_standards_subscription" "<example_resource_name>_fsbp" {
  standards_arn = "arn:aws:securityhub:<REGION>::standards/aws-foundational-security-best-practices/v/1.0.0" # Enables AWS FSBP
}

NativeIaC

# CloudFormation: Enable Security Hub and at least one standard
Resources:
  <example_resource_name>Hub:
    Type: AWS::SecurityHub::Hub
    # Critical: Enables Security Hub in this account/Region

  <example_resource_name>Standard:
    Type: AWS::SecurityHub::Standard
    Properties:
      StandardsArn: arn:aws:securityhub:<REGION>::standards/aws-foundational-security-best-practices/v/1.0.0  # Critical: enables a standard so the check passes

Other

1Open the AWS console and go to Security Hub
2If prompted (first use): click Enable Security Hub and keep the default standards selected, then choose Enable
3If Security Hub is already enabled: go to Security standards and enable AWS Foundational Security Best Practices
4Wait for the status to show Enabled

Check Code

from prowler.lib.check.models import Check, Check_Report_AWS
from prowler.providers.aws.services.securityhub.securityhub_client import (
    securityhub_client,
)


class securityhub_enabled(Check):
    def execute(self):
        findings = []
        for securityhub in securityhub_client.securityhubs:
            report = Check_Report_AWS(metadata=self.metadata(), resource=securityhub)
            if securityhub.status == "ACTIVE":
                report.status = "PASS"
                if securityhub.standards:
                    report.status_extended = f"Security Hub is enabled with standards: {securityhub.standards}."
                elif securityhub.integrations:
                    report.status_extended = f"Security Hub is enabled without standards but with integrations: {securityhub.integrations}."
                else:
                    report.status = "FAIL"
                    report.status_extended = "Security Hub is enabled but without any standard or integration."
            else:
                report.status = "FAIL"
                report.status_extended = "Security Hub is not enabled."

            if report.status == "FAIL" and (
                securityhub_client.audit_config.get("mute_non_default_regions", False)
                and not securityhub.region == securityhub_client.region
            ):
                report.muted = True

            findings.append(report)

        return findings