(AWS CLI)IAMを使う

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でも可能です。

スポンサーリンク

ユーザ操作

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$

コメント

タイトルとURLをコピーしました