suyashdworkspace/aws-security-audit-tool

GitHub: suyashdworkspace/aws-security-audit-tool

基于 Boto3 的只读 AWS 安全审计 CLI 工具,用于扫描多服务配置缺陷并生成分级 CSV/HTML 报告。

Stars: 0 | Forks: 0

# AWS 云安全审计工具 一个基于 Python/Boto3 的命令行工具,用于扫描 AWS 账户中在 **S3**、**IAM**、**EC2** 和 **Security Groups** 间常见的安全配置缺陷,随后根据严重程度(`CRITICAL`、`HIGH`、`MEDIUM`、`LOW`、`INFO`)生成结构化的 **CSV** 和 **HTML** 审计报告。 这是一个**只读**审计工具——它绝不会修改任何 AWS 资源。 ## 检查内容 | 服务 | 检查项目 | |---|---| | **S3** | 通过 ACL 授权的公开访问、通过 bucket policy 的公开访问、Block Public Access 被禁用/缺失、默认加密被禁用、版本控制被禁用 | | **IAM** | 未启用 MFA 的用户(若同时具有控制台登录权限则升级为 CRITICAL)、包含通配符 `Action:*`/`Resource:*` 的策略(包括内联策略和附加/托管策略)、超过 90 天的访问密钥、root 账户的 MFA/访问密钥 | | **EC2** | 拥有公网 IP 地址的实例、未加密的 EBS 卷 | | **Security Groups** | 在敏感端口(SSH、RDP、MySQL、PostgreSQL、MSSQL、MongoDB、Redis、Elasticsearch 等)上对 `0.0.0.0/0` / `::/0` 开放的入站规则、在**所有**端口/协议上对互联网开放的规则、在非敏感端口上的其他公开入站规则 | ## 要求 - Python 3.9+ - 一个 AWS 账户及具有 [`iam-policy-readonly-audit.json`](./iam-policy-readonly-audit.json) 中列出的只读权限的凭证 安装依赖: ``` pip install -r requirements.txt ``` ## 凭证 您可以通过以下两种方式之一提供 AWS 凭证: **1. 指定名称的 AWS CLI profile**(推荐) ``` python audit_cli.py --profile myprofile --region us-east-1 ``` **2. 环境变量** ``` export AWS_ACCESS_KEY_ID=... export AWS_SECRET_ACCESS_KEY=... export AWS_SESSION_TOKEN=... # only needed for temporary/STS credentials python audit_cli.py --region us-east-1 ``` 如果两者均未提供,boto3 将回退到其标准的默认凭证链(默认 profile、实例角色、容器角色等)。 该工具会首先调用 `sts:GetCallerIdentity`,如果凭证缺失或无效,将立即退出并给出明确的错误提示。 ## 用法 ``` # 扫描 us-east-1 中的所有内容,使用你的 AWS CLI 默认/命名 profile python audit_cli.py --profile myprofile --region us-east-1 # 使用环境变量凭证进行扫描 python audit_cli.py --region eu-west-1 # 仅扫描特定服务 python audit_cli.py --region us-east-1 --services s3,iam # 选择报告写入位置(默认:./reports) python audit_cli.py --region us-east-1 --output-dir ./my-reports # 仅生成一种报告格式 python audit_cli.py --region us-east-1 --no-html python audit_cli.py --region us-east-1 --no-csv # 安静模式(仅打印最终摘要 — 在 CI/CD 中很有用) python audit_cli.py --region us-east-1 --quiet ``` 完整选项参考: ``` python audit_cli.py --help ``` ### 输出 每次运行都会在输出目录中生成带有时间戳的报告文件: ``` reports/ aws-security-audit---.csv aws-security-audit---.html ``` HTML 报告包含按严重程度分类的汇总计数,以及可点击的过滤按钮,以便按严重程度隔离筛选结果。CSV 报告按严重程度排序(最严重的排在最前),适合导入到电子表格或工单系统中。 ### 退出代码 适用于 CI/CD 门禁: | 代码 | 含义 | |---|---| | `0` | 无发现 | | `1` | 存在发现,但没有 CRITICAL 严重级别的 | | `2` | 至少有一个 CRITICAL 发现,或凭证/参数无效 | ## 所需的 IAM 权限 该工具只需要**只读**权限。[`iam-policy-readonly-audit.json`](./iam-policy-readonly-audit.json) 中提供了一个即开即用的策略。 将其附加到您运行该工具时使用的 IAM 用户或角色上,例如: ``` aws iam create-policy \ --policy-name SecurityAuditReadOnly \ --policy-document file://iam-policy-readonly-audit.json ``` 如果缺少某个权限,受影响的检查将被跳过,并在报告中作为警告记录,而不会导致整个扫描崩溃——仍会生成部分结果。 ## 项目结构 ``` aws-security-audit-tool/ ├── audit_cli.py # CLI entry point ├── audit/ │ ├── findings.py # Finding / Severity / AuditReport data model │ ├── aws_session.py # Credential handling (profile / env vars) │ ├── s3_scanner.py # S3 checks │ ├── iam_scanner.py # IAM checks │ ├── ec2_scanner.py # EC2 + Security Group checks │ ├── csv_report.py # CSV report generator │ └── html_report.py # HTML report generator ├── tests/ # Unit + end-to-end tests (using moto mocks) ├── iam-policy-readonly-audit.json ├── requirements.txt └── README.md ``` ## 运行测试 测试使用 [`moto`](https://github.com/getmoto/moto) 来模拟 AWS——运行它们不需要真实的 AWS 账户或凭证。 ``` pip install moto python tests/test_s3_scanner.py python tests/test_iam_scanner.py python tests/test_ec2_scanner.py python tests/test_e2e.py ``` ## 注意事项与限制 - 此工具一次扫描**一个区域**(通过传递 `--region` 参数)。IAM 是一项全球性服务,但 AWS SDK 仍然需要一个区域来构建客户端;该值不会影响 IAM 的结果。 - 通配符策略检查会标记包含 `Effect: Allow` + `Action: "*"` + `Resource: "*"` 的声明(如果附加了 `AdministratorAccess` 等 AWS 托管策略,则也会被标记)——它目前不会评估针对特定 bucket 的部分通配符(如 `s3:*`),因为这可能是出于特定意图,且根据上下文风险可能较低。 - 访问密钥时效阈值(90 天)是一个常见的基准;如果您的组织使用不同的轮换策略,请在 `audit/iam_scanner.py` 中调整 `MAX_KEY_AGE_DAYS`。 - 这是一个时间点审计工具,而不是持续监控。要进行持续检测,请将其与 AWS Security Hub、Config Rules 或 GuardDuty 结合使用。
标签:AWS, DPI, Python, 云安全审计, 关系图谱, 基线检查, 无后门, 足迹分析, 逆向工具, 配置合规