awslabs/iam-policy-autopilot
GitHub: awslabs/iam-policy-autopilot
通过静态分析应用代码中的AWS SDK调用,自动生成基准IAM策略的开源工具,支持CLI和MCP服务器模式。
Stars: 303 | Forks: 35
[](https://github.com/awslabs/iam-policy-autopilot/blob/main/LICENSE)
[](https://github.com/awslabs/iam-policy-autopilot/actions/workflows/build_and_publish.yml) [](https://pypi.org/project/iam-policy-autopilot/)
# IAM Policy Autopilot
一个开源的 Model Context Protocol (MCP) 服务器和命令行工具,帮助您的 AI 编程助手快速创建基准 IAM policy,您可以随着应用程序的发展对其进行优化,从而加快构建速度。IAM Policy Autopilot 在本地分析您的应用程序代码,为应用程序角色生成基于身份的 policy,从而加快 IAM policy 的创建并减少访问故障排除的时间。IAM Policy Autopilot 支持使用 Python、Go 和 TypeScript 构建的应用程序。
## 目录
- [IAM Policy Autopilot 适用人群](#who-is-iam-policy-autopilot-for)
- [IAM Policy Autopilot 的优势](#how-is-iam-policy-autopilot-helpful)
- [最佳实践与注意事项](#best-practices-and-considerations)
- [快速入门](#getting-started)
- [CLI 用法](#cli-usage)
- [构建说明](#build-instructions)
- [工作区结构](#workspace-structure)
- [开发](#development)
- [安全](#security)
- [许可证](#license)
## IAM Policy Autopilot 适用人群?
IAM Policy Autopilot 适用于使用 AI 编程助手的 AWS 构建者,包括开发人员、产品经理、技术探索者和业务负责人。
## IAM Policy Autopilot 的优势
IAM Policy Autopilot 具有:
### 快速
IAM Policy Autopilot 通过生成基于身份的基准 IAM policy 来加速开发。您的 AI 编程助手可以调用 IAM Policy Autopilot 来分析应用程序中的 AWS SDK 调用。然后,IAM Policy Autopilot 会自动为您的应用程序角色创建基准 IAM 权限。
### 可靠
IAM Policy Autopilot 的确定性代码分析有助于创建可靠且有效的 IAM policy,从而减少 policy 故障排除。通过使用 MCP 服务器创建的有效 policy,您可以减少在 policy 相关调试上花费的时间,并通过避免与权限相关的延迟来加速应用程序部署。
### 及时
IAM Policy Autopilot 及时更新最新的 AWS 服务和功能,以便构建者和编程助手能够访问最新的 AWS IAM 权限知识。它有助于使您的应用程序角色的权限随着 AWS 不断发展的能力保持最新。
## 最佳实践与注意事项
### 审查并优化 IAM Policy Autopilot 生成的 policy
IAM Policy Autopilot 生成基准 policy,提供一个起点,您可以在应用程序成熟时对其进行优化。在部署生成的 policy 之前,请对其进行审查,以确保它们符合您的安全要求。结合操作模式使用 `--explain` 功能(例如 `--explain 's3:*'`),以了解哪些操作导致某个操作被包含在生成的 policy 中。
### 了解 IAM Policy Autopilot 的范围
IAM Policy Autopilot 生成 IAM 基于身份的 policy,但不支持基于资源的 policy,例如 S3 bucket policy 或 KMS key policy、Resource Control Policies (RCPs)、Service Control Policies (SCPs) 和权限边界。这些是您需要记住的限制。例如,如果您的代码调用 `s3.getObject(bucketName)`,其中 `bucketName` 是在运行时确定的,则 IAM Policy Autopilot 目前无法预测将访问哪个存储桶。
### 了解 IAM Policy Autopilot 与您的编程助手之间的界限
IAM Policy Autopilot 基于对代码的确定性分析,生成包含特定操作的 policy。当您使用 MCP 服务器集成时,您的 AI 编程助手会收到此 policy,并可能在创建基础设施即代码模板时对其进行修改。例如,您可能会看到助手根据代码中的附加上下文添加特定的资源 Amazon Resource Names (ARN) 或包含 KMS key ID。这些更改来自您的编程助手对更广泛代码上下文的解释,而不是来自 IAM Policy Autopilot 提供的静态分析。在部署之前,请务必审查编程助手生成的内容,以验证其是否符合您的安全要求。
### 使用服务提示以获取准确的 policy
IAM Policy Autopilot 的静态分析可能会包含您的应用程序未使用的 AWS 服务的权限。当代码中的方法名称与来自多个服务的 AWS SDK 调用匹配时,就会发生这种情况。例如,名为 `listAccounts()` 的方法可能会为 [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/APIReference/API_ListAccounts.html) 和 [Amazon Chime](https://docs.aws.amazon.com/chime/latest/APIReference/API_ListAccounts.html) 服务生成权限。
**推荐方法**:使用 `--service-hints` 选项仅指定您的应用程序实际使用的 AWS 服务。这有助于 IAM Policy Autopilot 缩小要分析的 SDK 调用范围,但如果您执行的操作需要,最终生成的 policy 可能仍包含来自其他服务的操作:
```
# 更精确 - 仅指定您使用的服务
iam-policy-autopilot generate-policies ./src/app.py --service-hints s3 iam organizations --pretty
# 较不精确 - 可能包含不必要的权限
iam-policy-autopilot generate-policies ./src/app.py --pretty
```
这显著减少了不必要的权限,并生成更具针对性的 policy。请注意,如果您执行的操作需要(例如,用于 S3 加密的 KMS 操作),最终生成的 policy 可能仍包含不在您的提示中的服务的操作。
**注意**:当与 AI 编程助手一起使用 MCP 服务器集成时,助手应根据您的代码上下文自动提供适当的服务提示。`--service-hints` 选项主要用于 CLI 使用。
## 快速入门
### 安装
#### 选项 1:使用 uv(推荐)
从 Astral 安装 [uv](https://docs.astral.sh/uv/getting-started/installation/)。
无需额外安装 - 您可以直接使用 `uvx iam-policy-autopilot` 运行 IAM Policy Autopilot。
#### 选项 2:使用 pip
安装 [pip](https://pip.pypa.io/en/stable/installation/)。
```
pip install iam-policy-autopilot
```
#### 选项 3:直接安装(仅限 MacOS/Linux)
要直接安装最新版本,请运行以下脚本将其下载并安装为系统实用程序。
```
curl -sSL https://github.com/awslabs/iam-policy-autopilot/raw/refs/heads/main/install.sh | sudo sh
```
这会将最新版本直接安装到 `/usr/local/bin/iam-policy-autopilot`。
### AWS 配置
IAM Policy Autopilot 需要 AWS 凭证才能应用 policy 修复并上传 policy 进行 AccessDenied 调试。
安装 [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) 并配置您的 AWS 凭证。
有关 AWS 凭证配置的更多信息,请参阅 [AWS CLI 配置指南](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)。
### MCP 服务器配置
在您的 MCP 客户端配置中配置 MCP 服务器,以使您的 AI 编程助手能够生成 IAM policy。
#### 对于 Kiro
从 [https://kiro.dev/](https://kiro.dev/) 获取 Kiro
**如果使用 uv/uvx:**
将以下配置添加到您的项目级 `.kiro/settings/mcp.json`:
```
{
"mcpServers": {
"iam-policy-autopilot": {
"command": "uvx",
"args": ["iam-policy-autopilot", "mcp-server"],
"env": {
"AWS_PROFILE": "your-profile-name",
"AWS_REGION": "us-east-1"
},
"disabled": false,
"autoApprove": []
}
}
}
```
**如果使用 pip:**
```
{
"mcpServers": {
"iam-policy-autopilot": {
"command": "iam-policy-autopilot",
"args": ["mcp-server"],
"env": {
"AWS_PROFILE": "your-profile-name",
"AWS_REGION": "us-east-1"
},
"disabled": false,
"autoApprove": []
}
}
}
```
#### 对于 Kiro CLI
从 [https://kiro.dev/cli](https://kiro.dev/cli) 获取 Kiro CLI
Kiro Cli 使用与上述 Kiro 相同的配置,此外,Kiro CLI 的 MCP 也可以通过以下方式设置:
**如果使用 uv/uvx:**
```
kiro-cli mcp add \
--name iam-policy-autopilot \
--command "uvx" \
--args "iam-policy-autopilot","mcp-server"
```
**如果使用 pip:**
```
kiro-cli mcp add \
--name iam-policy-autopilot \
--command "iam-policy-autopilot" \
--args "mcp-server"
```
#### 对于 Claude Desktop
添加到您的 Claude Desktop 配置文件:
**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
**Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
**Linux**: `~/.config/Claude/claude_desktop_config.json`
**如果使用 uv/uvx:**
```
{
"mcpServers": {
"iam-policy-autopilot": {
"command": "uvx",
"args": ["iam-policy-autopilot", "mcp-server"],
"env": {
"AWS_PROFILE": "your-profile-name",
"AWS_REGION": "us-east-1"
}
}
}
}
```
**如果使用 pip:**
```
{
"mcpServers": {
"iam-policy-autopilot": {
"command": "iam-policy-autopilot",
"args": ["mcp-server"],
"env": {
"AWS_PROFILE": "your-profile-name",
"AWS_REGION": "us-east-1"
}
}
}
}
```
### Kiro Power 配置
IAM Policy Autopilot 在 `power-iam-policy-autopilot` 目录中具有关联的 [Kiro power](https://kiro.dev/blog/introducing-powers/) 配置。这可用于在您的 Kiro 编辑器中安装相应的 Kiro power。
#### 启用 IAM Policy Autopilot Kiro Power
要启用 IAM Policy Autopilot Kiro Power,首先需要通过[遵循这些说明](https://docs.astral.sh/uv/getting-started/installation/)安装 `uv` 包管理器。然后,在 Kiro 中执行以下步骤:
1. 转到左侧菜单栏中的“Powers”菜单。
2. 点击 `Add Custom Power` -> `Import power from Github`
3. 在随后出现的文本提示中,输入 `https://github.com/awslabs/iam-policy-autopilot/tree/main/power-iam-policy-autopilot`。
4. Kiro 应自动在您的 Kiro 代码编辑器中安装一个名为 `IAM Policy Autopilot` 的新 Kiro power。此 power 应显示在 `Powers` 菜单中。
如果上述从 GitHub 仓库 URL 安装 power 的步骤不起作用,您也可以克隆仓库并直接导入 power,具体操作如下:
1. 克隆 git 仓库 `https://github.com/awslabs/iam-policy-autopilot`,并记住您将仓库克隆到的目录。
2. 转到左侧菜单栏中的“Powers”菜单。
3. 点击 `Add Custom Power` -> `Import power from a folder`
4. 在随后出现的文本提示中,选择您克隆仓库中的 `power-iam-policy-autopilot` 文件夹。例如,如果仓库克隆到 `~/workplace/iam-policy-autopilot`,您应该选择或输入 `~/workplace/iam-policy-autopilot/power-iam-policy-autopilot`。
5. Kiro 应自动在您的 Kiro 代码编辑器中安装一个名为 `IAM Policy Autopilot` 的新 Kiro power。此 power 应显示在 `Powers` 菜单中。
#### 为什么使用 IAM Policy Autopilot 的 Kiro Power?
Kiro powers 通常[提供比传统 MCP 服务器更精细的体验](https://kiro.dev/blog/introducing-powers/),因为它们支持更有选择性和更慎重地加载 MCP 工具,从而减少 LLM token 使用量并避免 LLM 上下文过度拥挤。
IAM Policy Autopilot 的 Kiro power 专门增强了传统的 MCP 体验,原因如下:
1. 此 Kiro Power 为您的 LLM agent 提供**更多引导指导**,为其提供有关我们 MCP 工具的具体用例和最佳实践的更多信息。
2. 此 Kiro power 提示您的 LLM agent 提供 IAM Policy Autopilot 提供的 **MCP 工具教程**,使您能够更好地了解我们的 MCP 工具如何协助您的用例。
3. 此 Kiro Power 为您的 LLM agent 提供**分步入职验证**,使其能够检测安装中的任何问题并为这些问题提供补救步骤。
## CLI 用法
`iam-policy-autopilot` CLI 工具提供三个主要命令:
```
Generate IAM policies from source code and fix AccessDenied errors
Usage: iam-policy-autopilot
Commands:
fix-access-denied Fix AccessDenied errors by analyzing and optionally applying IAM policy changes
generate-policies Generates complete IAM policy documents from source files
mcp-server Start MCP server
help Print this message or the help of the given subcommand(s)
Options:
-h, --help Print help (see more with '--help')
-V, --version Print version
```
### 命令
**generate-policies** - 从源文件生成完整的 IAM policy 文档
```
iam-policy-autopilot generate-policies [OPTIONS]
```
示例:
```
iam-policy-autopilot generate-policies \
./src/app.py \
--region us-east-1 \
--account 123456789012 \
--pretty
```
选项:
- `--region ` - 资源 ARN 的 AWS 区域
- `--account ` - 资源 ARN 的 AWS 账户 ID
- `--service-hints ` - 如果您知道应用程序实际使用的服务,则仅将这些服务作为分析范围。这有助于减少不必要的权限。
- `--upload-policies ` - 使用指定的前缀将生成的 policy 上传到 AWS IAM
- `--pretty` - 美化输出 JSON
**fix-access-denied** - 通过分析并选择性地应用 IAM policy 更改来修复 AccessDenied 错误
```
iam-policy-autopilot fix-access-denied [OPTIONS]
```
示例:
```
iam-policy-autopilot fix-access-denied \
"User: arn:aws:iam::123456789012:user/test is not authorized to perform: s3:GetObject on resource: arn:aws:s3:::my-bucket/file.txt"
```
选项:
- `--yes` - 自动应用 policy 更改而无需确认
**mcp-server** - 在本地启动 MCP 服务器
```
iam-policy-autopilot mcp-server [OPTIONS]
```
选项:
- `--transport ` - 传输类型:`stdio`(默认)或 `http`
使用 HTTP 传输的示例:
```
# 在 http://127.0.0.1:8001/mcp 启动服务器
iam-policy-autopilot mcp-server --transport http
```
## 构建说明
### 先决条件
- [Rust](https://rustup.rs/)(最新稳定版本)
- Git
- [CMake](https://cmake.org/)(仅限 Windows)
### 设置
使用子模块克隆仓库:
```
git clone --recurse-submodules https://github.com/awslabs/iam-policy-autopilot.git
cd iam-policy-autopilot
```
构建项目:
```
cargo build --release
```
编译后的二进制文件将位于 `target/release/iam-policy-autopilot`。
### 使用构建的二进制文件配置 MCP
如果您从源代码构建,则可以将 MCP 客户端配置为使用编译后的二进制文件:
```
{
"mcpServers": {
"iam-policy-autopilot": {
"command": "/path/to/iam-policy-autopilot",
"args": ["mcp-server"]
}
}
}
```
## 工作区结构
此工作区包含几个协同工作的 crate:
- **`iam-policy-autopilot-policy-generation/`** - 提供 SDK 提取和增强功能的核心库
- **`iam-policy-autopilot-access-denied/`** - 用于解析 AccessDenied 错误和合成 IAM policy 的核心库
- **`iam-policy-autopilot-tools/`** - Policy 上传实用程序和 AWS 集成工具
- **`iam-policy-autopilot-cli/`** - 提供所有命令的统一 CLI 工具
- **`iam-policy-autopilot-mcp-server/`** - 用于 IDE 和工具集成的 MCP 服务器
## 开发
### 运行测试
```
# 运行所有测试
cargo test --workspace
# 运行特定 crate 的测试
cargo test -p iam-policy-autopilot-cli
cargo test -p iam-policy-autopilot-access-denied
cargo test -p iam-policy-autopilot-policy-generation
# 运行集成测试
cargo test -p iam-policy-autopilot-cli --test integration_tests
```
### 构建发布版本
```
cargo build --release
```
编译后的二进制文件将位于 `target/release/iam-policy-autopilot`。
## 安全
有关更多信息,请参阅 [CONTRIBUTING](CONTRIBUTING.md#security-issue-notifications)。
## 许可证
本项目采用 Apache-2.0 许可证授权。
标签:AI编程助手, AWS, AWS SDK, DevSecOps, DPI, Go, IAM, MCP服务器, Python, Ruby工具, TypeScript, 上游代理, 二进制发布, 可视化界面, 安全专业人员, 安全合规, 安全插件, 开源工具, 无后门, 最小权限, 权限策略, 策略生成, 网络代理, 自动化运维, 身份与访问管理, 逆向工具, 通知系统, 错误基检测, 静态代码分析