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