IAMロールにアタッチされたポリシーを一度に出力したかったためスクリプトを書いたので共有します。
やりたいこと
IAMロールには以下の3種類のポリシーがアタッチ可能です
- マネージドポリシー
- カスタムポリシー
- インラインポリシー
これをAPIやCLIでサクッと取得しようとすると、1発ではいきません。
- アタッチされたポリシーのドキュメント取得
- list-attached-role-policies -> get-policy -> get-policy-version の3段階必要
- インラインポリシーのドキュメント取得
- list-role-policies -> get-role-policy の2段階必要
上記を1発で行うスクリプトを書きました。
スクリプト
https://github.com/shu85t/aws_describe_iam_role_policy_documents
使い方
python3 describe_role_documents.py {role_name}
AWS Cloud Shellでの利用例
準備
- CloudShellを起動
- スクリプトファイルをアップロード(Actions -> Upload file)
以下を実行
python3 describe_role_documents.py {role_name}
CloudShellにはPython3,boto3がプリインストールされています。2023/08/10時点でCloudShellのPython3のバージョンが3.7.16だったので、それ以降で動くようにしています。
出力例
- マネージドポリシー:IAMFullAccess
- カスタムポリシー:shuichi_custom_policy_test
- インラインポリシー: inline_policy_test
- インラインポリシー: s3test
の4つがついたIAMロールを指定した場合の出力例です。
--- arn:aws:iam::aws:policy/IAMFullAccess (ATTACHED) { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:*", "organizations:DescribeAccount", "organizations:DescribeOrganization", "organizations:DescribeOrganizationalUnit", "organizations:DescribePolicy", "organizations:ListChildren", "organizations:ListParents", "organizations:ListPoliciesForTarget", "organizations:ListRoots", "organizations:ListPolicies", "organizations:ListTargetsForPolicy" ], "Resource": "*" } ] } --- arn:aws:iam::443553437457:policy/shuichi_custom_policy_test (ATTACHED) { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "*" } ] } --- inline_policy_test (INLINE) { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "lambda:ListProvisionedConcurrencyConfigs", "lambda:ListFunctionEventInvokeConfigs", "lambda:ListFunctions", "lambda:ListFunctionsByCodeSigningConfig", "lambda:ListVersionsByFunction", "lambda:ListAliases", "lambda:ListEventSourceMappings", "lambda:ListFunctionUrlConfigs", "lambda:ListLayerVersions", "lambda:ListLayers", "lambda:ListCodeSigningConfigs" ], "Resource": "*" } ] } --- s3test (INLINE) { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::clp-shuichi-test-01/*" } ] }
終わりに
このスクリプトを書いたきっかけは特定の権限をもったIAMロールをリストアップしたかったためです。 IAM Boundaryについては今回ふれていないので、また機会があれば記事を書きたいと思います。 ではまた!