discretewater/ICAN

GitHub: discretewater/ICAN

本地优先、可解释的 AWS IAM 策略静态评估引擎,面向 CI 流水线和代码审查场景提供策略预检与决策追踪。

Stars: 0 | Forks: 0

# ICAN — 本地优先的 IAM 策略评估 MVP [![npm version](https://img.shields.io/npm/v/@wizardelf/ican.svg)](https://www.npmjs.com/package/@wizardelf/ican) [![License: Apache-2.0](https://img.shields.io/badge/License-Apache--2.0-blue.svg)](./LICENSE) [![Node.js](https://img.shields.io/badge/Node.js-supported-brightgreen.svg)](https://nodejs.org/) [![Bun](https://img.shields.io/badge/Bun-npm--compatible_usage-informational.svg)](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, 上游代理, 云安全监控, 代码审查, 可解释性, 安全合规, 安全插件, 文档结构分析, 暗色界面, 本地优先, 权限审计, 测试驱动, 策略引擎, 策略评估, 网络代理, 网络安全挑战, 自动化攻击, 访问控制, 静态分析