[AWS re:Invent 2025 参加レポート]IAM Policy Autopilotのセッションに参加してきました。

この記事を書いたメンバー:

内藤 泰地

[AWS re:Invent 2025 参加レポート]IAM Policy Autopilotのセッションに参加してきました。

目次

BeeXの内藤です。
12/01(月)から12/05(金)にかけて開催されたAWS Re:Invent2025に参加してきました。

今回はIAM Policy AutopilotのCodeTalkに参加してきたので、内容のご紹介と実際にどのようなものか簡単に動作確認してみたいと思います。

IAM Policy Autopilotとは?

IAM Policy Autopilotは、AWSが提供するオープンソースツールで、アプリケーションコードを分析して必要なIAMポリシーを自動生成します。

IAMポリシー作成の課題

  • Administrator: 権限が広範囲すぎてセキュリティリスクが高い
  • AWSマネージドポリシー: すべての権限をカバーしていない
  • カスタマー管理ポリシー: 作成に時間がかかり隠れた依存関係も見逃しやすい
  • AIコーディングアシスタント: 存在しないアクションを生成することがある

IAM Policy Autopilotの特徴

READMEより引用(和訳)

Fast

IAM Policy Autopilotは、ベースラインとなるアイデンティティベースのIAMポリシーを生成することで、開発を加速します。AIコーディングアシスタントがIAM Policy Autopilotを呼び出すことで、アプリケーション内のAWS SDK呼び出しを分析できます。その後、IAM Policy Autopilotは、アプリケーションロールに必要なベースラインIAM権限を自動的に作成します。

Reliable

IAM Policy Autopilotの決定論的なコード分析により、信頼性が高く有効なIAMポリシーを作成し、ポリシーのトラブルシューティングを削減します。MCPサーバーで作成された有効なポリシーを使用することで、ポリシー関連のデバッグに費やす時間を削減し、権限関連の遅延を回避してアプリケーションのデプロイを加速します。

Up-to-date

IAM Policy Autopilotは、最新のAWSサービスと機能に対応し続けるため、ビルダーやコーディングアシスタントが最新のAWS IAM権限の知識にアクセスできます。これにより、アプリケーションロールの権限をAWSの進化する機能に合わせて最新の状態に保つことができます。

必要な権限を一つずつ洗い出してポリシーを設定していく方法は、セキュリティは高いですが、作成までに時間がかかります。またAIエージェントを利用する方法も存在しないアクションを生成することがあります。そのため最新のAWSリソースに対応したポリシーの情報を取得できるIAM Policy Autopilotはとても良い選択肢だと思いました。

現在の制限事項

  • リソースベースのポリシー、権限境界、サービス制御ポリシー (SCP)、リソース制御ポリシー (RCP) は作成しない
  • 最小権限を保証しない(機能性を優先)

使ってみた

サンプルコードの準備

今回はClaude Codeを利用して、顧客ごとに専用のS3バケットとKMSキーを作成するPythonコードを作成してもらいました。
※今回はIAM Policy Autopilotの動作確認が主な目的のため、Pythonコード自体の動作確認は実施しておりません

./src/customer_onboarding.py

import boto3
import json

s3_client = boto3.client('s3')
kms_client = boto3.client('kms')

def lambda_handler(event, context):

    customer_id = event['customer_id']
    customer_name = event['customer_name']

    bucket_name = f"customer-data-{customer_id}"

    try:
        s3_client.head_bucket(Bucket=bucket_name)
        return {
            'statusCode': 200,
            'body': json.dumps(f'Bucket {bucket_name} already exists')
        }
    except:
        pass

    key_response = kms_client.create_key(
        Description=f'KMS key for customer {customer_name}',
        Tags=[
            {
                'TagKey': 'Customer',
                'TagValue': customer_name
            }
        ],
        KeyPolicy=json.dumps({
            "Version": "2012-10-17",
            "Statement": [{
                "Sid": "Enable IAM User Permissions",
                "Effect": "Allow",
                "Principal": {"AWS": f"arn:aws:iam::{context.invoked_function_arn.split(':')[4]}:root"},
                "Action": "kms:*",
                "Resource": "*"
            }]
        })
    )

    key_id = key_response['KeyMetadata']['KeyId']

    kms_client.create_alias(
        AliasName=f'alias/customer-{customer_id}',
        TargetKeyId=key_id
    )

    s3_client.create_bucket(
        Bucket=bucket_name,
        CreateBucketConfiguration={
            'LocationConstraint': 'ap-northeast-1'
        }
    )

    s3_client.put_bucket_encryption(
        Bucket=bucket_name,
        ServerSideEncryptionConfiguration={
            'Rules': [{
                'ApplyServerSideEncryptionByDefault': {
                    'SSEAlgorithm': 'aws:kms',
                    'KMSMasterKeyID': key_id
                }
            }]
        }
    )

    return {
        'statusCode': 200,
        'body': json.dumps({
            'message': 'Customer resources created successfully',
            'bucket': bucket_name,
            'kms_key_id': key_id
        })
    }

CLI利用の場合

# オプション1:uvx(推奨:インストール不要)
$ pip install uv
uvx iam-policy-autopilot generate-policies <SOURCE_FILES> 

# オプション2:pip
$ pip install iam-policy-autopilot

