JulianoVinceCampos/iam-governance-lab

GitHub: JulianoVinceCampos/iam-governance-lab

一个轻量级的 Python 身份治理与管理模拟器,用于演示和测试员工权限生命周期、访问审查与职责分离等企业合规场景。

Stars: 1 | Forks: 0

# IAM Governance Lab ``` _ __ _ _ __ __ _ _____ __ | |/ _` | '_ \ / _` || _ \ / _| | | (_| | | | | (_| || | | || |_ |_|\__,_|_| |_|\__, ||_| |_||___| |___/ Governance Lab ``` [![测试](https://static.pigsec.cn/wp-content/uploads/repos/cas/09/097271ca091990be630ef6043309cc48240faa054413384202036fa2efedb2d2.svg)](https://github.com/JulianoVinceCampos/iam-governance-lab/actions/workflows/test.yml) [![Lint](https://static.pigsec.cn/wp-content/uploads/repos/cas/15/15e9e38379783188cff60c52dc1a4956f07be3c00c7a8bad969dd41a89434ae0.svg)](https://github.com/JulianoVinceCampos/iam-governance-lab/actions/workflows/lint.yml) [![许可证:MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/) ## 目录 - [问题背景](#the-problem) - [为何在企业中至关重要](#why-this-matters-in-enterprises) - [架构](#architecture) - [快速开始](#quickstart) - [CLI 命令](#cli-commands) - [数据模型](#data-model) - [安全与审计](#security-and-audit) - [后续步骤](#next-steps) - [贡献指南](#contributing) ## 问题背景 在拥有成百上千名员工的组织中,手动回答以下问题变得不可行: - **谁拥有什么权限?**(“现在谁可以在 ERP 中审批付款?”) - **这些权限是否依然合适?**(“Alice 3 个月前调到了采购部 - 她还保留着财务审批权吗?”) - **是否存在危险的权限组合?**(“是否有人既能创建又能审批采购订单?”) - **员工离职时是否撤销了权限?**(“我们是否删除了上周五离职的承包商的所有权限?”) **IGA (Identity Governance and Administration)** 是一门学科和工具集,能够系统地回答这些问题。本实验室模拟了一个微型 IGA 引擎,以便您理解相关概念、测试策略,并逐步构建出生产级别的解决方案。 ## 为何在企业中至关重要 | 领域 | 缺少 IGA 的实际风险 | IGA 如何解决 | |--------|----------------------|-------------------| | **财务欺诈** | 员工创建并自我审批采购订单 | SoD 策略阻止冲突的权限组合 | | **法规合规** | SOX、ISO 27001、SOC 2 要求提供访问审查的证据 | 包含带时间戳的批准/拒绝决定的季度访问审查活动 | | **数据泄露** | 离职员工的账户连续数周保持活跃状态 | 由 HR 事件触发自动取消配置 | | **权限过度配置** | 用户随着时间推移累积权限(“权限蔓延”) | 调动事件基于最小权限原则从零开始重新配置 | | **审计发现** | 没有记录显示谁在何时批准了何种权限 | 将证据导出为 CSV 和 Markdown,包含完整的审计追踪 | **需要 IGA 控制的框架:** SOX(第 404 条款)、ISO/IEC 27001 (A.9)、NIST 800-53 (AC-2)、CIS Controls (v8 - 控制 5 和 6)、PCI DSS (要求 7 和 8)。 ## 架构 ``` iam-governance-lab/ | |-- data/ # Static reference data (JSON) | |-- users.json # User directory with attributes | |-- roles.json # RBAC role-to-permission map | |-- applications.json # App catalog with ABAC policies | |-- sod_matrix.json # SoD conflict rules | |-- jml_events.json # Sample HR events (reference only) | |-- state/ # Runtime state (mutable) | |-- entitlements.json # Current access snapshot (after JML events) | |-- campaign_.json # Access review campaign results | |-- reports/ # Generated evidence (gitignored) | |-- access_review_*.csv | |-- access_review_*.md | |-- sod_report_*.csv | |-- src/iam_governance/ # Core library | |-- cli.py # Typer CLI commands | |-- jml.py # Joiner / Mover / Leaver logic | |-- sod.py # SoD violation checker | |-- access_review.py # Campaign management | |-- rbac.py # Role-to-permission resolution | |-- abac.py # Attribute-based access evaluation | |-- reports.py # CSV + Markdown evidence export | |-- state.py # State file read/write | |-- tests/ # pytest test suite |-- pyproject.toml # Dependencies and tool config |-- Makefile # Developer shortcuts ``` ### 数据流 ``` HR Event (CLI) | v jml.py rbac.py abac.py (lifecycle logic) --> (role->permissions) + (attribute policy) | v state/entitlements.json <-- single source of truth for current access | +---> sod.py (check conflicts at any time) +---> access_review.py (periodic certification campaigns) | v reports.py (CSV + Markdown) ``` ## 快速开始 ### 前置条件 - Python 3.10 或更高版本 - `make`(可选但推荐) ### 安装说明 ``` # Clone the repository git clone https://github.com/JulianoVinceCampos/iam-governance-lab.git cd iam-governance-lab # 安装包含所有 dev dependencies make setup # 验证安装 python -m iam_governance --help ``` ## CLI 命令 所有命令均使用 `--option value` 语法。在任何命令上运行 `--help` 以获取详细信息。 ### simulate-joiner 基于新员工的角色 (RBAC) 和属性 (ABAC) 为其配置访问权限。 ``` python -m iam_governance simulate-joiner --user-id U001 ``` **执行过程:** 1. 在 `data/users.json` 中查找用户 2. 通过 RBAC 从其角色解析权限 (`data/roles.json`) 3. 通过 ABAC 策略评估每个应用程序 (`data/applications.json`) 4. 将生成的权限保存到 `state/entitlements.json` ### simulate-mover 将用户转移到新部门和角色,基于最小权限原则从零开始重新配置。 ``` python -m iam_governance simulate-mover \ --user-id U001 \ --new-dept Procurement \ --new-role procurement ``` **执行过程:** 1. 加载该用户现有的权限 2. 撤销所有当前权限和应用程序访问权限 3. 基于新角色 (RBAC) 和未更改的属性 (ABAC) 重新配置 4. 报告已撤销和已授予的权限 ### simulate-leaver 立即撤销离职员工的所有访问权限。保留带有 `status: inactive` 的记录以备审计。 ``` python -m iam_governance simulate-leaver --user-id U003 ``` ### check-sod 基于 `data/sod_matrix.json` 检查用户(或所有活跃用户)是否存在 SoD(职责分离)违规情况。 ``` # 检查单个用户 python -m iam_governance check-sod --user-id U002 # 检查所有活跃用户 python -m iam_governance check-sod ``` **示例输出:** ``` SOD Violation Report User ID Name Status Critical High Conflicts U002 Bruno Martins VIOLATION 1 0 SOD005 ``` ### run-access-review 为所有活跃用户启动访问审查活动。模拟审查人分配和批准/拒绝决定(85% 的批准率以反映真实结果)。 ``` python -m iam_governance run-access-review --campaign-name "Q1-2024-Annual" ``` 活动将保存到 `state/campaign_q1-2024-annual.json` 以便导出。 ### export-evidence 将已完成的活动导出为具备审计条件的证据(CSV + Markdown)。 ``` python -m iam_governance export-evidence --campaign-name "Q1-2024-Annual" # 不带 SoD 摘要 python -m iam_governance export-evidence --campaign-name "Q1-2024-Annual" --no-sod ``` **输出:** - `reports/access_review_q1-2024-annual_.csv` - 用于导入 SIEM/GRC 的完整证据 - `reports/access_review_q1-2024-annual_.md` - 执行摘要 + 证据表 ### 典型的端到端流程 ``` # 1. 新员工入职 python -m iam_governance simulate-joiner --user-id U001 # 2. 员工晋升 / 调动 python -m iam_governance simulate-mover --user-id U001 --new-dept Procurement --new-role procurement # 3. 检查所有用户的 SoD 冲突 python -m iam_governance check-sod # 4. 运行季度 access review python -m iam_governance run-access-review --campaign-name "Q2-2024" # 5. 为审计人员导出证据 python -m iam_governance export-evidence --campaign-name "Q2-2024" # 6. 员工离职 python -m iam_governance simulate-leaver --user-id U001 ``` ## 数据模型 ### users.json ``` { "id": "U001", "name": "Alice Souza", "department": "Finance", "role": "analyst", "status": "active", "attributes": { "location": "BR", "clearance": "standard", "contract_type": "full_time" } } ``` ### roles.json ``` { "id": "R001", "name": "analyst", "permissions": ["read:reports", "read:dashboards", "read:invoices"] } ``` ### sod_matrix.json ``` { "id": "SOD001", "permission_a": "approve:payments", "permission_b": "create:purchase_orders", "risk_level": "critical", "rationale": "Enables fraudulent self-approval of transactions." } ``` ### applications.json (每个应用的 ABAC 策略) ``` { "id": "APP004", "name": "IT-Admin-Console", "required_roles": ["admin"], "abac_policy": { "allowed_locations": ["BR"], "min_clearance": "high", "allowed_contracts": ["full_time"] } } ``` ## 安全与审计 ### 本实验室展示的内容 - **最小权限强制执行:** `simulate-mover` 始终从零开始重新配置,从不累积权限。这可以防止“权限蔓延”——这是最常见的 IGA 失败原因之一。 - **不可变审计追踪:** `simulate-leaver` 将用户标记为 `inactive`,并保留带有 `deprovisioned_at` 时间戳的记录。记录从不进行硬删除。 - **基于证据的审查:** 每个访问审查项目都加盖了审查人身份、决定和 ISO 8601 时间戳——随时准备应对 SOX 或 ISO 27001 审计请求。 - **冲突检测:** SoD 检查针对受版本控制的冲突矩阵运行。添加新规则 (`data/sod_matrix.json`) 将在下次检查时自动应用于所有用户。 - **基于属性的控制:** 每个应用程序的 ABAC 策略可强制执行诸如“仅巴西全职员工才能访问 IT Admin Console”之类的控制——而无需在角色定义中硬编码这些规则。 ### 生产环境需要增加的内容 - 对静态的 `state/entitlements.json` 进行加密 - 在交付给审计人员之前使用私钥签名报告 - 将状态存储在具有行级审计日志记录的数据库 (PostgreSQL) 中 - 将 MFA 需求跟踪添加为 ABAC 属性 - 实施“认证人”身份验证流程(而非自动模拟) ## 后续步骤 本实验室是一个基础。以下是一份成熟度路线图: ### 阶段 1 - 集成 | 领域 | 工具/标准 | 备注 | |------|--------------|-------| | 身份提供者 | Okta, Entra ID, Ping | 用 SCIM API 调用替换 `users.json` | | ITSM | ServiceNow, Jira Service Mgmt | 由工单审批触发的 JML 事件 | | HR 系统 | Workday, SuccessFactors | 在招聘/调动/离职时自动执行 JML | | SIEM | Splunk, Microsoft Sentinel | 将 SoD 违规作为安全事件流式传输 | ### 阶段 2 - 真实的 IGA 平台 当复杂性超出了本模拟器的承载能力时,请考虑: - **Saviynt** - 具有内置 SoD 分析功能的云原生 IGA - **SailPoint IdentityNow** - 企业级 IGA 的市场领导者 - **One Identity Manager** - 非常适合混合本地/云环境 - **IBM Security Verify Governance** - 受监管行业的首选 ### 阶段 3 - 高级治理 - 每个用户的**风险评分**(综合 SoD 风险 + 孤立账户 + 休眠访问权限) - 基于群体分析的 **ML 访问权限推荐** - **持续控制监控**(实时检查 SoD,而非仅仅按需检查) - 用于精细化授权的 **PBAC (Policy-Based Access Control)** - **Zero Standing Privileges (ZSP)** - Just-In-Time 访问权限配置 ## 开发 ``` make setup # Install all dependencies make test # Run pytest suite make lint # Run ruff linter make run # Show CLI help ``` ### 运行带有覆盖率的测试 ``` pytest tests/ --cov=src/iam_governance --cov-report=html open htmlcov/index.html ``` ## 许可证 MIT 许可证 - 详见 [LICENSE](LICENSE)。 *旨在让工程师、安全架构师和合规团队切实掌握 IAM/IGA 概念。*
标签:ABAC, IGA, Python, RBAC, 安全规则引擎, 无后门, 权限审计, 身份治理, 逆向工具