
IAMポリシー作成を支援する、Model Context Protocol (MCP) サーバーおよびコマンドラインツールである、IAM Policy Autopilot が登場しました。
AWS announces IAM Policy Autopilot to help builders generate IAM policies from code - AWS
IAM Policy AutopilotはGitHubで公開されています。
アップデート概要
アプリケーションコードをローカルで分析し、必要なIAMポリシーを作成できる
Kiro、Claude Code、Cursor などの AI コーディングアシスタントと統合され、Python、TypeScript、Go アプリケーションをサポート
CLIで利用
uvxにより、追加のインストールなく IAM Policy Autopilot を直接実行できます。
$ uvx iam-policy-autopilot Installed 1 package in 5ms 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 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 versio
筆者が過去に公開したハンズオン記事内で登場するLambda関数から、ポリシーを生成してみます。
Lambda関数を引数にして実行します。
$ uvx iam-policy-autopilot generate-policies jump-chengemanager-lambda-checkgroup.py
{"Policies":[{"Policy":{"Id":"IamPolicyAutopilot","Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":["iam:ListUserTags","iam:RemoveUserFromGroup","iam:UntagUser"],"Resource":["arn:aws:iam::*:group/*","arn:aws:iam::*:user/*"]},{"Effect":"Allow","Action":["iam:ListUsers"],"Resource":["*"]},{"Effect":"Allow","Action":["kms:Decrypt","kms:GenerateDataKey"],"Resource":["arn:aws:kms:*:*:key/*"],"Condition":{"StringLike":{"kms:ViaService":["sns.*.amazonaws.com"]}}},{"Effect":"Allow","Action":["sns:Publish"],"Resource":["arn:aws:sns:*:*:*"]}]},"PolicyType":"Identity"}]}
prettyで整形します。
$ uvx iam-policy-autopilot generate-policies jump-chengemanager-lambda-checkgroup.py --pretty { "Policies": [ { "Policy": { "Id": "IamPolicyAutopilot", "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:ListUserTags", "iam:RemoveUserFromGroup", "iam:UntagUser" ], "Resource": [ "arn:aws:iam::*:group/*", "arn:aws:iam::*:user/*" ] }, { "Effect": "Allow", "Action": [ "iam:ListUsers" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": [ "arn:aws:kms:*:*:key/*" ], "Condition": { "StringLike": { "kms:ViaService": [ "sns.*.amazonaws.com" ] } } }, { "Effect": "Allow", "Action": [ "sns:Publish" ], "Resource": [ "arn:aws:sns:*:*:*" ] } ] }, "PolicyType": "Identity" } ] }
大きく外れていないと思います。
コード内のAPIから判断して、ポリシーを生成していると思われます。
KMSは使ってないですが、そのあたりはAWSの知見により付与されていると考えられます。
MCPサーバーで利用
ここでは、Kiro CLIを使います。
Kiro CLIにIAM Policy Autopilot MCPサーバーを追加します。
> kiro-cli mcp add \ --name iam-policy-autopilot \ --command "uvx" \ --args "iam-policy-autopilot","mcp-server" > I'll help you add the IAM Policy Autopilot MCP server to your Kiro CLI configuration. I will run the following command: kiro-cli mcp add --name iam-policy-autopilot --command "uvx" --args "iam-policy-autopilot","mcp-server" (using tool: shell) Purpose: Add IAM Policy Autopilot MCP server to Kiro CLI Allow this action? Use 't' to trust (always allow) this tool for the session. [y/n/t]: > t ✓ Added MCP server 'iam-policy-autopilot' to workspace config in /home/<User>/.kiro/settings/mcp.json - Completed in 0.107s > Successfully added the IAM Policy Autopilot MCP server! The server has been configured in your workspace at /home/<User>/.kiro/settings/mcp.json. The MCP server will now be available in your Kiro CLI sessions, providing additional tools for IAM policy management and automation. ▸ Credits: 0.05 • Time: 1m 18s
追加されてたことを確認します。
> /mcp iam-policy-autopilot ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ [2025:01:25]: ✓ iam-policy-autopilot loaded in 0.48 s
自然言語で依頼してみます。
途中でリージョンとアカウントIDを聞かれるので答えます。
また、IAM Policy Autopilotを使う許可も求められるので承認します。
> Lambda関数である「jump-chengemanager-lambda-checkgroup.py」に割り当てるIAMポリシーを生成してください。
> IAMポリシーを生成するために、まずLambda関数のコードを確認させてください。
Reading file: /home/<User>/jump-chengemanager-lambda-checkgroup.py, all lines (using tool: read)
✓ Successfully read 2814 bytes from /home/<User>/jump-chengemanager-lambda-checkgroup.py
- Completed in 0.0s
> このLambda関数のIAMポリシーを生成します。AWSのリージョンとアカウントIDを教えてください。
▸ Credits: 0.07 • Time: 7s
> us-east-1
> AWSアカウントIDも教えてください。
▸ Credits: 0.02 • Time: 3s
> <AccountID>
Running tool generate_application_policies with the param (from mcp server: iam-policy-autopilot)
⋮ {
⋮ "SourceFiles": [
⋮ "/home/<User>/jump-chengemanager-lambda-checkgroup.py"
⋮ ],
⋮ "Region": "us-east-1",
⋮ "Account": "<AccountID>"
⋮ }
Allow this action? Use 't' to trust (always allow) this tool for the session. [y/n/t]:
> y
- Completed in 1.942s
> Lambda関数用のIAMポリシーを生成しました。以下の内容を確認してください:
json
{
"Id": "IamPolicyAutopilot",
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iam:ListUserTags",
"iam:RemoveUserFromGroup",
"iam:UntagUser"
],
"Resource": [
"arn:aws:iam::<AccountID>:group/*",
"arn:aws:iam::<AccountID>:user/*"
]
},
{
"Effect": "Allow",
"Action": [
"iam:ListUsers"
],
"Resource": [
"*"
]
},
{
"Effect": "Allow",
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey"
],
"Resource": [
"arn:aws:kms:us-east-1:<AccountID>:key/*"
],
"Condition": {
"StringEquals": {
"kms:ViaService": [
"sns.us-east-1.amazonaws.com"
]
}
}
},
{
"Effect": "Allow",
"Action": [
"sns:Publish"
],
"Resource": [
"arn:aws:sns:us-east-1:<AccountID>:*"
]
}
]
}
このポリシーには以下の権限が含まれています:
- **IAM操作**: ユーザータグの一覧取得、グループからのユーザー削除、タグの削除、ユーザー一覧の取得
- **SNS操作**: SNSトピックへのメッセージ発行
- **KMS操作**: SNS経由でのKMSキーの復号化とデータキー生成(SNSトピックが暗号化されている場合に必要)
このポリシーで問題なければ、Lambda関数の実行ロールにアタッチしてください。
▸ Credits: 0.12 • Time: 1m 10s
CLIと同じようなポリシーができましたが、リージョンやアカウントIDを聞かれた分、より具体的になっています。
まとめ
複雑なコードになると、IAMポリシーの作成は難しくなります。
コードだけでポリシーを作成してくれるので、調査にかかる時間を削減できると思います。
最小権限とは言えないので、生成されたポリシーはよく吟味することが必要です。