AWS CLIでサービスの各種コマンドを動かしてみる(IAM編2: ユーザー)

この記事は公開されてから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]タブから作成が行えるようです。割り当てられるポリシーについてはグループのものと同じ。グループ・ユーザー・あとロールに関してそれぞれポリシーがありますが、この辺上下関係とか影響関係とかはあるものなのかしら?

userpolicy_.png

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"
    }
}

管理コンソールで内容を確認出来ました。

userpolicy2_.png

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で用いる要素について続けて行きたいのですが、割と長目になってしまったので続きは別エントリという事で。