AccessDeniedとなるポリシーエラーを解消させるIAM Policy Autopilotのfix-access-deniedを試してみた #AWSreInvent

AccessDeniedとなるポリシーエラーを解消させるIAM Policy Autopilotのfix-access-deniedを試してみた #AWSreInvent

AccessDeniedがでたとき、簡単に修復できるようになりましたよ
2025.12.02

こんにちは、臼田です。

みなさん、re:Invent 2025楽しんですか?

今回は新しく追加されたIAM Policy Autopilotの検証をやっていきます。

リリース時のやってみたはこちら。

https://dev.classmethod.jp/articles/iam-policy-autopilot-generate-iam-policies-code/

概要

IAM Policy AutopilotではIAMポリシーの作成や修正を支援するOSSです。

その中で実行できる機能は大きく2つあります。

  • generate-policies(アプリケーションコードからポリシー生成)
  • fix-access-denied(エラーメッセージからポリシー修正)

今回はfix-access-deniedを使って、実際にどのように動作して修正できるか確認します。

対象環境

S3にアクセスするための権限が不足しているLambda関数を用意します。この動作を見てみます。

実際のコードは簡単にこんな感じです。

import json
import boto3
import os

s3_client = boto3.client('s3')

def lambda_handler(event, context):
    bucket_name = 'testbucketxxxx'
    object_key = 'test.html'

    response = s3_client.get_object(
        Bucket=bucket_name,
        Key=object_key
    )
    content = response['Body'].read().decode('utf-8')

    return {
        'statusCode': 200,
        'body': content
    }

この時点でアタッチされたIAM RoleのポリシーはLambdaのデフォルト作成時の状態で、S3アクセス権限など他のものはありません。

001_iam_policy_autopilot_denied

普通ですね。

fix-access-deniedの確認

Lambda関数を実行すると失敗します。

002_iam_policy_autopilot_denied

エラーコードをこのままCLIでfix-access-deniedの引数として渡します。

$ uvx iam-policy-autopilot fix-access-denied "[ERROR] ClientError: An error occurred (AccessDenied) when calling the GetObject operation: User: arn:aws:sts::999999999999:assumed-role/s3_read-role/s3_read is not authorized to perform: s3:ListBucket on resource: "arn:aws:s3:::testbucket999999999999" because no identity-based policy allows the s3:ListBucket action"
IAM Policy Autopilot Plan
Principal: arn:aws:sts::999999999999:assumed-role/s3_read-role/s3_read
Action:    s3:ListBucket
Resource:  arn:aws:s3:::testbucket999999999999
Denial:    ImplicitIdentity

Proposed permissions:
  - s3:ListBucket

Apply this fix now? [y/N] y
Applied inline policy 'IamPolicyAutopilot-s3_read-role' to Role/s3_read-role

この実行にはエラーメッセージだけで良いんですね。ダブルクオーテーションが途中で使われているので上手く動かなそうですがこれでもちゃんと動いてくれました。ありがたや。

そしてついでに修復するか聞かれるので y とすると修正されたようです。

実際にIAM Roleを確認すると、既存のポリシーはそのままで新しくポリシーが追加される形になっていました。

003_iam_policy_autopilot_denied

既存に手を加えず影響を少なくしているんですね、なるほど。

そして、権限不足が解消され無事実行できました。

004__iam_policy_autopilot_denied

考察

上手く修復できたことも良い点ですが、それ以上に現状のエラーフォーマットがしっかりと不足している情報を細かく提供してくれていることによって上手く動作するようになっていると感じました。ここの重要性がありますね。

エラーメッセージだけでこの動作をすることからわかりますが、IAM Policy Autopilotのコードではかなり定型的なポリシー不足の要素抽出することで実現しています。

今回は直接的にエラーに対応するポリシーが作成されましたが、これをループすることを自動化したりすることで正常に成功するまで自動で動いてくれる仕組みが出来上がりそうですね。

ぜひ活用していきましょう!

この記事をシェアする

FacebookHatena blogX

関連記事