0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

もう IAM ポリシーで時間を溶かさない (IAM Policy Autopilot)

Last updated at Posted at 2025-12-31

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 を使ってみてください。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?