AWS CLIでサービスの各種コマンドを動かしてみる(IAM編2: ユーザー)
aws-cliで色々サービスを触って見る第2弾は引き続きIAMから。IAMユーザーに関するコマンド群です。
IAM:ユーザー(user)に関する操作
ユーザーに関するaws-cliのコマンドは以下7個。
create-user delete-user get-user add-user-to-group remove-user-from-group list-users update-user
create-user
ユーザーを作成します。
$ aws iam create-user --user-name testuser { "User": { "UserName": "testuser", "Path": "/", "CreateDate": "2013-07-03T03:08:42.185Z", "UserId": "AIDAJTZ7MFWLACRCXHOFS", "Arn": "arn:aws:iam::317282958305:user/testuser" }, "ResponseMetadata": { "RequestId": "dd75b9d2-e38d-11e2-8fe2-a91a74ec1b95" } }
--pathオプションで値を設定する事も可能です。
$ aws iam create-user --user-name another-user --path /home/develop/ { "User": { "UserName": "another-user", "Path": "/home/develop/", "CreateDate": "2013-07-03T03:10:35.564Z", "UserId": "AIDAJPNKFHQA6JXW45BNC", "Arn": "arn:aws:iam::317282958305:user/home/develop/another-user" }, "ResponseMetadata": { "RequestId": "21067ac1-e38e-11e2-af7c-112dcfc16bf4" } }
delete-user
指定のユーザを削除します。
$ aws iam delete-user --user-name testuser { "ResponseMetadata": { "RequestId": "ec7d88d9-e38d-11e2-af3f-f58037e41cee" } }
グループに属しているユーザーを削除しようとするとエラーとなります。まずグループの紐付けを解除しておく必要があります。
$ aws iam delete-user --user-name another-user { "Errors": [ { "Message": "Cannot delete entity, must remove users from group first.", "Code": "DeleteConflict", "Type": "Sender" } ], "ResponseMetadata": { "RequestId": "ba11b591-e38e-11e2-885e-7117b4d431d8" } }A client error (DeleteConflict) occurred: Cannot delete entity, must remove users from group first.
get-user
ユーザー情報を取得します。ユーザー名を指定した場合はそのユーザー情報を、指定無しの場合は(aws-cli利用時に)サインインしているAWSアクセスキーに基づくユーザ情報を取得します。
$ aws iam get-user (AWS利用時に使っているアクセスキーに紐付くユーザー情報を表示) $ aws iam get-user --user-name user-e { "User": { "UserName": "user-e", "Path": "/", "CreateDate": "2013-07-02T14:28:04Z", "UserId": "AIDAILYIC22VECYIWXEPC", "Arn": "arn:aws:iam::317282958305:user/user-e" }, "ResponseMetadata": { "RequestId": "ee68ba9f-e391-11e2-805f-95793b858121" } }
存在しないユーザーを指定した場合はエラーとなります。
$ aws iam get-user --user-name another-user { "Errors": [ { "Message": "The user with name another-user cannot be found.", "Code": "NoSuchEntity", "Type": "Sender" } ], "User": {}, "ResponseMetadata": { "RequestId": "d706b42b-e391-11e2-805f-95793b858121" } }A client error (NoSuchEntity) occurred: The user with name another-user cannot be found.
add-user-to-group
任意のユーザーを任意のグループに追加します。既に追加されている場合でもエラーとはならないようです。
$ aws iam add-user-to-group --user-name new-iam-user $ aws iam add-user-to-group --user-name new-iam-user --group-name iam-test-group { "ResponseMetadata": { "RequestId": "48cdb502-e3c1-11e2-ba36-0f251103ce0b" } }
remove-user-from-group
所定のグループからユーザーを削除します。
$ aws iam remove-user-from-group --user-name another-user --group-name iam-test-group { "ResponseMetadata": { "RequestId": "0cbb34c4-e38f-11e2-9d6d-0b5035168c31" } }
delete-userの項で削除出来なかったユーザーも、これで削除出来るようになります。
$ aws iam delete-user --user-name another-user { "ResponseMetadata": { "RequestId": "1d6eb822-e38f-11e2-9d6d-0b5035168c31" } } $
list-users
また、以下のようにパス情報で絞込みも行えるようです。
$ aws iam create-user --user-name kinniku-man --path /chojin/seigi-chojin/ $ aws iam create-user --user-name terry-man --path /chojin/seigi-chojin/ $ aws iam create-user --user-name robin-mask --path /chojin/seigi-chojin/ $ aws iam create-user --user-name wars-man --path /chojin/seigi-chojin/ $ aws iam create-user --user-name brocken-jr --path /chojin/seigi-chojin/ $ aws iam create-user --user-name wolf-man --path /chojin/seigi-chojin/ $ aws iam create-user --user-name mongol-man --path /chojin/seigi-chojin/ $ aws iam create-user --user-name geronimo --path /chojin/seigi-chojin/ $ aws iam list-users --path-prefix /chojin/seigi-chojin/ | jq .[].UserName "brocken-jr" "geronimo" "kinniku-man" "mongol-man" "robin-mask" "terry-man" "wars-man" "wolf-man"
update-user
対象ユーザの情報を更新します。現在、『新しいパス(new-path)』と『新しいユーザー名』が更新出来るようです。
$ aws iam create-user --user-name baffalo-man --path /chojin/akuma-chojin/ $ aws iam get-user --user-name baffalo-man | jq '.User.Path' "/chojin/akuma-chojin/" $ aws iam update-user --user-name baffalo-man --new-path /chojin/seigi-chojin/ $ aws iam get-user --user-name baffalo-man | jq '.User.Path' / "/chojin/seigi-chojin/" $ aws iam update-user --user-name mongol-man --new-user-name lamen-man $ aws iam get-user --user-name lamen-man | jq '.User' { "Arn": "arn:aws:iam::317282958305:user/chojin/seigi-chojin/lamen-man", "UserId": "AIDAIHPOKTPI4FWSQYTGY", "CreateDate": "2013-07-03T09:44:45Z", "Path": "/chojin/seigi-chojin/", "UserName": "lamen-man" }
IAM:ユーザーポリシー(user-policy)に関する操作
ユーザーポリシーに関するaws-cliのコマンドは以下4個。
put-user-policy get-user-policy delete-user-policy list-user-policies
グループにもポリシーがありました。ではユーザーに対するポリシーはどのようなものなのでしょうか。管理コンソールで探ってみると、ユーザ情報の[permission]タブから作成が行えるようです。割り当てられるポリシーについてはグループのものと同じ。グループ・ユーザー・あとロールに関してそれぞれポリシーがありますが、この辺上下関係とか影響関係とかはあるものなのかしら?
put-user-policy
ユーザにポリシーを割り当てます。
まずは管理コンソールを用いて、適当なサンプルポリシーファイルを作成します。以下はRedShiftの読み取り専用ポリシー。
$ vi redshiftReadAccessPolicy.json { "Version": "2012-10-17", "Statement": [ { "Action": [ "redshift:Describe*", "ec2:DescribeAccountAttributes", "ec2:DescribeAvailabilityZones", "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcs", "ec2:DescribeInternetGateways", "sns:Get*", "sns:List*", "cloudwatch:Describe*", "cloudwatch:List*", "cloudwatch:Get*" ], "Effect": "Allow", "Resource": "*" } ] }
任意のユーザに対してコマンド実行。
$ aws iam put-user-policy --user-name user-a --policy-name RedshiftReadOnlyAccess20130703 --policy-document file://redshiftReadAccessPolicy.json { "ResponseMetadata": { "RequestId": "d69c2b06-e3e9-11e2-af7c-112dcfc16bf4" } }
管理コンソールで内容を確認出来ました。
get-user-policy
任意のユーザーポリシー情報を取得します。
管理コンソールで確認出来たユーザーポリシーをコマンドラインでも確認してみます。
$ aws iam get-user-policy --user-name user-a --policy-name RedshiftReadOnlyAccess20130703 { "UserName": "user-a", "PolicyName": "RedshiftReadOnlyAccess20130703", "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Action": [ "redshift:Describe*", "ec2:DescribeAccountAttributes", "ec2:DescribeAvailabilityZones", "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcs", "ec2:DescribeInternetGateways", "sns:Get*", "sns:List*", "cloudwatch:Describe*", "cloudwatch:List*", "cloudwatch:Get*" ], "Resource": "*", "Effect": "Allow" } ] }, "ResponseMetadata": { "RequestId": "0e40712d-e3eb-11e2-9d6d-0b5035168c31" } }[
delete-user-policy
ユーザーに割り当てられている任意のユーザーポーリシーを削除します。
$ aws iam delete-user-policy --user-name user-a --policy-name RedshiftReadOnlyAccess20130703 { "ResponseMetadata": { "RequestId": "d6041ed5-e3eb-11e2-af7c-112dcfc16bf4" } }
list-user-policies
ユーザーに割り当てられているユーザーポリシー名の一覧を取得します。
$ aws iam list-user-policies --user-name user-a [ "RedshiftReadOnlyAccess20130703" ]
この後もロールやその他IAMで用いる要素について続けて行きたいのですが、割と長目になってしまったので続きは別エントリという事で。