# オプション3:直接インストール
curl -sSL https://github.com/awslabs/iam-policy-autopilot/raw/refs/heads/main/install.sh | sudo sh

READMEによると上記3つが利用方法として紹介されています。
uvxの利用推奨らしいので、こちらを使って動作を確認したいと思います。
また今回はオプションで実行結果の成形とリージョン、アカウントの指定をしています。

 $ uvx iam-policy-autopilot generate-policies ./src/customer_onboarding.py \
  --pretty \
  --region ap-northeast-1 \
  --account  <AWSアカウントID>

{
  "Policies": [
    {
      "Policy": {
        "Id": "IamPolicyAutopilot",
        "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "s3:CreateBucket",
              "s3:ListBucket",
              "s3:PutBucketAcl",
              "s3:PutBucketObjectLockConfiguration",
              "s3:PutBucketOwnershipControls",
              "s3:PutBucketVersioning",
              "s3:PutEncryptionConfiguration"
            ],
            "Resource": [
              "arn:aws:s3:::*",
              "arn:aws:s3:ap-northeast-1:<AWSアカウントID>:accesspoint/*"
            ]
          },
          {
            "Effect": "Allow",
            "Action": [
              "kms:CreateAlias"
            ],
            "Resource": [
              "arn:aws:kms:ap-northeast-1:<AWSアカウントID>:alias/*",
              "arn:aws:kms:ap-northeast-1:<AWSアカウントID>:key/*"
            ]
          }
        ]
      },
      "PolicyType": "Identity"
    }
  ]
}

コマンドを叩いてからポリシーが出力されるまでの時間はかなり早かったです。
生成されたポリシー内容を確認すると、不要な権限もあるもののたたき台として利用するのであれば十分かなと思います。

MCP利用の場合

今回はClaudeCodeにIAM Policy Autopilot MCPサーバーを追加します。

$ claude mcp add iam-policy-autopilot \
  uvx iam-policy-autopilot mcp-server \
  -s project
Added stdio MCP server iam-policy-autopilot with command: uvx iam-policy-autopilot mcp-server to project config
File modified: <ディレクトリパス>/.mcp.json

$ cat .mcp.json 
{
  "mcpServers": {
    "iam-policy-autopilot": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "iam-policy-autopilot",
        "mcp-server"
      ],
      "env": {}
    }
  }

ではIAMポリシー生成を依頼してみます。

IAM Policy Autopilotを使用して、以下のファイルに必要なIAMポリシーを生成してください。
ファイルパス: <ディレクトリパス>/customer_onboarding.py
AWSアカウントID: <AWSアカウントID>
リージョン: ap-northeast-1 

● IAMポリシーを生成いたします。まず、指定されたファイルを分析してAWSサービスの使用状況を確認し、必要な最小権限のポリシーを生成します。

● iam-policy-autopilot - generate_application_policies (MCP)(SourceFiles: ["<ディレクトリパス>/customer_onboarding.py"], Account: "<AWSアカウントID>",Region: "ap-northeast-1")
  ⎿ {                                                                                                   
      "Policies": [
        "{\"Id\":\"IamPolicyAutopilot\",\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",
    … +7 lines (ctrl+o to expand)

● 生成されたIAMポリシーは以下の通りです:

  生成されたIAMポリシー
  {
    "Id": "IamPolicyAutopilot",
    "Version": "2012-10-17",
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "s3:CreateBucket",
          "s3:ListBucket",
          "s3:PutBucketAcl",
          "s3:PutBucketObjectLockConfiguration",
          "s3:PutBucketOwnershipControls",
          "s3:PutBucketVersioning",
          "s3:PutEncryptionConfiguration"
        ],
        "Resource": [
          "arn:aws:s3:::*",
          "arn:aws:s3:ap-northeast-1:<AWSアカウントID>:accesspoint/*"
        ]
      },
      {
        "Effect": "Allow",
        "Action": [
          "kms:CreateAlias"
        ],
        "Resource": [
          "arn:aws:kms:ap-northeast-1:<AWSアカウントID>:alias/*",
          "arn:aws:kms:ap-northeast-1:<AWSアカウントID>:key/*"
        ]
      }
    ]
  }

  ポリシー分析
  このポリシーは customer_onboarding.py ファイルのコード分析に基づいて生成されており、以下の権限を含みます:

  S3権限
  - バケット作成・設定(暗号化、バージョニング、オーナーシップ制御)
  - バケット一覧表示
  - アクセス制御とオブジェクトロック設定

  KMS権限
  - KMSキーのエイリアス作成

  このポリシーをご確認いただき、要件に合致しているかレビューしてください。 必要に応じて調整や追加の権限設定についてご相談ください。

途中にiam-policy-autopilot - generate_application_policies (MCP)と表示されていることから、想定通りIAM Policy Autopilotが利用されていることがわかります。

終わりに

READMEや公式ブログでは、IAM Policy AutopilotはIAM権限設計の出発点として位置づけられていることが度々記載されています。そのためベースとなるポリシーはIAM Policy Autopilotで作成し、生成されたポリシーをデプロイする前に、セキュリティ要件への適合性を必ず確認し、必要に応じて調整するようにしましょう。



カテゴリー

キーワード

Pick up ピックアップ

Search 記事を探す

クラウド移行やSAPでお困りの場合は、
ぜひ私たちにご相談ください。
03-6260-6240 (受付時間 平日9:30〜18:00)