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$


コメント