AWS CLIで IAMを使用してみます。
使用バージョンはこれ。
ec2-user@xxxxx$ aws --version aws-cli/2.2.23 Python/3.8.8 Linux/4.14.193-113.317.amzn1.x86_64 exe/x86_64.amzn.2018 prompt/off ec2-user@xxxxx$
aws cliの操作は、EC2上でも、ローカルPCでも可能です。
Contents
- ユーザ操作
- グループ操作
- ポリシー操作
- aws iam list-policies ポリシー一覧
- aws iam create-policy ポリシー作成
- aws iam get-policy ポリシー情報取得
- aws iam attach-user-policy ポリシーをユーザへアタッチ
- aws iam detach-user-policy ポリシーをユーザからデタッチ
- aws iam attach-group-policy ポリシーをグループへアタッチ
- aws iam detach-group-policy ポリシーをグループからデタッチ
- aws iam attach-role-policy ポリシーをロールへアタッチ
- aws iam detach-role-policy ポリシーをロールからデタッチ
- aws iam list-entities-for-policy ポリシーをアタッチしたユーザ・グループ・ロール表示
ユーザ操作
aws iam create-user ユーザの追加
aws iam create-user helpより
SYNOPSIS create-user [--path <value>] --user-name <value> [--permissions-boundary <value>] [--tags <value>] [--cli-input-json | --cli-input-yaml] [--generate-cli-skeleton <value>]
使い方は、aws iam create-user helpのEXAMPLESで確認できます。
〜省略〜 EXAMPLES To create an IAM user The following create-user command creates an IAM user named Bob in the current account: aws iam create-user --user-name Bob Output: { "User": { "UserName": "Bob", "Path": "/", "CreateDate": "2013-06-08T03:20:41.270Z", "UserId": "AIDAIOSFODNN7EXAMPLE", "Arn": "arn:aws:iam::123456789012:user/Bob" } } 〜省略〜
ユーザを追加してみます。
コマンド aws iam create-user --user-name ユーザ名
ec2-user@xxxxx$ aws iam create-user --user-name hello
実行すると、以下のように結果が表示されます。
{ "User": { "Path": "/", "UserName": "hello", "UserId": "AIDAxxxxxxxxxxxxxxxxx", "Arn": "arn:aws:iam::xxxxxxxxxxxx:user/hello", "CreateDate": "2021-12-31T03:53:59+00:00" } } ec2-user@xxxxx$
aws iam list-users ユーザの一覧
aws iam list-users helpより
SYNOPSIS list-users [--path-prefix <value>] [--max-items <value>] [--cli-input-json | --cli-input-yaml] [--starting-token <value>] [--page-size <value>] [--generate-cli-skeleton <value>]
ユーザの一覧は簡単に取得できます。
コマンド aws iam list-users
ec2-user@xxxxx$ aws iam list-users { "Users": [ { "Path": "/", "UserName": "hello", "UserId": "AIDAxxxxxxxxxxxxxxxxx", "Arn": "arn:aws:iam::xxxxxxxxxxxx:user/hello", "CreateDate": "2021-12-31T03:53:59+00:00" }, { "Path": "/", "UserName": "user_20211231", "UserId": "AIDAxxxxxxxxxxxxxxxxx", "Arn": "arn:aws:iam::xxxxxxxxxxxx:user/user_20211231", "CreateDate": "2021-12-31T02:13:34+00:00" } ] } ec2-user@xxxxx$
jqコマンドでフィルタリングすると、ユーザ名のみの一覧を作れます。
ec2-user@xxxxx$ aws iam list-users | jq '.Users[] | .UserName' "hello" "user_20211231" ec2-user@xxxxx$
aws iam delete-user ユーザの削除
aws iam delete-user helpより
SYNOPSIS delete-user --user-name <value> [--cli-input-json | --cli-input-yaml] [--generate-cli-skeleton <value>]
ユーザ名を指定してユーザを削除できます。
削除前
ec2-user@xxxxx$ aws iam list-users | jq '.Users[] | .UserName' "hello" "user_20211231" ec2-user@xxxxx$
ユーザの削除実行
コマンド aws iam delete-user --user-name ユーザ名
ec2-user@xxxxx$ aws iam delete-user --user-name hello ec2-user@xxxxx$
削除後
ec2-user@xxxxx$ aws iam list-users | jq '.Users[] | .UserName' "user_20211231" ec2-user@xxxxx$
aws iam get-user ユーザ情報の取得
aws iam get-user helpより
SYNOPSIS get-user [--user-name <value>] [--cli-input-json | --cli-input-yaml] [--generate-cli-skeleton <value>]
get-userで、ユーザ情報を取得できます。
コマンド aws iam get-user --user-name ユーザ名
ec2-user@xxxxx$ aws iam get-user --user-name user_20211231 { "User": { "Path": "/", "UserName": "user_20211231", "UserId": "AIDAxxxxxxxxxxxxxxxxx", "Arn": "arn:aws:iam::xxxxxxxxxxxx:user/user_20211231", "CreateDate": "2021-12-31T02:13:34+00:00", "Tags": [ { "Key": "test-tag", "Value": "20211231" } ] } } ec2-user@xxxxx$
aws iam tag-user ユーザへタグ追加
aws iam tag-user helpより
SYNOPSIS tag-user --user-name <value> --tags <value> [--cli-input-json | --cli-input-yaml] [--generate-cli-skeleton <value>]
コマンド aws iam tag-user --user-name ユーザ名 --tags タグ
タグを追加すると、get-userで追加されたタグが確認できます。
キーをtest-tag2
値を20220101
として、user_20211231に、タグを追加してみましょう。
ec2-user@xxxxx$ aws iam tag-user --user-name user_20211231 --tags '{"Key": "test-tag2", "Value": "20220101"}' ec2-user@xxxxx$ aws iam get-user --user-name user_20211231 { "User": { "Path": "/", "UserName": "user_20211231", "UserId": "AIDAxxxxxxxxxxxxxxxxx", "Arn": "arn:aws:iam::xxxxxxxxxxxx:user/user_20211231", "CreateDate": "2021-12-31T02:13:34+00:00", "Tags": [ { "Key": "test-tag2", "Value": "20220101" }, { "Key": "test-tag", "Value": "20211231" } ] } }
aws iam untag-user ユーザからタグ削除
aws iam untag-user helpより
SYNOPSIS untag-user --user-name <value> --tag-keys <value> [--cli-input-json | --cli-input-yaml] [--generate-cli-skeleton <value>]
コマンド aws iam untag-user --user-name ユーザ名 --tag タグ
タグはuntag-userで削除できます。
キーtest-tag2を削除してみましょう。
ec2-user@xxxxx$ aws iam untag-user --user-name user_20211231 --tag test-tag2 ec2-user@xxxxx$ aws iam get-user --user-name user_20211231 { "User": { "Path": "/", "UserName": "user_20211231", "UserId": "AIDAxxxxxxxxxxxxxxxxx", "Arn": "arn:aws:iam::xxxxxxxxxxxx:user/user_20211231", "CreateDate": "2021-12-31T02:13:34+00:00", "Tags": [ { "Key": "test-tag", "Value": "20211231" } ] } } ec2-user@xxxxx$
aws iam update-user ユーザ情報更新
aws iam update-user helpより
SYNOPSIS update-user --user-name <value> [--new-path <value>] [--new-user-name <value>] [--cli-input-json | --cli-input-yaml] [--generate-cli-skeleton <value>]
コマンド aws iam update-user --user-name ユーザ名
update-userでユーザ情報を変更できます。
ユーザ名を変更してみましょう。
旧ユーザ名 old-user
新ユーザ名 new-user
ec2-user@xxxxx$ aws iam get-user --user-name old-user { "User": { "Path": "/", "UserName": "old-user", "UserId": "AIDAxxxxxxxxxxxxxxxxx", "Arn": "arn:aws:iam::xxxxxxxxxxxx:user/old-user", "CreateDate": "2021-12-31T04:51:20+00:00" } } ec2-user@xxxxx$ aws iam update-user --user-name old-user --new-user-name new-user ec2-user@xxxxx$ aws iam get-user --user-name new-user { "User": { "Path": "/", "UserName": "new-user", "UserId": "AIDAxxxxxxxxxxxxxxxxx", "Arn": "arn:aws:iam::xxxxxxxxxxxx:user/new-user", "CreateDate": "2021-12-31T04:51:20+00:00" } } ec2-user@xxxxx$
グループ操作
aws iam create-group グループ作成
aws iam create-group helpより
SYNOPSIS create-group [--path <value>] --group-name <value> [--cli-input-json | --cli-input-yaml] [--generate-cli-skeleton <value>]
コマンド aws iam create-group --group-name グループ名
create-groupでグループを作成できます。
ec2-user@xxxxx$ aws iam create-group --group-name test-group { "Group": { "Path": "/", "GroupName": "test-group", "GroupId": "AGPAxxxxxxxxxxxxxxxxx", "Arn": "arn:aws:iam::xxxxxxxxxxxx:group/test-group", "CreateDate": "2021-12-31T05:26:32+00:00" } } ec2-user@xxxxx$
aws iam list-groups グループ一覧
aws iam list-groups helpより
SYNOPSIS list-groups [--path-prefix <value>] [--max-items <value>] [--cli-input-json | --cli-input-yaml] [--starting-token <value>] [--page-size <value>] [--generate-cli-skeleton <value>]
コマンド aws iam list-groups
ec2-user@xxxxx$ aws iam list-groups { "Groups": [ { "Path": "/", "GroupName": "ec2-group", "GroupId": "AGPAxxxxxxxxxxxxxxxxx", "Arn": "arn:aws:iam::xxxxxxxxxxxx:group/ec2-group", "CreateDate": "2021-12-31T02:12:48+00:00" }, { "Path": "/", "GroupName": "test-group", "GroupId": "AGPAxxxxxxxxxxxxxxxxx", "Arn": "arn:aws:iam::xxxxxxxxxxxx:group/test-group", "CreateDate": "2021-12-31T05:26:32+00:00" } ] } ec2-user@xxxxx$
aws iam delete-group グループ削除
aws iam delete-group helpより
SYNOPSIS delete-group --group-name <value> [--cli-input-json | --cli-input-yaml] [--generate-cli-skeleton <value>]
delete-groupでグループ削除できます。
削除前
ec2-user@xxxxx$ aws iam list-groups | jq '.Groups[]|.GroupName' "ec2-group" "test-group" ec2-user@xxxxx$
グループ削除
コマンド aws iam delete-group --group-name グループ名
ec2-user@xxxxx$ aws iam delete-group --group-name test-group ec2-user@xxxxx$
削除後
ec2-user@xxxxx$ aws iam list-groups | jq '.Groups[]|.GroupName' "ec2-group" ec2-user@xxxxx$
aws iam add-user-to-group グループへユーザ追加
aws iam add-user-to-group helpより
SYNOPSIS add-user-to-group --group-name <value> --user-name <value> [--cli-input-json | --cli-input-yaml] [--generate-cli-skeleton <value>]
ユーザをグループへ追加するには、add-user-to-groupを使います。
コマンド aws iam add-user-to-group --user-name ユーザ名 --group-name グループ名
ec2-user@xxxxx$ aws iam add-user-to-group --user-name test-user --group-name test-group ec2-user@xxxxx$
aws iam list-groups-for-user ユーザのグループを表示
aws iam list-groups-for-user helpより
SYNOPSIS list-groups-for-user --user-name <value> [--max-items <value>] [--cli-input-json | --cli-input-yaml] [--starting-token <value>] [--page-size <value>] [--generate-cli-skeleton <value>]
ユーザが所属するグループを表示します。
コマンド aws iam list-groups-for-user --user-name ユーザ名
ec2-user@xxxxx$ aws iam list-groups-for-user --user-name test-user { "Groups": [ { "Path": "/", "GroupName": "test-group", "GroupId": "AGPAxxxxxxxxxxxxxxxxx", "Arn": "arn:aws:iam::xxxxxxxxxxxx:group/test-group", "CreateDate": "2021-12-31T06:08:46+00:00" } ] } ec2-user@xxxxx$
aws iam remove-user-from-group グループからユーザ削除
aws iam remove-user-from-group helpより
SYNOPSIS remove-user-from-group --group-name <value> --user-name <value> [--cli-input-json | --cli-input-yaml] [--generate-cli-skeleton <value>]
グループから削除前
ec2-user@xxxxx$ aws iam list-groups-for-user --user-name test-user { "Groups": [ { "Path": "/", "GroupName": "test-group", "GroupId": "AGPAWZMLAMQS2NJEJ52QY", "Arn": "arn:aws:iam::466832352293:group/test-group", "CreateDate": "2021-12-31T06:08:46+00:00" } ] } ec2-user@xxxxx$
グループから削除
コマンド aws iam remove-user-from-group --user-name ユーザ名 --group-name グループ名
ec2-user@xxxxx$ aws iam remove-user-from-group --user-name test-user --group-name test-group ec2-user@xxxxx$
グループから削除後
ec2-user@xxxxx$ aws iam remove-user-flist-groups-for-user --user-name test-user { "Groups": [] } ec2-user@xxxxx$
ポリシー操作
aws iam list-policies ポリシー一覧
aws iam list-policies helpより
SYNOPSIS list-policies [--scope <value>] [--only-attached | --no-only-attached] [--path-prefix <value>] [--policy-usage-filter <value>] [--max-items <value>] [--cli-input-json | --cli-input-yaml] [--starting-token <value>] [--page-size <value>] [--generate-cli-skeleton <value>]
list-policiesでポリシー一覧表示できます。
全ポリシーを表示してみましょう。
コマンド aws iam list-policies
ec2-user@xxxxx$ aws iam list-policies | jq '.Policies[]|.PolicyName' | head "AWSDirectConnectReadOnlyAccess" "AmazonGlacierReadOnlyAccess" "AWSMarketplaceFullAccess" "ClientVPNServiceRolePolicy" "AWSSSODirectoryAdministrator" "AWSIoT1ClickReadOnlyAccess" "AutoScalingConsoleReadOnlyAccess" "AmazonDMSRedshiftS3Role" "AWSQuickSightListIAM" "AWSHealthFullAccess" ec2-user@xxxxx$
aws iam create-policy ポリシー作成
aws iam create-policy helpより
SYNOPSIS create-policy --policy-name <value> [--path <value>] --policy-document <value> [--description <value>] [--tags <value>] [--cli-input-json | --cli-input-yaml] [--generate-cli-skeleton <value>]
まずポリシーを書いたテキストファイルを用意します。
ActionとResouceに*を指定すると全てのリソースのすべての権限になるので注意。
ec2-user@xxxxx$ cat -n test-policy.json 1 { 2 "Version": "2012-10-17", 3 "Statement": [ 4 { 5 "Effect": "Allow", 6 "Action": "*", 7 "Resource": "*" 8 } 9 ] 10 } ec2-user@xxxxx$
追加する前に、現在のポリシーの数を確認してみます。
ec2-user@xxxxx$ aws iam list-policies | jq '.Policies[]|.PolicyName' | wc -l 918 ec2-user@xxxxx$
ポリシーを書いたjsonを指定してポリシーを作成します。
コマンド aws iam create-policy --policy-name ポリシー名 --policy-document ポリシー
ec2-user@xxxxx$ aws iam create-policy --policy-name test-policy --policy-document file://test-policy.json
実行すると以下のような出力が得られます。
{ "Policy": { "PolicyName": "test-policy", "PolicyId": "ANPAxxxxxxxxxxxxxxxxx", "Arn": "arn:aws:iam::xxxxxxxxxxxx:policy/test-policy", "Path": "/", "DefaultVersionId": "v1", "AttachmentCount": 0, "PermissionsBoundaryUsageCount": 0, "IsAttachable": true, "CreateDate": "2021-12-31T08:05:42+00:00", "UpdateDate": "2021-12-31T08:05:42+00:00" } } ec2-user@xxxxx$
追加できたハズなので、数を確認しましょう。
ec2-user@xxxxx$ aws iam list-policies | jq '.Policies[]|.PolicyName' | wc -l 919 ec2-user@xxxxx$
1増えてますね。
aws iam get-policy ポリシー情報取得
aws iam get-policy helpより
SYNOPSIS get-policy --policy-arn <value> [--cli-input-json | --cli-input-yaml] [--generate-cli-skeleton <value>]
get-userとは違い、get-policyは、ARNを指定する必要があります。
コマンド aws iam get-policy --policy-arn ポリシーARN
ec2-user@xxxxx$ aws iam get-policy --policy-arn arn:aws:iam::xxxxxxxxxxxx:policy/test-policy
出力結果
{ "Policy": { "PolicyName": "test-policy", "PolicyId": "ANPAxxxxxxxxxxxxxxxxx", "Arn": "arn:aws:iam::xxxxxxxxxxxx:policy/test-policy", "Path": "/", "DefaultVersionId": "v1", "AttachmentCount": 0, "PermissionsBoundaryUsageCount": 0, "IsAttachable": true, "CreateDate": "2021-12-31T08:05:42+00:00", "UpdateDate": "2021-12-31T08:05:42+00:00", "Tags": [] } } ec2-user@xxxxx$
aws iam attach-user-policy ポリシーをユーザへアタッチ
aws iam attach-user-policy helpより
SYNOPSIS attach-user-policy --user-name <value> --policy-arn <value> [--cli-input-json | --cli-input-yaml] [--generate-cli-skeleton <value>]
ポリシーをユーザへ紐つけるにはattach-user-policyを使います。
コマンド aws iam attach-user-policy --user-name ユーザ名 --policy-arn ポリシーARN
ec2-user@xxxxx$ aws iam attach-user-policy --user-name test-user --policy-arn "arn:aws:iam::xxxxxxxxxxxx:policy/test-policy"
aws iam detach-user-policy ポリシーをユーザからデタッチ
aws iam detach-user-policy helpより
SYNOPSIS detach-user-policy --user-name <value> --policy-arn <value> [--cli-input-json | --cli-input-yaml] [--generate-cli-skeleton <value>]
ユーザに紐ついたポリシーを外すにはdetach-user-policyを使います。
コマンド aws iam detach-user-policy --user-name ユーザ名 --policy-arn ポリシーARN
ec2-user@xxxxx$ aws iam detach-user-policy --user-name test-user --policy-arn "arn:aws:iam::xxxxxxxxxxxx:policy/test-policy"
aws iam attach-group-policy ポリシーをグループへアタッチ
aws iam attach-group-policy helpより
SYNOPSIS attach-group-policy --group-name <value> --policy-arn <value> [--cli-input-json | --cli-input-yaml] [--generate-cli-skeleton <value>]
ポリシーをグループへ紐つけるにはattach-group-policyを使います。
コマンド aws iam attach-group-policy --group-name グループ名 --policy-arn ポリシーARN
ec2-user@xxxxx$ aws iam attach-user-policy --group-name test-group --policy-arn "arn:aws:iam::xxxxxxxxxxxx:policy/test-policy"
aws iam detach-group-policy ポリシーをグループからデタッチ
aws iam detach-group-policy helpより
SYNOPSIS detach-group-policy --group-name <value> --policy-arn <value> [--cli-input-json | --cli-input-yaml] [--generate-cli-skeleton <value>]
ユーザに紐ついたグループを外すにはdetach-group-policyを使います。
コマンド aws iam detach-group-policy --group-name グループ名 --policy-arn ポリシーARN
ec2-user@xxxxx$ aws iam detach-group-policy --group-name test-group --policy-arn "arn:aws:iam::xxxxxxxxxxxx:policy/test-policy"
aws iam attach-role-policy ポリシーをロールへアタッチ
aws iam attach-role-policy helpより
SYNOPSIS attach-role-policy --role-name <value> --policy-arn <value> [--cli-input-json | --cli-input-yaml] [--generate-cli-skeleton <value>]
ポリシーをロールへ紐つけるにはattach-role-policyを使います。
コマンド aws iam attach-role-policy --role-name ロール名 --policy-arn ポリシーARN
ec2-user@xxxxx$ aws iam attach-role-policy --role-name test-role --policy-arn "arn:aws:iam::xxxxxxxxxxxx:policy/test-policy"
aws iam detach-role-policy ポリシーをロールからデタッチ
aws iam detach-role-policy helpより
SYNOPSIS detach-role-policy --role-name <value> --policy-arn <value> [--cli-input-json | --cli-input-yaml] [--generate-cli-skeleton <value>]
ユーザに紐ついたロールを外すにはdetach-role-policyを使います。
コマンド aws iam detach-role-policy --role-name ロール名 --policy-arn ポリシーARN
ec2-user@xxxxx$ aws iam attach-role-policy --role-name test-role --policy-arn "arn:aws:iam::xxxxxxxxxxxx:policy/test-policy"
aws iam list-entities-for-policy ポリシーをアタッチしたユーザ・グループ・ロール表示
aws iam list-entities-for-policy helpより
SYNOPSIS list-entities-for-policy --policy-arn <value> [--entity-filter <value>] [--path-prefix <value>] [--policy-usage-filter <value>] [--max-items <value>] [--cli-input-json | --cli-input-yaml] [--starting-token <value>] [--page-size <value>] [--generate-cli-skeleton <value>]
使用してみます。
コマンド aws iam list-entities-for-policy --policy-arn ポリシーARN
ec2-user@xxxxx$ aws iam list-entities-for-policy --policy-arn "arn:aws:iam::xxxxxxxxxxxx:policy/test-policy"
実行すろと、以下のようにアタッチしたグループ、ポリシー、ロールが表示されます。
{ "PolicyGroups": [ { "GroupName": "test-group", "GroupId": "AGPAxxxxxxxxxxxxxxxxx" } ], "PolicyUsers": [ { "UserName": "test-user", "UserId": "AIDAxxxxxxxxxxxxxxxxx" }, { "UserName": "test-user2", "UserId": "AIDAxxxxxxxxxxxxxxxxx" } ], "PolicyRoles": [ { "RoleName": "test-role", "RoleId": "AROAxxxxxxxxxxxxxxxxx" } ] } ec2-user@xxxxx$
コメント