のぴぴのメモ

自分用のLinuxとかの技術メモ

IAM Policy Simulatorの結果をJSON/CSV形式で出力するツール

作成したIAMポリシーやPermissions BoundaryのテストのためにIAM Policy Simulatorを利用すると便利ですが、テスト用のIAMアクションをGUIで作成しないといけないとか、結果をJSONCSV形式の簡易な一覧で取得できない点が悩みでしたので、Pythonで簡単なツールを作ってみました。

f:id:nopipi:20220322233007p:plain

使い方

コードは下記のGitHubレポジトリを参照下さい。セットアップ方法も以下のGitHubレポジトリを参照下さい。

評価対象のアクション一覧を準備

IAM Policy Simulatorで評価したいアクション一覧を以下の形式のJSONで準備します。

{
    "Action": [
        "iam:CreateServiceSpecificCredential",
        "iam:DeactivateMFADevice",
        <中略>
        "iam:DeletePolicyVersion",
        "iam:ListUserTags"
    ]
}
{{<
** IAM Policy Simulatorでの評価
ツールの実行
>|sh|
./simulate_iampolicy.py [-h] [-P PROFILE] [-c] -p POLICY_SOURCE_ARN -a ACTION_LIST_FILE
  • 必須オプション
    • -p POLICY_SOURCE_ARN : IAMユーザ/グループ/ロールのARNを指定
    • -a ACTION_LIST_FILE : 評価したいアクション一覧のJSONファイルパスを指定
  • 任意オプション
    • -P PROFILE : AWS CLI/boto3のプロファイルを明示的に指定する
    • -c: 結果をCSV形式で出力したい場合に指定。未指定時はJSON形式で結果を出力する
(実行例1) IAMロールに対して、IAMのアクション一覧を評価しJSON形式で出力する
./simulate_iampolicy.py -p 'arn:aws:iam::999999999999:role/RoleName' -a 'actions/iam_all_actions.json'
(実行例2) Hogeプロファイルのアカウントの特定IAMユーザ対し、S3のアクション一覧を評価しCSV形式で出力する
./simulate_iampolicy.py -P Hoge -c -p 'arn:aws:iam::999999999999:user/UserName' -a 'actions/s3_all_actions.json'

実行結果

[
  {
    "EvalActionName": "iam:CreateServiceSpecificCredential",
    "EvalDecision": "allowed"
  },
  {
    "EvalActionName": "iam:DeactivateMFADevice",
    "EvalDecision": "explicitDeny"
  },
]
EvalActionName,EvalDecision
iam:CreateServiceSpecificCredential,allowed
iam:DeactivateMFADevice,explicitDeny
  • 結果内容
    • EvalActionName : 評価対象のアクション名
    • EvalDecision : 評価結果
      • allowed : アクションを許可
      • explicitDeny : アクションを明示的に拒否
      • implicitDeny : アクションを暗黙的に拒否