この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
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で用いる要素について続けて行きたいのですが、割と長目になってしまったので続きは別エントリという事で。