"""Scrape AWS Security Hub FSBP controls index page into structured rows. The index page (https://docs.aws.amazon.com/securityhub/latest/userguide/fsbp-standard.html) lists controls as
. This module only parses the index — severity defaults to "medium" because the index doesn't surface severity. Detail-page enrichment is a future task. """ from __future__ import annotations import re from dataclasses import dataclass, field from urllib.parse import urljoin from bs4 import BeautifulSoup from scripts.control_resource_map import control_id_to_types FSBP_INDEX_URL = ( "https://docs.aws.amazon.com/securityhub/latest/userguide/" "fsbp-standard.html" ) @dataclass class FSBPRow: control_id: str title: str severity: str detail_url: str resource_types: list[str] = field(default_factory=list) requirement: str = "" _ANCHOR_RE = re.compile(r"^\s*\[(?P