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?

More than 1 year has passed since last update.

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

Last updated at Posted at 2021-11-21

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

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

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

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

前提

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

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

alias

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

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 ポリシーの詳細を確認する。

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 ポリシーの詳細を確認する。

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 ロール名からポリシーを出力する例です。

$ 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 を選択します。

$ 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 /'
aws iam get-policy-version --version-id v1 --policy-arn arn:aws:iam::aws:policy/SecurityAudit

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

$ 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*",
~割愛~

参考

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?