
AccessDeniedとなるポリシーエラーを解消させるIAM Policy Autopilotのfix-access-deniedを試してみた #AWSreInvent
こんにちは、臼田です。
みなさん、re:Invent 2025楽しんですか?
今回は新しく追加されたIAM Policy Autopilotの検証をやっていきます。
リリース時のやってみたはこちら。
概要
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アクセス権限など他のものはありません。

普通ですね。
fix-access-deniedの確認
Lambda関数を実行すると失敗します。

エラーコードをこのまま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を確認すると、既存のポリシーはそのままで新しくポリシーが追加される形になっていました。

既存に手を加えず影響を少なくしているんですね、なるほど。
そして、権限不足が解消され無事実行できました。

考察
上手く修復できたことも良い点ですが、それ以上に現状のエラーフォーマットがしっかりと不足している情報を細かく提供してくれていることによって上手く動作するようになっていると感じました。ここの重要性がありますね。
エラーメッセージだけでこの動作をすることからわかりますが、IAM Policy Autopilotのコードではかなり定型的なポリシー不足の要素抽出することで実現しています。
今回は直接的にエラーに対応するポリシーが作成されましたが、これをループすることを自動化したりすることで正常に成功するまで自動で動いてくれる仕組みが出来上がりそうですね。
ぜひ活用していきましょう!







