AWS CLI プロファイル & IAM 関連コマンド集

# 目的
最近、異なる AWS アカウントを切り替えて利用することが増えたため、AWS CLI のプロファイルおよび AIM 関連のよく使うコマンドをまとめておきます。

## デフォルトのプロファイルを新規登録 or 更新

コマンド: `aws configure`

```bash
$ aws configure
AWS Access Key ID [None]: XXXXXXXXXX
AWS Secret Access Key [None]: XXXXXXXXXX
Default region name [None]: ap-northeast-1
Default output format [None]: json
```

## 名前付きプロファイルを新規登録

コマンド: `aws configure --profile Name`

```bash
$ aws configure --profile Name
AWS Access Key ID [None]: XXXXXXXXXX
AWS Secret Access Key [None]: XXXXXXXXXX
Default region name [None]: ap-northeast-1
Default output format [None]: json
```

## 現在使用中のプロファイルを表示

コマンド: `aws configure list`

```bash
$ aws configure list
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                     Name           manual    --profile
access_key     ****************XXXX shared-credentials-file
secret_key     ****************XXXX shared-credentials-file
    region           ap-northeast-1      config-file    ~/.aws/config
```

## 名前付きプロファイルを指定して表示

コマンド: `aws configure list --profile Name`

```bash
$ aws configure list --profile Name
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                     Name           manual    --profile
access_key     ****************XXXX shared-credentials-file
secret_key     ****************XXXX shared-credentials-file
    region           ap-northeast-1      config-file    ~/.aws/config
```

## 使用するプロファイルを変更

```bash
# Mac or Linux
$ export AWS_PROFILE=Name

# Windows
[win] set AWS_PROFILE=Name
```

`AWS_PROFILE` に何も指定しなかった場合、Mac or Linux と Windows で挙動が異なるようです。

```bash
# Mac or Linux
$ export AWS_PROFILE=
$ aws configure list

The config profile () could not be found

# Windows
[win] set AWS_PROFILE=
[win] aws configure list
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                <not set>             None    None
access_key     ****************XXXX shared-credentials-file
secret_key     ****************XXXX shared-credentials-file
    region           ap-northeast-1      config-file    ~/.aws/config
```

## デフォルトで使用するプロファイルを指定

```bash
# Mac & Linux
$ export AWS_DEFAULT_PROFILE=Name

# Windows
[win] set AWS_DEFAULT_PROFILE=Name
```

`AWS_PROFILE` が設定されている場合、`AWS_DEFAULT_PROFILE` よりも優先されます。

```bash
$ echo $AWS_PROFILE
user1

$ echo $AWS_DEFAULT_PROFILE
user2

$ aws configure list
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                    user1           manual    --profile
access_key     ****************XXXX shared-credentials-file
secret_key     ****************XXXX shared-credentials-file
    region           ap-northeast-1      config-file    ~/.aws/config
```

## すべてのプロファイルを一覧表示

コマンド: `aws configure list-profiles`

```bash
$ aws configure list-profiles
default
test1
test2
```

## IAM ユーザーまたはロールの詳細を表示

コマンド: `aws sts get-caller-identity`

```bash
# 現在使用中の IAM ユーザーまたはロールの詳細を表示
$ aws sts get-caller-identity
{
    "UserId": "XXXXXXXXXX",
    "Account": "XXXXXXXXXX",
    "Arn": "arn:aws:iam::XXXXXXXXXX"
}

# 名前付きプロファイルを指定して IAM ユーザーまたはロールの詳細を表示
$ aws sts get-caller-identity --profile user1
{
    "UserId": "XXXXXXXXXX",
    "Account": "XXXXXXXXXX",
    "Arn": "arn:aws:iam::XXXXXXXXXX"
}
```

## アカウントのすべての IAM ユーザーを一覧表示

コマンド: `aws iam list-users`

```bash
$ aws iam list-users
{
    "Users": [
        {
            "Path": "/",
            "UserName": "Name",
            "UserId": "XXXXXXXXXX",
            "Arn": "arn:aws:iam::XXXXXXXXXX",
            "CreateDate": "Date",
            "PasswordLastUsed": "Date"
        }
    ]
}
```

## アカウントのすべてのユーザーグループを一覧表示

コマンド: `aws iam list-groups`

```bash
$ aws iam list-groups
{
    "Groups": [
        {
            "Path": "/",
            "GroupName": "GroupName",
            "GroupId": "XXXXXXXXXX",
            "Arn": "arn:aws:iam::XXXXXXXXXX",
            "CreateDate": "Date"
        }
    ]
}
```

# 参考サイト
- [AWS CLI ユーザーガイド: 設定ファイルと認証情報ファイルの設定](https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-configure-files.html)
- [AWS CLI ユーザーガイド: 名前付きプロファイル](https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-configure-profiles.html)
- [AWS CLI Command Reference: get-caller-identity](https://docs.aws.amazon.com/cli/latest/reference/sts/get-caller-identity.html)
- [AWS IAM ユーザーガイド: IAM ユーザーの一覧表示](https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_users_manage.html#id_users_manage_list)
- [AWS IAM ユーザーガイド: IAM ユーザーグループの一覧表示](https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_groups_manage_list.html)