1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWSにて、ユーザとグループに割り当てたポリシーを出力

Posted at

はじめに

内部統制の一環で、クラウドサービスのユーザ / グループに割り当てたポリシー一覧を出力する必要がありました。
AWSを例にし、CloudShellにて実行できるコマンドで作ってみました。

概要

  • 各ユーザ、各グループのポリシーを、1行ずつ出力します
    • 複数割り当てていれば、複数レコードになります
    • 何も割り当てられていないユーザ / グループは出力されません
  • 以下の情報を出力します
    • AccountId
    • EntityType : User / Group
    • EntityName
    • PolicyType : AWS managed / Customer managed / Inline
    • PolicyName
    • PolicyArn

コマンド

以下のコマンドをクリップボードにコピーして、CloudShellに張り付けて実行します。

# 出力ファイル名を変数化
OUTPUT_FILE="iam_user_group_policies.csv"

# アカウントIDを取得
ACCOUNT_ID=$(aws sts get-caller-identity --query 'Account' --output text)

# 出力CSVのヘッダー作成
echo "AccountId,EntityType,EntityName,PolicyType,PolicyName,PolicyArn" > "$OUTPUT_FILE"

##############################
# ユーザーのポリシー取得
##############################
aws iam list-users --query 'Users[].UserName' --output json | jq -r '.[]' | while read USER_NAME; do
    echo "Processing user: $USER_NAME..."

    # マネージドポリシー(AWS managed / Customer managed 判定)
    aws iam list-attached-user-policies --user-name "$USER_NAME" --query 'AttachedPolicies[]' --output json | \
    jq -r --arg a "$ACCOUNT_ID" --arg e "$USER_NAME" ' .[] | [$a, "User", $e
    , (if .PolicyArn | test("^arn:aws:iam::aws:policy/") then "AWS managed" else "Customer managed" end)
    , .PolicyName, .PolicyArn ] | @csv ' >> "$OUTPUT_FILE"

    # インラインポリシー(常に Inline)
    aws iam list-user-policies --user-name "$USER_NAME" --query 'PolicyNames[]' --output json | \
    jq -r --arg a "$ACCOUNT_ID" --arg e "$USER_NAME" ' .[] | [$a, "User", $e
    , "Inline"
    , ., "N/A"] | @csv ' >> "$OUTPUT_FILE"
done

##############################
# グループのポリシー取得
##############################
aws iam list-groups --query 'Groups[].GroupName' --output json | jq -r '.[]' | while read GROUP_NAME; do
    echo "Processing group: $GROUP_NAME..."

    # マネージドポリシー(AWS managed / Customer managed 判定)
    aws iam list-attached-group-policies --group-name "$GROUP_NAME" --query 'AttachedPolicies[]' --output json | \
    jq -r --arg a "$ACCOUNT_ID" --arg e "$GROUP_NAME" ' .[] | [$a, "Group", $e
    , (if .PolicyArn | test("^arn:aws:iam::aws:policy/") then "AWS managed" else "Customer managed" end)
    , .PolicyName, .PolicyArn ] | @csv ' >> "$OUTPUT_FILE"

    # インラインポリシー(常に Inline)
    aws iam list-group-policies --group-name "$GROUP_NAME" --query 'PolicyNames[]' --output json | \
    jq -r --arg a "$ACCOUNT_ID" --arg e "$GROUP_NAME" ' .[] | [$a, "Group", $e
    , "Inline"
    , ., "N/A"] | @csv ' >> "$OUTPUT_FILE"
done

echo "出力完了: $OUTPUT_FILE"

以下のような形で出力されます。

iam_user_group_policies.csv
AccountId,EntityType,EntityName,PolicyType,PolicyName,PolicyArn
"123456789012","User","Anisphia","Customer managed","StartStopEc2","arn:aws:iam::123456789012:policy/StartStopEc2"
"123456789012","User","Euphyllia","Customer managed","DenyPermissionBoundaryEdit","arn:aws:iam::123456789012:policy/DenyPermissionBoundaryEdit"
"123456789012","User","Xavier_Olivette","AWS managed","AmazonEC2FullAccess","arn:aws:iam::aws:policy/AmazonEC2FullAccess"
"123456789012","User","Xavier_Olivette","AWS managed","AdministratorAccess","arn:aws:iam::aws:policy/AdministratorAccess"
"123456789012","User","Xavier_Olivette","Inline","testPolicyS3","N/A"
"123456789012","Group","testGroup1","Customer managed","DenyPermissionBoundaryEdit","arn:aws:iam::123456789012:policy/DenyPermissionBoundaryEdit"
"123456789012","Group","testGroup1","AWS managed","AdministratorAccess","arn:aws:iam::aws:policy/AdministratorAccess"
"123456789012","Group","testGroup2","Customer managed","StartStopEc2","arn:aws:iam::123456789012:policy/StartStopEc2"
"123456789012","Group","testGroup2","Inline","testInline","N/A"

成型例

この出力を見栄えよくするために、Googleスプレッドシートでピボットしてみます。
以下のようにしていきます。

  1. 値のみ張り付け
  2. [データ] - [テキストを列に分割]
  3. [表示形式] - [テーブルに変換]
  4. [挿入] - [ピボット テーブル]
  5. 以下のように設定
    • 行 : EntityType , EntityName
    • 列 : PolicyType , PolicyName
    • 値 : PolicyArnをカウント

以下のような表になり、どのユーザ / グループに、どのポリシーを割り当てたかの可視化資料にできそうです。

image.png

おわりに

今回は、ユーザとグループごとに割り当てたポリシーを出力するコマンドを作ってみました。
成型例のような表を手で作成していましたが、こういった風に出力できれば管理もだいぶ楽になると思います。
この記事がどなたかのお役に立ちましたら幸いです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?