Skip to main content

awslabs/iam-policy-autopilot License GitHub CI Status PyPI - Version

IAM Policy Autopilot

An open source Model Context Protocol (MCP) server and command-line tool that helps your AI coding assistants quickly create baseline IAM policies that you can refine as your application evolves, so you can build faster. IAM Policy Autopilot analyzes your application code locally to generate identity-based policies for application roles, enabling faster IAM policy creation and reducing access troubleshooting time. IAM Policy Autopilot supports policy generation for applications built in Python, Go, TypeScript, JavaScript, and Java — see Supported Languages and SDKs for policy generation.

We want to hear from you. Ask questions or share ideas in Discussions, report bugs through Issues, or contribute directly with a Pull Request.

Table of Contents

Who is IAM Policy Autopilot for?

IAM Policy Autopilot is for builders on AWS using AI coding assistants, including developers, product managers, technical experimenters, and business leaders.

How is IAM Policy Autopilot helpful?

IAM Policy Autopilot is:

Fast

IAM Policy Autopilot accelerates development by generating baseline identity-based IAM policies. Your AI coding assistant can call IAM Policy Autopilot to analyze AWS SDK calls within your application. IAM Policy Autopilot then automatically creates the baseline IAM permissions for your application roles.

Reliable

IAM Policy Autopilot's deterministic code analysis helps create reliable and valid IAM policies that reduce policy troubleshooting. By using valid policies created with the MCP server, you reduce time spent on policy-related debugging and accelerate application deployment by avoiding permission-related delays.

Up-to-date

IAM Policy Autopilot stays up to date with the latest AWS services and features so that builders and coding assistants have access to the latest AWS IAM permissions knowledge. It helps keep your application role's permissions current with AWS's evolving capabilities.

Best Practices and Considerations

Review and refine policies generated by IAM Policy Autopilot

IAM Policy Autopilot generates baseline policies to provide a starting point that you can refine as your application matures. Review the generated policies to ensure they align with your security requirements before deploying them. Use the --explain feature with action patterns (e.g., --explain 's3:*') to understand which operations led to an action being included in the generated policies.

Understand the IAM Policy Autopilot scope

IAM Policy Autopilot produces IAM identity-based policies, but doesn't support resource-based policies such as S3 bucket policies or KMS key policies, Resource Control Policies (RCPs), Service Control Policies (SCPs), and permission boundaries. These are the limitations that you need to keep in mind. For example, if your code calls s3.getObject(bucketName) where bucketName is determined at runtime, IAM Policy Autopilot currently doesn't predict which bucket will be accessed.

Understand the boundary between IAM Policy Autopilot and your coding assistant

IAM Policy Autopilot generates policies with specific actions based on deterministic analysis of your code. When you use the MCP server integration, your AI coding assistant receives this policy and might modify it when creating infrastructure-as-code templates. For example, you might see the assistant add specific resource Amazon Resource Names (ARNs) or include KMS key IDs based on additional context from your code. These changes come from your coding assistant's interpretation of your broader code context, not from the static analysis provided by IAM Policy Autopilot. Always review content generated by your coding assistant before deployment to verify that it meets your security requirements.

Use service hints for accurate policies

IAM Policy Autopilot's static analysis may include permissions for AWS services your application doesn't use. This happens when method names in your code match AWS SDK calls from multiple services. For example, a method called listAccounts() might generate permissions for both AWS Organizations and Amazon Chime services.

Recommended approach: Use the --service-hints option to specify only the AWS services your application actually uses. This helps IAM Policy Autopilot scope down which SDK calls to analyze, but the final policy may still include actions from other services if they're required by the operations you perform:

# More accurate - specify only services you use
iam-policy-autopilot generate-policies ./src/app.py --service-hints s3 iam organizations --pretty

# Less accurate - may include unnecessary permissions
iam-policy-autopilot generate-policies ./src/app.py --pretty

This significantly reduces unnecessary permissions and generates more targeted policies. Note that the final policy may still include actions from services not in your hints if they're required for the operations you perform (e.g., KMS actions for S3 encryption).

Note: When using the MCP server integration with AI coding assistants, the assistant is expected to automatically provide appropriate service hints based on your code context. The --service-hints option is primarily for CLI usage.

Supported Languages and SDKs for policy generation

Language SDK
Go AWS SDK for Go v2
Java AWS SDK for Java v2
JavaScript AWS SDK for JavaScript v3
TypeScript AWS SDK for JavaScript v3
Python Boto3, Botocore

Getting Started

Installation

Option 1: Using uv (Recommended)

Install uv from Astral.

