AWS IAM の IAM ポリシーを AWS CLI で効率的に閲覧するための bash alias

AWS CLI を開発、運用環境で利用している場合、特定作業に対する複数の IAM ポリシーをチェックするようなケースがあると思います。

ユーザ名、ロール名は見たら思い出せるけど、入力できるほどは覚えてない、という場合は、ユーザ名、ロール名のリスト出力、ポリシー確認を繰り返さないといけません。json ファイルなどから該当のリソース名、ARNなどを見つけて、次のコマンドを作成して、、、ということを繰り返すのは数が多いと大変な作業になります。

そこで以下のような一連の作業を効率的に実施するために、bash 等で使える alias を作成しています。alias名などをカスタマイズしてお使いください。

1.IAM ユーザ(またはロール、グループ)特定
2.紐づく IAM ポリシーの特定
3.IAM ポリシーの確認

# 前提

linux や mac os などで AWS CLI が利用できる、また jq がインストールされている事が前提です。以下のような記事を参照ください。

* [AWS-CLIの初期設定のメモ](https://qiita.com/reflet/items/e4225435fe692663b705)
* [aws cli と jq コマンド](https://qiita.com/naokishi/items/f9d2f53bb103241b2817)

上記を含めて AWS CLI 利用のための alias を、以下の git にまとめています。実行環境などは、コードに記載しています。

* https://github.com/sudakos-pingpong/start-awscli-easily

# alias

IAM ユーザ名から IAM ポリシーを特定した上で、IAM ポリシーの詳細を確認する。

```bash
alias awsEchoIAMPolicies2Users="aws iam list-users \
    | jq -r '.Users[] | .Name' \
    | sed 's/^/export IAM_USER=/' ;\
    echo \
    'aws iam list-attached-user-policies --username \${IAM_USER} \
    | jq -r '\''.AttachedPolicies[] | .PolicyArn'\'' \
    | sed '\''s/^/aws iam get-policy-version --version-id v1 --policy-arn /'\' "
```

IAM ロール名から IAM ポリシーを特定した上で、IAM ポリシーの詳細を確認する。

```bash
alias awsEchoIAMPolicies2Roles="aws iam list-roles \
    | jq -r '.Roles[] | .RoleName' \
    | sed 's/^/export IAM_ROLE=/' ;\
    echo \
    'aws iam list-attached-role-policies --role-name \${IAM_ROLE} \
    | jq -r '\''.AttachedPolicies[] | .PolicyArn'\'' \
    | sed '\''s/^/aws iam get-policy-version --version-id v1 --policy-arn /'\'"
```

IAM グループ名から IAM ポリシーを特定した上で、IAM ポリシーの詳細を確認する。

```bash
alias awsEchoIAMPolicies2Groups="aws iam list-groups \
    | jq -r '.Groups[] | .GroupName' \
    | sed 's/^/export IAM_Groups=/' ;\
    echo \
    'aws iam list-attached-group-policies --group-name \${IAM_Groups} \
    | jq -r '\''.AttachedPolicies[] | .PolicyArn'\'' \
    | sed '\''s/^/aws iam get-policy-version --version-id v1 --policy-arn /'\'"

```


# 利用方法

alias を実行すると、export IAM_USER=*** といった形でユーザ名やロール名がリストで出力されます。以下は、IAM ロール名からポリシーを出力する例です。

```bash
$ awsEchoIAMPolicies2Roles
export IAM_ROLE=AccessAnalyzerTrustedService
export IAM_ROLE=Admin
export IAM_ROLE=AwsSecurityAudit
：
～割愛～

aws iam list-attached-role-policies --role-name ${IAM_ROLE}     | jq -r '.AttachedPolicies[] | .PolicyArn'     | sed 's/^/aws iam get-policy-version --version-id v1 --policy-arn /'

```

一番下の行が、IAM ロールに紐づく IAM ポリシーをリスト出力するためのコマンドになっています。

まず確認したい IAM ロールの行をコピペすることで環境変数にセットします。ここでは、*AwsSecurityAudit* を選択します。

```bash
$ export IAM_ROLE=AwsSecurityAudit
```

先程、最終行に出力されていたコマンドをそのまま実行します。

```bash
$ aws iam list-attached-role-policies --role-name ${IAM_ROLE}     | jq -r '.AttachedPolicies[] | .PolicyArn'     | sed 's/^/aws iam get-policy-version --version-id v1 --policy-arn /'
aws iam get-policy-version --version-id v1 --policy-arn arn:aws:iam::aws:policy/SecurityAudit
```

この IAM ロールには1つのポリシーが紐づいているため、1行だけコマンドが出力されました( *policy/SecurityAudit* )。この出力はコピペをすると、そのままポリシー内容が確認できるようになっています。

```bash
$ aws iam get-policy-version --version-id v1 --policy-arn arn:aws:iam::aws:policy/SecurityAudit
{
    "PolicyVersion": {
        "Document": {
            "Version": "2012-10-17",
            "Statement": [
                {
                    "Action": [
                        "autoscaling:Describe*",
                        "cloudformation:DescribeStack*",
                        "cloudformation:GetTemplate",
                        "cloudformation:ListStack*",
                        "cloudfront:Get*",
                        "cloudfront:List*",
～割愛～
```

# 参考

* AWS CLI で扱える IAM 関連のコマンドは以下が参考になります。
    * [IAMの情報をAWS CLIで確認する](https://qiita.com/isobecky74/items/92d35fa1d3063fe64dc4)
* AWS IAM の基礎理解は、AWS 公式の Black Belt などを参照ください。
    * [AWS Identity and Access Management (AWS IAM) Part1] (https://www.slideshare.net/AmazonWebServicesJapan/20190129-aws-black-belt-online-seminar-aws-identity-and-access-management-iam-part1)
    * [AWS Identity and Access Management (AWS IAM) Part2](https://www.slideshare.net/AmazonWebServicesJapan/20190130-aws-black-belt-online-seminar-aws-identity-and-access-management-aws-iam-part2)