JulianoVinceCampos/iam-governance-lab
GitHub: JulianoVinceCampos/iam-governance-lab
一个轻量级的 Python 身份治理与管理模拟器,用于演示和测试员工权限生命周期、访问审查与职责分离等企业合规场景。
Stars: 1 | Forks: 0
# IAM Governance Lab
```
_ __ _ _ __ __ _ _____ __
| |/ _` | '_ \ / _` || _ \ / _|
| | (_| | | | | (_| || | | || |_
|_|\__,_|_| |_|\__, ||_| |_||___|
|___/ Governance Lab
```
[](https://github.com/JulianoVinceCampos/iam-governance-lab/actions/workflows/test.yml)
[](https://github.com/JulianoVinceCampos/iam-governance-lab/actions/workflows/lint.yml)
[](LICENSE)
[](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, 安全规则引擎, 无后门, 权限审计, 身份治理, 逆向工具