AWS-Vaultの設定方法

# 概要
開発環境でAWSの認証情報を安全に行う為に、`AWS Vault`を導入しました。今回はその設定方法について記載します。

# 事前設定
- AWSのアカウントがあり、`IAM`の設定が出来る権限を持っている
- [Homebrew](https://brew.sh/ja/)がインストールされている

# 導入手順
## 基本設定
-  `AWS Vault`をインストールする
```sh
brew install --cask aws-vault 
```

- `AWS Vault`にAWS認証情報を追加する
<font color="red">※ **Access Key**と**Secret Access Key**の入力が必要な為、各項目に入力を行う</font>


```sh
# 構文
aws-vault add # 任意のprofile名入力

# 下記はコマンド入力指示
Enter Access Key Id: # AWSのアクセスキーを入力
Enter Secret Key: # AWSのシークレットアクセスキーを入力

# 入力例
aws-vault add test

# 下記はコマンド入力指示
Enter Access Key Id: ABDCDEFDASDASF
Enter Secret Key: %%%
```
:::note warn
アクセスキーが作成されていない場合、下記のURLに作成方法が記載してありますので、参考にして作成してください。
[**[AWS公式ドキュメント] アクセスキーの管理 (コンソール)**](https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_credentials_access-keys.html#Using_CreateAccessKey)
:::


:::note alert
**aws-vaultのキーチェーンのパスワードを忘れた際の対処方法** 
- 下記のコマンドで、aws-vaultのキーチェーンの情報を消去する
```sh
rm ~/Library/Keychains/aws-vault.keychain-db
```
- 再度、キーチェーンの設定が表示される為、パスワードを入力する

[[公式]Lost password ](https://github.com/99designs/aws-vault/issues/171)
:::

- `aws-vault list`のコマンドで登録されている事を確認する
```
aws-vault list
Profile                  Credentials              Sessions                 
=======                  ===========              ========                 
default                  -                        -                        
test                     test                     -   
```

- 初期の`config`ファイルは、下記の状態になっている
```sh
cat ~/.aws/config                                          
[default]
region=ap-northeast-1

[profile test]
```

## 認証情報を継承
- `source_profile`を設定をして、`default`に記載している認証情報を継承する
```sh
# 構文
aws configure set profile.任意のプロファイル名.source_profile default(継承したいprofileを選択しても良い)

# 入力例
aws configure set profile.test.source_profile default
```

:::note warn
`default`に設定があり、`profile`内に設定がない場合、`default`の設定内容を参照する
:::

## リージョンの変更
- `profile`毎に使用するリージョンを変更したい場合に使用する

```sh
# 構文
aws configure set profile.任意のprofile名.region リージョン名

# 入力例
aws configure set profile.test.region us-east-1
```


## IAMロールの導入
- `profile`毎にロールの権限を付与してAWSのアクセス権限を制御したい場合に使用する
```sh
構文
aws configure set profile.任意のprofile名.role_arn IAMロールのARN

入力例
aws configure set profile.test.role_arn arn:aws:iam::123456789000:role/testRole
```

## MFA認証の導入
`profile`毎にMFA認証を設定したい場合に使用する
```
# 構文
aws configure set profile.任意のprofile名.mfa_serial MFAのARN

# 入力例
aws configure set profile.test.mfa_serial arn:aws:iam::987654321000:mfa/testMfa
```

:::note warn
MFA認証の登録方法に関しては、下記を参考にして作成して下さい。
[[公式]MFA デバイスを登録する](https://docs.aws.amazon.com/ja_jp/singlesignon/latest/userguide/how-to-register-device.html)
:::


## コマンドの叩き方

```sh
# 構文
aws-vault exec 任意のプロファイル名 -- awsコマンド or Terraformコマンド

# 入力例
# AWS CLI
aws-vault exec test -- aws s3 ls

# Terraform CLI
aws-vault exec test -- terraform init
```

## 補足
:::note info
今回は、基本的な設定を記載しております。他にもいろんな設定が出来る為、公式ドキュメントを参考にして、必要に応じて組み込んで下さい
:::



## AWS Vaultに設定した認証の消去方法
- 下記の消去コマンドで、Credentialsに記載されている`profile`情報を入力して消去を行う
(消去する際、本当に消去して良いか表示がされる為、問題なければ`y`を押下する)
```sh
aws-vault remove プロファイル名

# 最終確認のコマンド入力
Delete credentials for profile "test"? (y|N) y
Deleted credentials.
```

# 参考記事
[[公式]AWS Vault](https://github.com/99designs/aws-vault)

# まとめ
今回の記事の内容とは関係ないが、公式を読み込んで設定する事で、仕組みも理解出来、応用した設定も出来る。