No additional installation needed - you can run IAM Policy Autopilot directly using uvx iam-policy-autopilot.

Option 2: Using pip

Install pip.

pip install iam-policy-autopilot

Option 3: Direct installation (MacOS/Linux only)

To install the latest release directly, run the following script to download and install as a system utility.

curl -sSL https://github.com/awslabs/iam-policy-autopilot/raw/refs/heads/main/install.sh | sudo sh

This will install the latest release directly to /usr/local/bin/iam-policy-autopilot.

AWS Configuration

IAM Policy Autopilot requires AWS credentials to apply policy fixes and upload policies for AccessDenied debugging.

Install AWS CLI and configure your AWS credentials.

For more information on AWS credential configuration, see the AWS CLI Configuration Guide.

MCP Server Configuration

Configure the MCP server in your MCP client configuration to enable your AI coding assistant to generate IAM policies.

For Kiro

Get Kiro from https://kiro.dev/

If using uv/uvx:

Add the following configuration to your project-level .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": []
    }
  }
}

If using 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": []
    }
  }
}

For Kiro CLI

Get Kiro CLI from https://kiro.dev/cli

Kiro Cli uses the same configuration as Kiro mentioned above, additionally, MCPs for Kiro CLI can also be setup via:

If using uv/uvx:

kiro-cli mcp add \
  --name iam-policy-autopilot \
  --command "uvx" \
  --args "iam-policy-autopilot","mcp-server"

If using pip:

kiro-cli mcp add \
  --name iam-policy-autopilot \
  --command "iam-policy-autopilot" \
  --args "mcp-server"

For Claude Desktop

Add to your Claude Desktop configuration file:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

Windows: %APPDATA%\Claude\claude_desktop_config.json

Linux: ~/.config/Claude/claude_desktop_config.json

If using 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"
      }
    }
  }
}

If using 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 Configuration

IAM Policy Autopilot has an associated Kiro power configuration inside the power-iam-policy-autopilot directory. This can be used to install a corresponding Kiro power in your Kiro editor.

Enabling the IAM Policy Autopilot Kiro Power

To enable the IAM Policy Autopilot Kiro Power, first install the uv package manager by following these instructions. Then, do the following steps within Kiro:

  1. Go to the "Powers" menu in the menubar on the left-hand-side.
  2. Click Add Custom Power -> Import power from Github
  3. In the text prompt that then appears, enter https://github.com/awslabs/iam-policy-autopilot/tree/main/power-iam-policy-autopilot.
  4. Kiro should automatically install a new Kiro power called IAM Policy Autopilot within your Kiro code editor. This power should be visible in the Powers menu.

If the above steps for installing the power from a GitHub repository URL does not work, you can also clone the repository and import the power directly, by doing the following:

  1. Clone the git repository https://github.com/awslabs/iam-policy-autopilot, and remember the directory to where you cloned the repo.
  2. Go to the "Powers" menu in the menubar on the left-hand-side.
  3. Click Add Custom Power -> Import power from a folder
  4. In the text prompt that then appears, select the power-iam-policy-autopilot folder in your cloned repository. For instance, if the repository is cloned to ~/workplace/iam-policy-autopilot, you should select or enter ~/workplace/iam-policy-autopilot/power-iam-policy-autopilot.
  5. Kiro should automatically install a new Kiro power called IAM Policy Autopilot within your Kiro code editor. This power should be visible in the Powers menu.

Why use IAM Policy Autopilot's Kiro Power?

Kiro powers generally offer a more refined experience than traditional MCP servers because they enable MCP tools to be loaded more selectively & deliberately, reducing LLM token usage and avoiding LLM context overcrowding.

IAM Policy Autopilot's Kiro power specifically enhances the traditional MCP experience, for multiple reasons:

  1. This Kiro Power provides your LLM agent with more steering guidance, offering it more information on the specific use cases and best practices of our MCP tooling.
  2. This Kiro power prompts your LLM agent to give a tutorial of the MCP tools offered by IAM Policy Autopilot, allowing you to better understand how our MCP tooling assists your use case.
  3. This Kiro Power provides your LLM agent with step-by-step onboarding validation, allowing it to detect any problems with installations and provide remediation steps for those problems.

Network Requirements

IAM Policy Autopilot makes HTTPS requests at runtime to the AWS service reference endpoint to fetch up-to-date AWS service metadata used for policy generation. This endpoint must be reachable from the machine running the tool.

Corporate networks and proxies

If your network uses a web proxy, set the HTTPS_PROXY environment variable:

export HTTPS_PROXY=http://proxy.example.com:8080

See the reqwest proxy documentation for supported proxy URL formats.

