awslabs/iam-policy-autopilot

GitHub: awslabs/iam-policy-autopilot

通过静态分析应用代码中的AWS SDK调用,自动生成基准IAM策略的开源工具,支持CLI和MCP服务器模式。

Stars: 303 | Forks: 35

[![awslabs/iam-policy-autopilot License](https://img.shields.io/badge/license-Apache%202-blue)](https://github.com/awslabs/iam-policy-autopilot/blob/main/LICENSE) [![GitHub CI 状态](https://img.shields.io/github/actions/workflow/status/awslabs/iam-policy-autopilot/build_and_publish.yml?label=CI&logo=GitHub)](https://github.com/awslabs/iam-policy-autopilot/actions/workflows/build_and_publish.yml) [![PyPI - 版本](https://img.shields.io/pypi/v/iam-policy-autopilot?logo=Python&logoColor=white)](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, 上游代理, 二进制发布, 可视化界面, 安全专业人员, 安全合规, 安全插件, 开源工具, 无后门, 最小权限, 权限策略, 策略生成, 网络代理, 自动化运维, 身份与访问管理, 逆向工具, 通知系统, 错误基检测, 静态代码分析