iam-policy-autopilot の実践的な使い方(設計・実行・AI連携)
IAM ポリシーの設計や AccessDenied の調査に、
何時間も溶かした経験はありませんか?
- どの Action が足りないのか分からない
- Resource の ARN を毎回調べている
- 結局 AdministratorAccess を付けてしまう
iam-policy-autopilot は、
コード・エラー・AI を起点に
IAM ポリシーを「考える作業」から解放してくれるツールです。
この記事では、
iam-policy-autopilot の使い方を 3 つに大別して整理します。
この記事で扱うこと
- iam-policy-autopilot の 3 つの使い方
- それぞれ「何ができるのか」
- どんな場面で使うべきか
- 実務での注意点(重要)
※ セットアップ手順・インストール方法は別記事にまとめています
👉 https://qiita.com/s-tokura/items/2c9e0856613b98efce12
iam-policy-autopilot の使い方は 3 つに大別できる
① コードから IAM ポリシーを生成する
目的
- 実装前 / 実装直後に
- 「このコードに必要な最小 IAM」を作る
使うコマンド(test_app.pyは実際のパスを指定)
iam-policy-autopilot generate-policies test_app.py \
--region ap-northeast-1 \
--account 123456789012 \
--pretty
各オプションの意味
-
--region ap-northeast-1- IAM ポリシー内の ARN に含まれるリージョン を指定
- Lambda / ECS / Batch が動くリージョンを指定する
- 指定しないと ARN が曖昧になる場合がある
-
--account 123456789012- IAM ポリシーに埋め込まれる AWS アカウント ID
- 誤ったアカウントへの IAM 変更を防ぐ安全装置としても使われる
-
--pretty- JSON を人が読みやすい形に整形する
- 権限内容自体は変わらない(表示のみ)
-
--service-hints <SERVICES>- アプリケーションが実際に使用するサービスがわかっている場合は、分析対象をそのサービスに限定します。これにより、不要な権限を削減できます。
-
--upload-policies <PREFIX>- 生成されたポリシーを指定されたプレフィックスでAWS IAMにアップロードします
できること
- boto3 / AWS SDK の呼び出しを静的解析
- 使用している AWS API から Action を抽出
- 最小権限の IAM ポリシーを生成
向いている場面
- Lambda / ECS / Batch の実装時
- Terraform / CloudFormation に渡す前
- IAM 設計レビュー前
ポイント
- AWS へは一切アクセスしない
- CI でも安全に実行可能
② AccessDenied エラーから IAM を修正する(運用フェーズ)
目的
- 実行時に出た AccessDenied を原因解明・即修正
- エラーメッセージを人力で解析しない
使うコマンド
iam-policy-autopilot fix-access-denied \
"User: arn:aws:iam::123456789012:role/test-role is not authorized to perform: s3:GetObject on resource: arn:aws:s3:::example-bucket/input/data.json because no identity-based policy allows the s3:GetObject action"
出力例
IAM Policy Autopilot Plan
Principal: arn:aws:iam::123456789012:role/test-role
Action: s3:GetObject
Resource: arn:aws:s3:::example-bucket/*
Denial: ImplicitIdentity
Proposed permissions:
- s3:GetObject
- オプション:
-yes- 確認なしでポリシーの変更を自動適用する
できること
- AccessDenied メッセージを構造化
- Action / Resource / Principal を抽出
- 追加すべき IAM 権限を提案
向いている場面
- Lambda / ECS 実行時エラー
- CloudWatch Logs に AccessDenied が出たとき
- IAM に詳しくないメンバーの支援
③ MCP サーバーで AI / IDE と連携する(AI利用時)
AI がコード生成時に MCP サーバーへアクセスし、
適切な IAM ポリシーを生成する、という使い方になります。
(CLIからは使用しない)
目的
- AI が IAM を間違えないようにする
- 人が IAM を考えなくて済む状態を作る
AI がコード生成時に MCP サーバーへアクセスし、
iam-policy-autopilot を IAM 専用の知識源として利用します。
MCP サーバー連携とは?
iam-policy-autopilot は MCP(Model Context Protocol) に対応しています。
これにより、
- AI(ChatGPT / IDE)がコードを生成
- 必要な AWS 権限を推測
- iam-policy-autopilot を内部的に呼び出し
- 正しい IAM ポリシー案を自動生成
という流れが可能になります。
MCP は比較的新しい仕組みです。
利用時は公式ドキュメント・最新情報を必ず確認してください。
実際に使ってみる:コードから IAM ポリシー生成
テストコード例
# app.py
import boto3
def handler():
s3 = boto3.client("s3")
response = s3.get_object(
Bucket="example-bucket",
Key="input/data.json"
)
body = response["Body"].read()
print(body)
if __name__ == "__main__":
handler()
通常出力(service-hints なし)
iam-policy-autopilot generate-policies app.py \
--region ap-northeast-1 \
--account 123456789012 \
--pretty
出力例
{
"Policies": [
{
"Policy": {
"Id": "IamPolicyAutopilot",
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"kms:Decrypt"
],
"Resource": [
"arn:aws:kms:ap-northeast-1:123456789012:key/*"
],
"Condition": {
"StringEquals": {
"kms:ViaService": [
"s3.ap-northeast-1.amazonaws.com"
]
}
}
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetObjectLegalHold",
"s3:GetObjectRetention",
"s3:GetObjectTagging",
"s3:GetObjectVersion"
],
"Resource": [
"arn:aws:s3:::*/*",
"arn:aws:s3:ap-northeast-1:123456789012:accesspoint/*/object/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3-object-lambda:GetObject"
],
"Resource": [
"arn:aws:s3:::*/*",
"arn:aws:s3:ap-northeast-1:123456789012:accesspoint/*/object/*"
]
}
]
},
"PolicyType": "Identity"
}
]
}
実際に生成されるポリシーは上記のものでしたが、やや過剰なポリシー(包括的)なものが生成されるようでした。
最小限の権限は以下の権限が考えられます。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::example-bucket/input/data.json"
}
]
}
推奨:service-hints を使う
iam-policy-autopilot generate-policies app.py \
--service-hints s3 iam \
--region ap-northeast-1 \
--account 123456789012 \
--pretty
-
--service-hintsを使うことで- 余計な Action の混入を防止
- 最小権限に近づけられる
実務での正しい使い方まとめ
- IAM を考えない (あくまで出発点として)
- エラーから逆算する
生成されたポリシーからわかるように、包括的なポリシー生成になります。
とりあえずのポリシーを生成し、Access Analizer で分析したり、必要なものだけに絞るといった手順が必要になります。
結論
IAM Policy Autopilot は、
IAM を自動化するツールではなく、
IAM で無駄な時間を溶かさないための出発点を作るツールです。
- 細かいIAMは制御が必要
- AI と組み合わせることで真価を発揮するかも
IAM に疲れたら、
まず Autopilot を使ってみてください。