CyberEnthusiastic/iam-least-privilege-analyzer

GitHub: CyberEnthusiastic/iam-least-privilege-analyzer

零依赖的 AWS IAM 策略静态分析工具,内置 12 条 CIS 映射规则和权限提升检测,可生成交互式暗色 HTML 报告并输出风险评分,适用于 CI/CD 集成和离线合规审计。

Stars: 1 | Forks: 0

# IAM 最小权限分析器 [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](./LICENSE) [![Python 3.8+](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/) [![GitHub Actions](https://img.shields.io/badge/CI-GitHub%20Actions-2088FF?logo=github-actions&logoColor=white)](./.github/workflows/iam.yml) [![CIS AWS](https://img.shields.io/badge/CIS%20AWS-1.15%2F1.16%2F1.22-A14241)](https://www.cisecurity.org/benchmark/amazon_web_services) ## 它的功能(一张终端输出截图即可说明) ``` ============================================================ IAM Least-Privilege Analyzer v1.0 ============================================================ [*] Total findings: 11 [*] Breakdown : {'CRITICAL': 4, 'HIGH': 5, 'MEDIUM': 2, 'LOW': 0} [CRITICAL] Wildcard Action with Wildcard Resource (Admin equivalent) samples/overly_permissive_admin.json stmt[0]:BadAdminAllowAll (risk=99.4, CIS AWS 1.22) > Action="*" Resource="*" [CRITICAL] Cross-account trust with wildcard Principal samples/bad_trust_policy.json stmt[0]:AllowAnyone (risk=97.2, CIS AWS 1.16) > Principal={'AWS': '*'} [CRITICAL] Dangerous IAM privilege escalation action samples/overly_permissive_admin.json stmt[3]:BadPassRoleUnrestricted (risk=95.8, AWS WA SEC 03) > Action="iam:PassRole" Resource="*" ``` 并生成带有按结果钻取功能的交互式暗色模式 HTML 报告: - 严重性标签 · 规则 ID · 风险评分 · 操作 · 资源 · CIS 映射 · 修复建议 · 建议的修正方案 ## 截图(本地运行,零配置) **终端输出** - 您在命令行中看到的确切内容: ![终端输出](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/32b825fef7094648.png) **交互式 HTML 仪表盘** - 可在任何浏览器中打开,暗色模式,支持过滤: ![HTML 报告](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/f93a82de73094651.png) 这两张截图均截取自针对捆绑的 `samples/` 目录进行的真实本地运行。使用下方的快速开始命令即可重现。 ## 为什么你需要它 | | **IAM 最小权限分析器** | AWS Access Analyzer | Cloudsplaining | Ermetic | |---|---|---|---|---| | **价格** | 免费 (MIT) | 免费(绑定账户) | 免费 (OSS) | $$$$ | | **运行时依赖** | **无** — 纯标准库 | AWS 控制台 | Python + graphviz | SaaS | | **安装时间** | `git clone && python analyzer.py` | IAM 角色设置 | `pip install cloudsplaining` | 入职沟通 | | **离线 / 物理隔离** | 是 | 否 | 是 | 否 | | **权限提升规则** | 12 项内置 | 有限 | 40+ | 是 | | **信任策略审查** | 是 | 是 | 部分 | 是 | | **交互式 HTML 报告** | 内置 | 仅控制台 | 单独步骤 | SaaS | | **ML 风格风险评分** | 是 (0-100) | 否 | 否 | 专有 | | **使用 Python 扩展** | 10 行代码 | 否 | Python | 否 | ## 60 秒快速开始 ``` # 克隆 git clone https://github.com/CyberEnthusiastic/iam-least-privilege-analyzer.git cd iam-least-privilege-analyzer # 运行 (零安装 - 纯 Python 3.8+ stdlib) python analyzer.py samples/ # 打开 HTML 报告 start reports/iam_report.html # Windows open reports/iam_report.html # macOS xdg-open reports/iam_report.html # Linux ``` ### 备选方案:一键安装程序 ``` # Linux / macOS / WSL / Git Bash ./install.sh # Windows PowerShell .\install.ps1 ``` ### 备选方案:Docker ``` docker build -t iam-analyzer . docker run --rm -v "$PWD/policies:/app/policies" iam-analyzer analyzer.py policies/ ``` ## 检测内容(12 个规则类) | ID | 规则 | 严重性 | CIS / AWS 映射 | |----|------|----------|-------------------| | IAM-001 | 带有通配符资源的通配符操作(相当于管理员) | CRITICAL | CIS AWS 1.22 | | IAM-002 | 通配符操作 `"Action": "*"` | HIGH | CIS AWS 1.22 | | IAM-003 | 通配符资源 `"Resource": "*"` | HIGH | AWS WA SEC 03 | | IAM-004 | 服务级通配符(例如 `s3:*`、`iam:*`) | HIGH | AWS WA SEC 03 | | IAM-005 | 权限提升操作 | CRITICAL | AWS WA SEC 03 | | IAM-006 | `NotAction` 与 `Effect: Allow` 一起使用(拒绝列表反模式) | MEDIUM | AWS WA SEC 03 | | IAM-007 | 敏感操作缺少 Condition 块 | MEDIUM | AWS WA SEC 03 | | IAM-008 | 没有 VPC/SourceIp 条件的数据泄露操作 | HIGH | AWS WA SEC 04 | | IAM-009 | `kms:Decrypt` 没有资源/授权范围限制 | HIGH | AWS WA SEC 08 | | IAM-010 | 带有通配符 Principal 的跨账户信任 | CRITICAL | CIS AWS 1.16 | | IAM-011 | 用户上的内联策略(应使用组) | LOW | CIS AWS 1.15 | | IAM-012 | 信任策略允许任何 AWS 服务 (`Service: "*"`) | HIGH | AWS WA SEC 02 | 有关完整定义,请参阅 `analyzer.py` 中的 `IAM_RULES` 和 `PRIVESC_ACTIONS`。 ## 风险评分器的工作原理 `IAMRiskScorer` 融合多种信号,为每项发现生成 0-100 的评分: - **模式置信度**(基础分 60)- 每条规则附带 0.70-0.99 的手工校准置信度 - **缺少 Condition** (+12) - 敏感操作没有 MFA / SourceIp / VPC 条件 - **敏感服务** (+10) - iam、kms、sts、secretsmanager、organizations - **数据泄露操作** (+8) - s3:GetObject、secretsmanager:GetSecretValue 等 - **通配符资源** (+8) - `Resource: "*"` 带有任何非通配符操作 - **严重性加分** - +12 CRITICAL、+6 HIGH、+2 MEDIUM 对单个密钥执行的普通 `kms:Decrypt` 得分约为 65,但带有 `Resource: "*"` 且没有条件的 `kms:Decrypt` 得分会飙升至约 95。上下文 > 单纯的模式匹配。 ## 扫描你自己的策略 ``` # 扫描单个 policy JSON python analyzer.py path/to/role-policy.json # 扫描 policy 文件目录 python analyzer.py path/to/terraform/policies/ # 自定义输出路径 python analyzer.py policies/ -o out.json --html out.html ``` 分析器支持三种输入格式: 1. **原始策略文档** - `{"Version":"2012-10-17","Statement":[...]}` 2. **带有 `PolicyDocument` 的包装对象** - `aws iam get-policy-version` 的输出 3. **带有 `AssumeRolePolicyDocument` 的角色文档** - 信任策略 ## CI/CD 集成(遇到 CRITICAL 发现时使构建失败) 将以下内容添加到 `.github/workflows/iam.yml`: ``` - name: Run IAM Analyzer run: python analyzer.py terraform/iam/ - name: Fail on CRITICAL run: | python -c " import json, sys r = json.load(open('reports/iam_report.json')) if r['summary']['by_severity']['CRITICAL'] > 0: print('CRITICAL IAM findings detected') sys.exit(1) " ``` ## 扩展规则引擎 向 `IAM_RULES` 添加新规则: ``` { "id": "IAM-013", "name": "EC2 full access without tag condition", "severity": "HIGH", "confidence": 0.85, "cis": "AWS WA SEC 03", "remediation": "Scope ec2:* to resources with aws:ResourceTag/env=dev condition.", }, ``` 然后在 `analyze_statement()` 中添加匹配逻辑。无需 YAML,无需插件。 ## 项目结构 ``` iam-least-privilege-analyzer/ |-- analyzer.py # main analyzer + 12 rules + risk scorer |-- report_generator.py # dark-mode HTML report |-- samples/ # intentionally bad policies for demos | |-- overly_permissive_admin.json | |-- bad_trust_policy.json | `-- good_least_privilege.json |-- reports/ # output (gitignored) |-- Dockerfile # containerized runs |-- install.sh # one-command installer (Linux/Mac/WSL) |-- install.ps1 # one-command installer (Windows) |-- requirements.txt # empty - pure stdlib |-- README.md # this file |-- LICENSE # MIT |-- NOTICE # attribution |-- SECURITY.md # vulnerability disclosure policy `-- CONTRIBUTING.md # how to add rules / send PRs ``` ## 路线图 - [ ] 直接解析 AWS Terraform 状态 (`terraform show -json`) - [ ] 由 CloudTrail 驱动的“未使用权限”检测器 - [ ] 针对AWS Organizations的 SCP (Service Control Policy) 分析 - [ ] 用于 GitHub Code Scanning 的 SARIF 输出 - [ ] 与 IAM Access Analyzer 结果集成 ## 许可证 MIT。详见 [LICENSE](./LICENSE) 和 [NOTICE](./NOTICE)。 ## 安全 负责任的披露政策:参见 [SECURITY.md](./SECURITY.md)。 ## 贡献 欢迎提交 PR!从复刻到合并 PR 的快捷路径请参见 [CONTRIBUTING.md](./CONTRIBUTING.md)。 由 **[Mohith Vasamsetti (CyberEnthusiastic)](https://github.com/CyberEnthusiastic)** 作为 [AI Security Projects](https://github.com/CyberEnthusiastic?tab=repositories) 套件的一部分构建 - 这是一套零依赖、商业级的安全工具,专为希望获得真正安全性而不产生高昂 SaaS 费用的工程师和团队打造。
标签:Anthropic, AWS, CIS基准, CSV导出, DPI, HTML报告, IAM, IAM策略, LNA, Python, 安全合规, 态势管理, 无后门, 最小权限, 权限分析, 权限提升检测, 网络代理, 自动化安全工具, 请求拦截, 零依赖