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については今回ふれていないので、また機会があれば記事を書きたいと思います。 ではまた!