discretewater/ICAN
GitHub: discretewater/ICAN
本地优先、可解释的 AWS IAM 策略静态评估引擎,面向 CI 流水线和代码审查场景提供策略预检与决策追踪。
Stars: 0 | Forks: 0
# ICAN — 本地优先的 IAM 策略评估 MVP
[](https://www.npmjs.com/package/@wizardelf/ican)
[](./LICENSE)
[](https://nodejs.org/)
[](https://bun.sh/)
ICAN 是一个本地优先、测试驱动的 IAM 策略评估引擎。
它接收 IAM 策略文档和访问请求,通过
逐条语句匹配的管道对它们进行评估,并返回结构化的
允许/拒绝决策,同时提供人类可读的输出和可复现的结果。
## S01 能做什么
- 解析 IAM 策略文档 (JSON, `Version 2012-10-17`)
- 评估带有 Action、Resource 和 Condition 匹配的 `Allow` 和 `Deny` 语句
- 支持 `StringEquals`、`StringLike`、`Bool` 和 `IpAddress` 条件运算符
- 生成路径追踪,解释评估了哪些语句
- 输出结构化的 **JSON** 或人类可读的 **文本** 结果
- 将结果映射到标准退出码:
- `0` — 允许
- `1` — 显式拒绝
- `2` — 输入或验证错误
- `3` — 不支持的功能或不确定结果
- `4` — 隐式拒绝 (无适用的 Allow)
- `10` — 内部错误
- [使用指南](docs/usage.md) — 完整的 CLI 演练
- [示例与固定数据](docs/examples.md) — 固定测试用例与预期输出
- [发布清单](docs/release-checklist.md) — 预发布验证
- [技术债务](docs/technical-debt.md) — 已知技术债务记录
`package.json` 的 `bin` 字段将 `ican` 注册为 CLI 名称。在
打包或链接之前,以下示例直接使用 `node dist/cli/ican.js check`。
## S01 不做什么
- 它**不**评估完整的 AWS IAM 语义
- 它**不**支持 `NotAction`、`NotResource`、`ForAllValues`、`ForAnyValue`
- 它**不**验证实际的云资源
- 它**不**包含任何真实的 IAM 策略样本
- 它**不是**一个生产级的 IAM 审计工具
- 后续阶段(尚未开始)可能会扩展这些功能
## 快速开始
### 前置条件
- [Node.js](https://nodejs.org/) (已使用 Node 20+ 测试)
- npm (随 Node.js 附带)
### 安装依赖
```
npm install # Install all dependencies
```
### 从 npm 安装 (已发布 — `@wizardelf/ican@0.1.0`)
```
npm install @wizardelf/ican # Install in your project
npx @wizardelf/ican check --help # Or run directly via npx
# 全局安装(可选)
npm install -g @wizardelf/ican
ican check --help
```
### 开发
### 运行测试
```
npm run typecheck # TypeScript type checking
npm run test -- --run # All tests
npm run build # Compile to dist/
```
所有测试均已通过(截至 S01 完成,共有 1090 个测试用例,29 个测试文件)。
### 运行 `ican check`
```
# 如果尚未构建,请先构建:
npm run build
# 显示帮助:
node dist/cli/ican.js check --help
# Basic allow 评估 — 编写 policy JSON 文件:
cat > /tmp/example-policy.json << 'EOF'
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": ["s3:GetObject"],
"Resource": ["arn:aws:s3:::example-bucket/*"]
}]
}
EOF
# 运行检查:
node dist/cli/ican.js check \
--policy /tmp/example-policy.json \
--action s3:GetObject \
--resource arn:aws:s3:::example-bucket/photo.jpg
# JSON 输出:
node dist/cli/ican.js check --format json \
--policy /tmp/example-policy.json \
--action s3:GetObject \
--resource arn:aws:s3:::example-bucket/photo.jpg
```
## 固定数据与预期输出
ICAN 使用一种**固定数据驱动测试**的方法:
- **实际固定数据** (`test-fixtures/cases/`):6 个合成用例,涵盖
允许、显式拒绝、隐式拒绝、不支持的条件、无效
输入和多策略优先级。
- **预期输出** (`expected/`):18 个预生成的预期输出文件
(JSON、文本、退出码),作为稳定的验收基线。
- **不包含真实的 IAM 样本** — 所有固定数据均为手工打造的
合成数据。
预期输出文件不包含任何绝对路径(例如 `/home/`
或 `/tmp/`),可跨环境移植。
## 项目边界
- **不包含真实的 IAM 策略样本、真实的 AWS 账户 ID 或组织特定的 ARN**
- 示例和固定数据中的所有 ARN 均为合成占位符
- 所有固定数据均为合成且最小的数据
- 本项目的目的是工程演示和
技能验证,而不是生产级的 IAM 服务
- 尚未规划或批准后续阶段
## 许可证
依据 Apache License, Version 2.0 授权。有关完整文本,请参见 [LICENSE](./LICENSE)。
## 接下来是什么?
ICAN S01 已完成。该项目目前正处于**发布候选准备**阶段 (RC01)。接下来的步骤 —— README 优化、使用
手册、示例文档、发布清单以及安全边界
审查 —— 将在决定后续阶段之前,在 RC01 主题下进行。
标签:AWS IAM, Bun, DevSecOps, GNU通用公共许可证, IAM Policy, JSON解析, MITM代理, Node.js, Streamlit, TypeScript, 上游代理, 云安全监控, 代码审查, 可解释性, 安全合规, 安全插件, 文档结构分析, 暗色界面, 本地优先, 权限审计, 测试驱动, 策略引擎, 策略评估, 网络代理, 网络安全挑战, 自动化攻击, 访问控制, 静态分析