AWS ValutによるMFA認証メモ

# 概要

* セキュアにAWSにログインまたスイッチロールしたい

# 前提

:::note

*  マルチアカウントである
*  スイッチロールが設定されている

:::


# 詳細

:::note

*  aws-vaultでMFA認証およびスイッチロールをする

:::

## インストール

```
brew install --cask aws-vault
```

# 設定

* アクセスキーを確認

```
cat ~/.aws/credentials
```

* 既存の利用するIAMユーザを登録する
* "hoge-user"はprofileに追加される識別子なので任意の名称で良い

```
$ aws-vault add "hoge-user"
Enter Access Key ID: AKI************
Enter Secret Access Key: 
Added credentials to profile "profile company" in vault
```

* 画面に今後利用したいパスワードの入力を促されるので適当なパスワードを入力

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57350/fd1ba528-ec78-dfc4-27e5-947d2c75bf15.png)

* `~/.aws/config`にprofile設定が追加されている

```
$ tail ~/.aws/config
[profile hoge-user]
```
```
$ aws-vault ls
Profile                  Credentials              Sessions                 
=======                  ===========              ========                                    
default                  -                        -                        
hoge-user                hoge-user                -                    
```

* `テスト:`aws-vaultコマンドでsts経由でアカウント情報を取得して見る

```
$ aws-vault exec <hoge-user> -- aws sts get-caller-identity
{
    "UserId": "AI***************L7",
    "Account": "09********82",
    "Arn": "arn:aws:iam::09********82:user/company-hoge-iamuser"
}
```

* 認証がパスし、Sessins欄に有効期限が表示される

```
$ aws-vault ls
Profile                  Credentials              Sessions                 
=======                  ===========              ========                                    
default                  -                        -                        
hoge-user                hoge-user                sts.AssumeRole:59m46s             
```



* `テスト:`aws-vaultコマンドで環境変数を取得してみる

```
$ aws-vault exec <hoge-user> -- env | grep AWS
AWS_VAULT=<hoge-user>
AWS_DEFAULT_REGION=ap-northeast-1
AWS_SECURITY_TOKEN=*******
AWS_REGION=ap-northeast-1
AWS_ACCESS_KEY_ID=ASIA*******DB6ME
AWS_SECRET_ACCESS_KEY=*******************
AWS_SESSION_TOKEN=**********
AWS_SESSION_EXPIRATION=2022-04-19T06:51:04Z
```

* CloudTrailでget-caller-identityを実行したことの詳細を確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57350/6e02ad4b-0fe0-6cde-2a72-dcdd4192fdef.png)

# スイッチロールする場合

* 以下のような`~.aws/config`を作成
* mfa_serialはMFAのarnを入力する事。iam-userのarnと間違えると認証できない。


```
[profile hogeuser]  #aws-vaultで追加したprofile


[profile hogeuser-common] #スイッチロール前アカウント
source_profile = hogeuser
region=ap-northeast-1
output=json
mfa_serial=arn:aws:iam::09********82:mfa/company-hoge-iamuser
role_session_name=company-hoge-iamuser

[profile hogeuser-admin] #スイッチロール先アカウント
include_profile=hogeuser-common
role_arn=arn:aws:iam::39********81:role/fullaccess_admin_company-hoge-iamuser

```

`テスト：`aws-vaultコマンドでsts経由でアカウント情報を取得して見る

```
$ aws-vault exec hogeuser-admin -- aws sts get-caller-identity
Enter MFA code for arn:aws:iam::09********82:mfa/company-hoge-iamuser: <MFA:6桁の数字を入力>
{
    "UserId": "AR**********5E:company-hoge-iamuser",
    "Account": "39********81",
    "Arn": "arn:aws:sts::39********81:assumed-role/fullaccess_admin_company-hoge-iamuser/company-hoge-iamuser"
}
```

`テスト：`aws-vaultコマンドでAWSコンソールにログイン

```
$ aws-vault login hogeuser-admin
```

## profile削除する場合

* 不要になったprofileは以下のようにして削除

```
$ aws-vault remove "profile <profile_name>"   
Delete credentials for profile "profile <profile_name>"? (y|N) y
Deleted credentials.

$ vi ~/aws/config
:
[profile <profile_name>]   ⇐※1末尾にあるaws vault add した際追加されたprofileを削除
```
※1を対応しないと以下エラー

```
$ aws-vault add <profile_name>
aws-vault: error: add: Your profile has a source_profile of <profile_name>, adding credentials to <profile_name> won't have any effect
```