SSL inspection

IAM Policy Autopilot uses your operating system's native certificate store for TLS verification. If your network performs SSL/TLS inspection (traffic re-signing), the inspection CA certificate must be installed in your OS certificate store. Consult your IT team if you are unsure whether this is already configured.

Firewall allowlisting

If outbound HTTPS traffic is restricted, allow access to:

Endpoint Protocol Purpose
servicereference.us-east-1.amazonaws.com HTTPS AWS service metadata for policy generation

CLI Usage

The iam-policy-autopilot CLI tool provides three main commands:

Generate IAM policies from source code and fix AccessDenied errors

Usage: iam-policy-autopilot <COMMAND>

Commands:
  fix-access-denied  Fix AccessDenied errors by analyzing and optionally applying IAM policy changes
  generate-policies    Generates complete IAM policy documents from source code or a Terraform plan
  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

Commands

generate-policies - Generates complete IAM policy documents from application source code or a Terraform plan

iam-policy-autopilot generate-policies <inputs> [OPTIONS]

The inputs are either application source code or a Terraform plan in JSON form. The input kind is detected automatically and the two cannot be mixed in a single invocation.

Example (source code):

iam-policy-autopilot generate-policies \
  ./src/app.py \
  --region us-east-1 \
  --account 123456789012 \
  --pretty

Example (Terraform plan). The plan must be in JSON form; produce it from a saved plan with terraform show -json:

terraform plan -out=plan.tfplan          # write the (binary) plan
terraform show -json plan.tfplan > plan.json   # render it to JSON
iam-policy-autopilot generate-policies plan.json --pretty

Options:

  • --region <REGION> - AWS region for resource ARNs
  • --account <ACCOUNT> - AWS account ID for resource ARNs
  • --service-hints <SERVICES> - Limit analysis to only the services your application actually uses if you know them. This helps reduce unnecessary permissions.
  • --upload-policies <PREFIX> - Upload generated policies to AWS IAM with the specified prefix
  • --pretty - Pretty-print JSON output

fix-access-denied - Fix AccessDenied errors by analyzing and optionally applying IAM policy changes

iam-policy-autopilot fix-access-denied <access-denied-error-message> [OPTIONS]

Example:

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"

Options:

  • --yes - Auto-apply policy changes without confirmation

mcp-server - Start MCP server locally

iam-policy-autopilot mcp-server [OPTIONS]

Options:

  • --transport <TRANSPORT> - Transport type: stdio (default) or http

Example with HTTP transport:

# Start server at http://127.0.0.1:8001/mcp
iam-policy-autopilot mcp-server --transport http

Build Instructions

Prerequisites

  • Rust (latest stable version)
  • Git
  • Python 3
  • CMake (Windows only)

Setup

Clone the repository with submodules:

git clone --recurse-submodules https://github.com/awslabs/iam-policy-autopilot.git
cd iam-policy-autopilot

Build the project:

cargo build --release

The compiled binary will be located at target/release/iam-policy-autopilot.

Using the Built Binary with MCP

If you build from source, you can configure MCP clients to use the compiled binary:

{
  "mcpServers": {
    "iam-policy-autopilot": {
      "command": "/path/to/iam-policy-autopilot",
      "args": ["mcp-server"]
    }
  }
}

Workspace Structure

This workspace contains several crates that work together:

  • iam-policy-autopilot-policy-generation/ - Core library providing SDK extraction and enrichment capabilities
  • iam-policy-autopilot-access-denied/ - Core library for parsing AccessDenied errors and synthesizing IAM policies
  • iam-policy-autopilot-tools/ - Policy upload utilities and AWS integration tools
  • iam-policy-autopilot-cli/ - Unified CLI tool providing all commands
  • iam-policy-autopilot-mcp-server/ - MCP server integration for IDE and tool integration

Development

Running Tests

# Run all tests
cargo test --workspace

# Run tests for specific crate
cargo test -p iam-policy-autopilot-cli
cargo test -p iam-policy-autopilot-access-denied
cargo test -p iam-policy-autopilot-policy-generation

# Run integration tests
cargo test -p iam-policy-autopilot-cli --test integration_tests

Building Release Version

cargo build --release

The compiled binary will be located at target/release/iam-policy-autopilot.

Security

See CONTRIBUTING for more information.

License

This project is licensed under the Apache-2.0 License.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

iam_policy_autopilot-0.3.0-py3-none-win_arm64.whl (14.8 MB view details)

Uploaded Python 3Windows ARM64

iam_policy_autopilot-0.3.0-py3-none-win_amd64.whl (15.1 MB view details)

