こんにちは。AWS CLIが好きな福島です。
今回は、IAM関連のリソース情報を取得するコマンドをご紹介いたします。
私はよくqueryを使うため、queryの使い方が分からない方は、こちらを参照していただけますと幸いです。
- 実行環境
- 利用するコマンド,サブコマンド
- IAMユーザーの一覧
- IAMアクセスキー一覧
- アクセスキーの利用履歴一覧
- MFAデバイス一覧
- IAMグループの一覧
- IAMロールの一覧
- IAMロールの信頼関係
- マネージド・カスタムポリシー一覧
- インラインポリシー一覧
- おわりに
実行環境
今回、コマンドを実行した環境は、以下の通りとなります。
(本記事でご紹介しているコマンドの中には、Linuxのコマンドを利用している箇所があります。)
# uname -a Linux LAPTOP-CNM26HN6 4.4.0-18362-Microsoft #1049-Microsoft Thu Aug 14 12:01:00 PST 2020 x86_64 x86_64 x86_64 GNU/Linux #
利用するコマンド,サブコマンド
まず、AWS CLIの構造は以下の通りです。
aws <command> <subcommand> [options and parameters]
上記を前提に今回使う <command>,<subcommand>
は、以下の通りです。
<command>
- iam
※マネジメントコンソールでは、EC2とは別にVPCが存在しますが、AWS CLIの場合、ec2の中に含まれます。
<subcommand>
- ①list-users
⇒IAMUserの情報を取得できます。 - ②list-access-keys
⇒IAMアクセスキーの情報を取得できます。 - ③get-access-key-last-used
⇒IAMアクセスキーが最後に利用された情報を取得できます。 - ④list-mfa-devices
⇒物理MFAデバイスの情報を取得できます。 - ⑤list-virtual-mfa-devices
⇒仮想MFAデバイスの情報を取得できます。 - ⑥list-groups
⇒IAMグループの情報を取得できます。 - ⑦list-groups-for-user
⇒IAMグループに所属するユーザーの情報を取得できます。 - ⑧list-roles
⇒IAMロールの情報を取得できます。 - ⑨list-policies
⇒IAMポリシーの情報を取得できます。 - ⑩get-policy-version
⇒IAMポリシーの詳細(JSON)の情報を取得できます。 - ⑪list-attached-role-policies
⇒IAMロールにアタッチされているインラインポリシーの情報を取得できます。 - ⑫list-user-policies
⇒IAMユーザーにアタッチされているインラインポリシーの情報を取得できます。 - ⑬get-user-policy
⇒IAMユーザーにアタッチされているインラインポリシーの詳細(JSON)情報を取得できます。 - ⑭list-group-policies
⇒IAMグループにアタッチされているインラインポリシーの情報を取得できます。 - ⑮get-group-policy
⇒IAMグループにアタッチされているインラインポリシーの詳細(JSON)情報を取得できます。 - ⑯list-role-policies
⇒IAMロールにアタッチされているインラインポリシーの情報を取得できます。 - ⑰get-role-policy
⇒IAMロールにアタッチされているインラインポリシーの詳細(JSON)情報を取得できます。
IAMユーザーの一覧
コマンド ヘッダー無し
aws iam list-users --query "Users[].[UserName,Arn,CreateDate,PasswordLastUsed]" --output text
- 実行結果
administrator arn:aws:iam::xxxxxxxxxxxx:user/administrator 2019-10-07T03:06:04+00:00 2020-10-31T01:42:11+00:00 iam-check-user arn:aws:iam::xxxxxxxxxxxx:user/iam-check-user 2020-05-25T02:51:43+00:00 2020-06-22T10:07:48+00:00 kms-test arn:aws:iam::xxxxxxxxxxxx:user/kms-test 2020-09-30T14:53:46+00:00 None
コマンド ヘッダー有り
echo "UserName Arn CreateDate PasswordLastUsed" > /tmp/awscli.tmp;\ aws iam list-users --query "Users[].[UserName,Arn,CreateDate,PasswordLastUsed]" --output text | sort >> /tmp/awscli.tmp ;\ column -t /tmp/awscli.tmp;\ rm /tmp/awscli.tmp
- 実行結果
UserName Arn CreateDate PasswordLastUsed administrator arn:aws:iam::xxxxxxxxxxxx:user/administrator 2019-10-07T03:06:04+00:00 2020-10-31T01:42:11+00:00 iam-check-user arn:aws:iam::xxxxxxxxxxxx:user/iam-check-user 2020-05-25T02:51:43+00:00 2020-06-22T10:07:48+00:00 kms-test arn:aws:iam::xxxxxxxxxxxx:user/kms-test 2020-09-30T14:53:46+00:00 None
IAMアクセスキー一覧
コマンド ヘッダー無し
aws iam list-access-keys --query "AccessKeyMetadata[].[UserName,AccessKeyId,Status,CreateDate]" --output text
- 実行結果
administrator AKIXXXXXXXXXXXXXXXXX Inactive 2019-12-17T18:03:19+00:00 administrator AKIXXXXXXXXXXXXXXXXX Active 2020-05-04T22:55:08+00:00
コマンド ヘッダー有り
echo "UserName AccessKeyId Status CreateDate" > /tmp/awscli.tmp;\ aws iam list-access-keys --query "AccessKeyMetadata[].[UserName,AccessKeyId,Status,CreateDate]" --output text | sort >> /tmp/awscli.tmp ;\ column -t /tmp/awscli.tmp;\ rm /tmp/awscli.tmp
- 実行結果
UserName AccessKeyId Status CreateDate administrator AKIXXXXXXXXXXXXXXXXX Active 2020-05-04T22:55:08+00:00 administrator AKIXXXXXXXXXXXXXXXXX Inactive 2019-12-17T18:03:19+00:00
アクセスキーの利用履歴一覧
コマンド ヘッダー有り
echo "AccessKey LastUsedDate ServiceName Region" > /tmp/awscli.tmp;\ for access_key in $(aws iam list-access-keys --query "AccessKeyMetadata[].AccessKeyId" --output text); do IAMTEMP=$(aws iam get-access-key-last-used --access-key-id $access_key --query "AccessKeyLastUsed.[LastUsedDate,ServiceName,Region]" --output text); echo "$access_key $IAMTEMP" >> /tmp/awscli.tmp done;\ column -t /tmp/awscli.tmp;\ rm /tmp/awscli.tmp
- 実行結果
AccessKey LastUsedDate ServiceName Region AKIXXXXXXXXXXXXXXXXX 2019-12-17T18:15:00+00:00 ssm ap-northeast-1 AKIXXXXXXXXXXXXXXXXX 2020-10-31T03:43:00+00:00 iam us-east-1
MFAデバイス一覧
物理MFAデバイス一覧
コマンド ヘッダー無し
aws iam list-mfa-devices --query "MFADevices[].[UserName,SerialNumber,EnableDate]" --output text
- 実行結果
administrator arn:aws:iam::xxxxxxxxxxxx:mfa/administrator 2020-04-05T00:46:06+00:00
コマンド ヘッダー有り
echo "UserName SerialNumber EnableDate" > /tmp/awscli.tmp;\ aws iam list-mfa-devices --query "MFADevices[].[UserName,SerialNumber,EnableDate]" --output text | sort >> /tmp/awscli.tmp ;\ column -t /tmp/awscli.tmp;\ rm /tmp/awscli.tmp
- 実行結果
UserName SerialNumber EnableDate administrator arn:aws:iam::xxxxxxxxxxxx:mfa/administrator 2020-04-05T00:46:06+00:00
仮想MFAデバイス一覧
コマンド ヘッダー無し
aws iam list-virtual-mfa-devices --query "VirtualMFADevices[].[SerialNumber,User.Arn,User.PasswordLastUsed,EnableDate]" --output text
- 実行結果
arn:aws:iam::xxxxxxxxxxxx:mfa/tech-kadai-iam None None None arn:aws:iam::xxxxxxxxxxxx:mfa/root-account-mfa-device arn:aws:iam::xxxxxxxxxxxx:root 2020-06-12T06:21:52+00:00 2020-06-12T06:23:06+00:00 arn:aws:iam::xxxxxxxxxxxx:mfa/administrator arn:aws:iam::xxxxxxxxxxxx:user/administrator 2020-10-31T01:42:11+00:00 2020-04-05T00:46:06+00:00
コマンド ヘッダー有り
echo "SerialNumber Arn PasswordLastUsed EnableDate" > /tmp/awscli.tmp;\ aws iam list-virtual-mfa-devices --query "VirtualMFADevices[].[SerialNumber,User.Arn,User.PasswordLastUsed,EnableDate]" --output text | sort >> /tmp/awscli.tmp ;\ column -t /tmp/awscli.tmp;\ rm /tmp/awscli.tmp
- 実行結果
SerialNumber Arn PasswordLastUsed EnableDate arn:aws:iam::xxxxxxxxxxxx:mfa/administrator arn:aws:iam::xxxxxxxxxxxx:user/administrator 2020-10-31T01:42:11+00:00 2020-04-05T00:46:06+00:00 arn:aws:iam::xxxxxxxxxxxx:mfa/root-account-mfa-device arn:aws:iam::xxxxxxxxxxxx:root 2020-06-12T06:21:52+00:00 2020-06-12T06:23:06+00:00 arn:aws:iam::xxxxxxxxxxxx:mfa/tech-kadai-iam None None None
IAMグループの一覧
コマンド ヘッダー無し
aws iam list-groups --query "Groups[].[GroupName,GroupId,Arn,CreateDate]" --output text
- 実行結果
sw-readonly AKIXXXXXXXXXXXXXXXXX arn:aws:iam::xxxxxxxxxxxx:group/sw-readonly 2019-10-07T08:18:44+00:00 test AKIXXXXXXXXXXXXXXXXX arn:aws:iam::xxxxxxxxxxxx:group/test 2020-06-15T01:34:55+00:00 test02 AKIXXXXXXXXXXXXXXXXX arn:aws:iam::xxxxxxxxxxxx:group/test02 2020-06-15T01:35:56+00:00
コマンド ヘッダー有り
echo "GroupName GroupId Arn CreateDate" > /tmp/awscli.tmp;\ aws iam list-groups --query "Groups[].[GroupName,GroupId,Arn,CreateDate]" --output text | sort >> /tmp/awscli.tmp ;\ column -t /tmp/awscli.tmp;\ rm /tmp/awscli.tmp
- 実行結果
GroupName GroupId Arn CreateDate sw-readonly AKIXXXXXXXXXXXXXXXXX arn:aws:iam::xxxxxxxxxxxx:group/sw-readonly 2019-10-07T08:18:44+00:00 test AKIXXXXXXXXXXXXXXXXX arn:aws:iam::xxxxxxxxxxxx:group/test 2020-06-15T01:34:55+00:00 test02 AKIXXXXXXXXXXXXXXXXX arn:aws:iam::xxxxxxxxxxxx:group/test02 2020-06-15T01:35:56+00:00
コマンド ヘッダー有り(ユーザーが所属しているグループを表示)
echo "UserName Groups" > /tmp/awscli.tmp aws iam list-users --query "Users[].[UserName]" --output text | sort | while read line;\ do echo ${line} > /tmp/awscli-group.tmp;\ aws iam list-groups-for-user --user-name ${line} --query "Groups[].[GroupName]" --output text >> /tmp/awscli-group.tmp;\ cat /tmp/awscli-group.tmp | tr "\n" " " | sed 's/$/\n/g' >> /tmp/awscli.tmp;\ done column -t /tmp/awscli.tmp;\ rm /tmp/awscli.tmp /tmp/awscli-group.tmp
- 実行結果
UserName Groups administrator sw-readonly test02 iam-check-user sw-readonly test02 kms-test sw-readonly test02 test sw-readonly test
IAMロールの一覧
コマンド ヘッダー無し
aws iam list-roles --query "Roles[].[RoleName,Arn,CreateDate,MaxSessionDuration]" --output text
- 実行結果
acm-role arn:aws:iam::xxxxxxxxxxxx:role/acm-role 2020-10-29T16:33:47+00:00 3600 alias-test-role-b9k50d3g arn:aws:iam::xxxxxxxxxxxx:role/service-role/alias-test-role-b9k50d3g 2020-06-22T11:53:41+00:00 3600 Amazon-GlueServiceRoleForSSM arn:aws:iam::xxxxxxxxxxxx:role/service-role/Amazon-GlueServiceRoleForSSM 2020-03-19T23:45:37+00:00 3600
コマンド ヘッダー有り
echo "RoleName Arn CreateDate MaxSessionDuration" > /tmp/awscli.tmp;\ aws iam list-roles --query "Roles[].[RoleName,Arn,CreateDate,MaxSessionDuration]" --output text | sort >> /tmp/awscli.tmp ;\ column -t /tmp/awscli.tmp;\ rm /tmp/awscli.tmp
- 実行結果
RoleName Arn CreateDate MaxSessionDuration AWSCodePipelineServiceRole-ap-northeast-1-MyFirstPipeline arn:aws:iam::xxxxxxxxxxxx:role/service-role/AWSCodePipelineServiceRole-ap-northeast-1-MyFirstPipeline 2020-03-27T00:33:10+00:00 3600 AWSCodePipelineServiceRole-ap-northeast-1-fk-user-ecsdemo-front arn:aws:iam::xxxxxxxxxxxx:role/service-role/AWSCodePipelineServiceRole-ap-northeast-1-fk-user-ecsdemo-front 2020-03-28T12:01:04+00:00 3600 AWSCodePipelineServiceRole-ap-northeast-1-kazuya-ecsdemo-fronte arn:aws:iam::xxxxxxxxxxxx:role/service-role/AWSCodePipelineServiceRole-ap-northeast-1-kazuya-ecsdemo-fronte 2020-05-06T15:36:08+00:00 3600
IAMロールの信頼関係
コマンド ヘッダー無し
aws iam list-roles --query "Roles[].[RoleName,AssumeRolePolicyDocument][]"
- 実行結果
[ "acm-role", { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }, "alias-test-role-b9k50d3g", { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] },
マネージド・カスタムポリシー一覧
基本情報
コマンド ヘッダー無し
aws iam list-policies --query "Policies[].[PolicyName,DefaultVersionId,AttachmentCount,UpdateDate]" --output text
- 実行結果
aaaaaaa v2 1 2020-10-22T08:30:37+00:00 AccessS3BucketForAppTest v1 0 2020-03-03T10:20:44+00:00 AllowStorageGatewayAssumeBucketAccessRole1f359411-1df9-4aea-bd7f-f2fa6da1c06a v1 1 2019-10-27T11:07:01+00:00
コマンド ヘッダー有り
echo "PolicyName DefaultVersionId AttachmentCount UpdateDate" > /tmp/awscli.tmp;\ aws iam list-policies --query "Policies[].[PolicyName,DefaultVersionId,AttachmentCount,UpdateDate]" --output text | sort >> /tmp/awscli.tmp ;\ column -t /tmp/awscli.tmp;\ rm /tmp/awscli.tmp
- 実行結果
PolicyName DefaultVersionId AttachmentCount UpdateDate APIGatewayServiceRolePolicy v8 0 2020-02-25T20:24:49+00:00 AWS-Chatbot-NotificationsOnly-Policy-c938da66-7801-4fcf-ab2b-2411332f2579 v1 1 2020-04-27T07:22:33+00:00 AWSAccountActivityAccess v1 0 2015-02-06T18:41:18+00:00
詳細情報
コマンド ヘッダー有り
aws iam list-policies --query "Policies[].[Arn,DefaultVersionId]" --output text | while read line; do ARN=$(echo ${line} | awk '{print $1}'); VERSION=$(echo ${line} | awk '{print $2}'); echo "PolicyName:${ARN#*/}"; aws iam get-policy-version --policy-arn $ARN --version-id $VERSION --query "PolicyVersion.Document.Statement"; done
- 実行結果
PolicyName:aaaaaaa [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "ec2:*", "Resource": "*" } ] PolicyName:AccessS3BucketForAppTest [ { "Action": [ "s3:*" ], "Resource": [ "arn:aws:s3:::xxxxxxxxxxxx", "arn:aws:s3:::xxxxxxxxxxxx/*" ], "Effect": "Allow" } ]
IAMユーザーにアタッチされているポリシー
※インラインポリシー以外です。
aws iam list-users --query "Users[].[UserName]" --output text | while read line do echo UserName:$line aws iam list-attached-user-policies --user-name $line --query "AttachedPolicies[].[PolicyName,PolicyArn]" --output text done
- 実行結果
UserName:administrator AdministratorAccess arn:aws:iam::aws:policy/AdministratorAccess UserName:iam-test AmazonRDSFullAccess arn:aws:iam::aws:policy/AmazonRDSFullAccess UserName:MGNUser AWSApplicationMigrationAgentPolicy arn:aws:iam::aws:policy/AWSApplicationMigrationAgentPolicy
IAMグループにアタッチされているポリシー
- 実行コマンド
aws iam list-groups --query "Groups[].[GroupName]" --output text | while read line do echo GroupName:$line aws iam list-attached-group-policies --group-name $line --query "AttachedPolicies[].[PolicyName,PolicyArn]" --output text done
- 実行結果
GroupName:sw-readonly ReadOnlyAccess arn:aws:iam::aws:policy/ReadOnlyAccess IAMUserChangePassword arn:aws:iam::aws:policy/IAMUserChangePassword GroupName:test AmazonEC2FullAccess arn:aws:iam::aws:policy/AmazonEC2FullAccess AmazonEC2ContainerRegistryFullAccess arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryFullAccess AmazonS3FullAccess arn:aws:iam::aws:policy/AmazonS3FullAccess AWSCodeDeployRoleForECS arn:aws:iam::aws:policy/AWSCodeDeployRoleForECS ReadOnlyAccess arn:aws:iam::aws:policy/ReadOnlyAccess AmazonDynamoDBFullAccess arn:aws:iam::aws:policy/AmazonDynamoDBFullAccess AdministratorAccess arn:aws:iam::aws:policy/AdministratorAccess AmazonSSMManagedInstanceCore arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore IAMUserChangePassword arn:aws:iam::aws:policy/IAMUserChangePassword AWSLambdaBasicExecutionRole arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
IAMロールにアタッチされているポリシー
※インラインポリシー以外です。
aws iam list-roles --query "Roles[].[RoleName]" --output text | while read line do echo RoleName:$line aws iam list-attached-role-policies --role-name $line --query "AttachedPolicies[].[PolicyName,PolicyArn]" --output text done
- 実行結果
RoleName:acm-role RoleName:alias-test-role-b9k50d3g AWSLambdaBasicExecutionRole-c0662513-5497-44ef-8579-547791c9b2e8 arn:aws:iam::xxxxxxxxxxxxx:policy/service-role/AWSLambdaBasicExecutionRole-c0662513-5497-44ef-8579-547791c9b2e8 RoleName:Amazon-GlueServiceRoleForSSM AWSGlueServiceRole arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole Amazon-GlueServicePolicyForSSM-s3-innovate-20200320 arn:aws:iam::xxxxxxxxxxxxx:policy:policy/service-role/Amazon-GlueServicePolicyForSSM-s3-innovate-20200320
インラインポリシー一覧
全ユーザーのインラインポリシー詳細
aws iam list-users --query "Users[].[UserName]" --output text | while read user; do echo "UserName:$user" for policy in $(aws iam list-user-policies --user-name $user --query "PolicyNames" --output text); do echo "InlinePolicyName:$policy" aws iam get-user-policy --user-name $user --policy-name $policy --query "PolicyDocument" done done
- 実行結果
UserName:administrator InlinePolicyName:me-switch-role { "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::xxxxxxxxxxxx:role/policy-check-role" } } UserName:iam-check-user InlinePolicyName:ssmdescribe { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::fk-test-xxx" }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:AbortMultipartUpload", "s3:DeleteObject", "s3:GetObjectVersion", "s3:ListMultipartUploadParts" ], "Resource": "arn:aws:s3:::fk-test-xxxxxxx/*" } ] } UserName:kms-test UserName:test
全グループのインラインポリシー詳細
aws iam list-groups --query "Groups[].[GroupName]" --output text | while read group; do echo "GroupName:$group" for policy in $(aws iam list-group-policies --group-name $group --query "PolicyNames" --output text); do echo "InlinePolicyName:$policy" aws iam get-group-policy --group-name $group --policy-name $policy --query "PolicyDocument" done done
- 実行結果
GroupName:sw-readonly InlinePolicyName:test { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "appflow:*", "Resource": "*" } ] } GroupName:test GroupName:test02
全IAMロールのインラインポリシー詳細
aws iam list-roles --query "Roles[].[RoleName]" --output text | while read role; do echo "RoleName:$role" for policy in $(aws iam list-role-policies --role-name $role --query "PolicyNames" --output text); do echo "InlinePolicyName:$policy" aws iam get-role-policy --role-name $role --policy-name $policy --query "PolicyDocument" done done
- 実行結果
RoleName:acm-role InlinePolicyName:acm-role-policy { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::aws-ec2-enclave-xxxxxxxx-ap-northeast-1-prod/*" ] }, { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource": "arn:aws:kms:ap-northeast-1:*:key/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" } ] } InlinePolicyName:ass { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "access-analyzer:*", "Resource": "*" } ] }
おわりに
今回は、IAM関連のリソース情報を取得するコマンドをご紹介いたしました。
次回もAWS CLI関連のコマンドをご紹介したいと思います。
福島 和弥 (記事一覧)
2019/10 入社
AWS CLIが好きです。
AWS資格12冠。2023 Japan AWS Partner Ambassador/APN ALL AWS Certifications Engineer。