1
0

More than 3 years have passed since last update.

IAM認証情報レポートに権限の詳細がないのでCLIで全部吐かせる

Posted at

{ユーザー名}.txtのような形でユーザー数分のテキストファイルが出るようになれば、対外的に適切なユーザー管理している資料として十分なので、作成しました。

s3user.txt
-----------------------------------------------------------
|                         GetUser                         |
+---------------------------------------------------------+
||                         User                          ||
|+-------------+-----------------------------------------+|
||  Arn        |  arn:aws:iam::123456789012:user/s3user  ||
||  CreateDate |  2018-01-01T20:00:00+00:00              ||
||  Path       |  /                                      ||
||  UserId     |  ABCDEFGHIJKLMNOYQRSTU                  ||
||  UserName   |  s3user                                 ||
|+-------------+-----------------------------------------+|
------------------
|ListUserPolicies|
+----------------+
------------------------------------------------------------------------
|                       ListAttachedUserPolicies                       |
+----------------------------------------------------------------------+
||                          AttachedPolicies                          ||
|+---------------------------------------------+----------------------+|
||                  PolicyArn                  |     PolicyName       ||
|+---------------------------------------------+----------------------+|
||  arn:aws:iam::aws:policy/AmazonS3FullAccess |  AmazonS3FullAccess  ||
|+---------------------------------------------+----------------------+|
----------------------------------
|        GetPolicyVersion        |
+--------+----------+------------+
| Action | Effect   | Resource   |
+--------+----------+------------+
|  s3:*  |  Allow   |  *         |
+--------+----------+------------+
-------------------
|ListGroupsForUser|
+-----------------+

簡単かと思いきや、権限がユーザーグループ経由かユーザー直アタッチの場合分けと、更にlist-attached-user-policieslist-user-policiesから両方取る必要があり、かつその後のパーミッション詳細のとり方まで違い、多くのコマンドが必要になってしまいました。

上記の一人分を出すために以下のスクリプトを作りました。

one.sh
#!/bin/bash
set -e
if [[ -z "${USERNAME}" ]]; then
  USERNAME=$(aws iam get-user --query 'User.UserName' --output text)
fi

aws iam get-user --user-name $USERNAME --output table
aws iam list-user-policies --user-name $USERNAME --output table
for POLICY_NAME in $(aws iam list-user-policies --user-name $USERNAME --query "PolicyNames" --output text) ; do
  aws iam get-user-policy --user-name $USERNAME --policy-name $POLICY_NAME --output table
done
aws iam list-attached-user-policies --user-name $USERNAME --output table
for POLICY_ARN in $(aws iam list-attached-user-policies --user-name $USERNAME --query "AttachedPolicies[].PolicyArn" --output text) ; do
  VERSION=$(aws iam get-policy --policy-arn $POLICY_ARN --output json --output text --query "Policy.DefaultVersionId")
  aws iam get-policy-version --version-id $VERSION --policy-arn $POLICY_ARN --query "PolicyVersion.Document.Statement" --output table
done

aws iam list-groups-for-user --user-name $USERNAME --output table
for GROUP in $(aws iam list-groups-for-user --user-name $USERNAME --output text --query "Groups[].GroupName") ; do
  aws iam list-group-policies --output table --group-name $GROUP --output table
  for POLICY_NAME in $(aws iam list-group-policies --output table --group-name $GROUP --query "PolicyNames" --output text) ; do
    aws iam get-group-policy --group-name $GROUP --policy-name $POLICY_NAME --output table
  done
  aws iam list-attached-group-policies --output table --group-name $GROUP;
  for POLICY_ARN in $(aws iam list-attached-group-policies --group-name $GROUP --query "AttachedPolicies[].PolicyArn" --output text) ; do
    VERSION=$(aws iam get-policy --policy-arn $POLICY_ARN --output json --output text --query "Policy.DefaultVersionId")
    aws iam get-policy-version --version-id $VERSION --policy-arn $POLICY_ARN --query "PolicyVersion.Document.Statement" --output table
  done
done

使い方はそのままです。

sh one.sh # 引数無しで自身のパーミッション詳細をとる
USERNAME=s3user sh one.sh # ユーザーは引数USERNAMEで指定する

one.shを全ユーザーまわして取得するall.shを作りました。フォルダoutputを作成し中にファイルを吐きます。

mkdir output;
aws iam list-users |  jq '.Users[].UserName' | xargs -I% sh -c 'USERNAME=% sh one.sh | tee ./output/%.txt'

工数が多くなればなるほど車輪の再開発をしてる気がしたのですが、他にやり方ないでしょうか。Githubで似たプロジェクトをいくつか見つけたものも、star数百程度でベストプラクティスとして普及しているレベルのものは見つからずでした。どなたか教えてくだされば幸いです。

レポジトリはこちらです。
https://github.com/umihico/iam-user-permissions-viwer

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