Uploaded Python 3Windows x86-64

iam_policy_autopilot-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (16.1 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

iam_policy_autopilot-0.3.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (15.5 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

iam_policy_autopilot-0.3.0-py3-none-macosx_11_0_arm64.whl (15.3 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

iam_policy_autopilot-0.3.0-py3-none-macosx_10_12_x86_64.whl (15.7 MB view details)

Uploaded Python 3macOS 10.12+ x86-64

File details

Details for the file iam_policy_autopilot-0.3.0-py3-none-win_arm64.whl.

File metadata

File hashes

Hashes for iam_policy_autopilot-0.3.0-py3-none-win_arm64.whl
Algorithm Hash digest
SHA256 9deb928f88758fbc3de1de94a28efd9ee25699c15ddbe0f4eb94ac05b76c2556
MD5 7299d531a9d907401915aee45564a0ea
BLAKE2b-256 569c235789c10cd0424cb7e5f89f16c76c051bc9d3929dcbf45b7bdeb06c2fcf

See more details on using hashes here.

Provenance

The following attestation bundles were made for iam_policy_autopilot-0.3.0-py3-none-win_arm64.whl:

Publisher: build_and_publish.yml on awslabs/iam-policy-autopilot

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file iam_policy_autopilot-0.3.0-py3-none-win_amd64.whl.

File metadata

File hashes

Hashes for iam_policy_autopilot-0.3.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 72c2cb9965168101ba698fcbfbde0f6694d98abc8e1f1d28aa4b746beb2922d6
MD5 af770657f5ba43d5c1d13d36b9b8dc01
BLAKE2b-256 c3e026dfd7e25a2196b7f6d50ad6a7ed7a794b8121bb5379452ae85f916e00f6

See more details on using hashes here.

Provenance

The following attestation bundles were made for iam_policy_autopilot-0.3.0-py3-none-win_amd64.whl:

Publisher: build_and_publish.yml on awslabs/iam-policy-autopilot

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file iam_policy_autopilot-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for iam_policy_autopilot-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7f85b0e6357bd89218498b30e11c7ba3653ba906d561fa4624a76f473a174ba0
MD5 86029ab194230171dbfdf00a2ab5db04
BLAKE2b-256 8ff2aa32ec1bd8ce0d6e02220deb16338fb7ce413076919ed5526c41bb5ef1ff

See more details on using hashes here.

Provenance

The following attestation bundles were made for iam_policy_autopilot-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: build_and_publish.yml on awslabs/iam-policy-autopilot

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file iam_policy_autopilot-0.3.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for iam_policy_autopilot-0.3.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 72ac55e48e5c5b73006ef63467ca9516af1fe0f06f156a6dfa9032decd1b1fd4
MD5 3873a4510f432c7b1d74cef2888dbb58
BLAKE2b-256 5b97b28af77f49d7957ab0eabc5180c181e401fa0048ab8947ceaa4a65a0b502

See more details on using hashes here.

Provenance

The following attestation bundles were made for iam_policy_autopilot-0.3.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: build_and_publish.yml on awslabs/iam-policy-autopilot

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file iam_policy_autopilot-0.3.0-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for iam_policy_autopilot-0.3.0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8069d905e7b0b387a20299c25027a258041fd91be782bcfa24a52a77d38c8871
MD5 67e56bc54067c2a1d4795613908edd2b
BLAKE2b-256 93cc00d94db3cb350332a40d46c7d912c3b532bbd0c0f9ca4181697bc06968ff

See more details on using hashes here.

Provenance

The following attestation bundles were made for iam_policy_autopilot-0.3.0-py3-none-macosx_11_0_arm64.whl:

Publisher: build_and_publish.yml on awslabs/iam-policy-autopilot

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file iam_policy_autopilot-0.3.0-py3-none-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for iam_policy_autopilot-0.3.0-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 580405426be14e6744e2127b86c927d7f3a83826b0e850225317e2c5e23016d5
MD5 5c4e4a8c52b4cd3f0dedbfa72b50e047
BLAKE2b-256 619ef8015328830b83512a25532f4fe24fb93d932ad0362235448c49e93b8a4d

See more details on using hashes here.

Provenance

The following attestation bundles were made for iam_policy_autopilot-0.3.0-py3-none-macosx_10_12_x86_64.whl:

Publisher: build_and_publish.yml on awslabs/iam-policy-autopilot

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.3.0 This release

6 files

0.2.3

6 files

0.2.2

6 files

0.2.1

6 files

0.2.0

6 files

0.1.4

6 files

0.1.3

6 files

0.1.2

6 files

0.1.1

6 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page