iam-policy-autopilot セットアップ手順(Windows / Linux)
本記事は、AWS Re:Invent で紹介されたiam-policy-autopilot についての記事です。
iam-policy-autopilot をローカル環境にセットアップし、
Python コードから IAM ポリシーを自動生成するところまでを扱います。
iam-policy-autopilot とは
iam-policy-autopilot は、Python などのコードを静的解析し、
そのコードが利用する AWS API に基づいて
最小権限ベースの IAM ポリシーを自動生成する CLI ツールです。
AWS に実アクセスせず、ローカル環境だけで IAM 設計ができます。
詳細は以下をご確認ください。
https://github.com/awslabs/iam-policy-autopilot/blob/main/README.md
対象読者
- AWS を使ったアプリケーション開発をしている方
- IAM ポリシー設計に時間がかかっている方
- AccessDenied エラーの調査を効率化したい方
- AI コーディング支援と IAM 設計を組み合わせたい方
セットアップ手順(Windows)
1. Python 環境確認
python --version
Python 3.9 以上を推奨します。
2. iam-policy-autopilot インストール
pip install iam-policy-autopilot
3. インストール確認
iam-policy-autopilot --help
ヘルプが表示されればインストール成功です。
セットアップ手順(Linux)
1. Python 環境確認
python3 --version
2. pip 更新(推奨)
python3 -m pip install --upgrade pip
3. iam-policy-autopilot インストール
pip install iam-policy-autopilot
4. インストール確認
iam-policy-autopilot --help
作業ディレクトリ作成(共通)
mkdir iam-policy-autopilot-test
cd iam-policy-autopilot-test
テスト用 Python コード作成
S3 からオブジェクトを取得する簡単なコードを用意します。
# test_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()
コードから IAM ポリシーを生成する
Windows(PowerShell)
iam-policy-autopilot generate-policies test_app.py `
--region ap-northeast-1 `
--account 123456789012 `
--pretty
Linux(bash)
iam-policy-autopilot generate-policies test_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"
}
]
}
ここまででできること
- Python コードをもとに IAM ポリシーを自動生成できる
- AWS 環境にアクセスせず IAM 設計が可能
- 最小権限ベースのポリシーを短時間で作成できる
注意点とベストプラクティス
まだまだ更新中のサービスであるため、最新情報が更新されている可能性があります。公式のドキュメントをご確認ください。
- 生成された IAM ポリシーは必ず人の目でレビューする
- 本番環境ではリソース ARN をより厳密に絞る
- 動的に決まる値(変数で指定されるリソース名)は解析できない
iam-policy-autopilot はあくまで「出発点」を作るツールです。
公式Readme参照
IAM Policy Autopilot は IAM アイデンティティベースのポリシーを生成しますが、S3 バケットポリシーや KMS キーポリシー、リソースコントロールポリシー (RCP)、サービスコントロールポリシー (SCP)、権限境界といったリソースベースのポリシーはサポートしていません。