aws configureでアクセスキーを保存するとアクセスキーは ~/.aws/credentialsに保存される。しかし、この方法では平文で保存されるのでアクセスキーが漏洩した場合にセキュリティ上のリスクがある。

aws-vaultを使うとアクセスキーの平文での保存を避けつつCLIでAWSにアクセスできる。

aws-vaultとは

aws-vaultはAWSのクレデンシャル情報を安全に保存し、コマンド実行時に必要な情報を取得して認証するCLIツール。認証情報は暗号化されて保存されるため、AWSアクセスキーの平文での保存を避けつつ、CLIでAWSへアクセスできるようになる。

aws-vaultのインストール

MacではHomebrewを使ってインストールできる。

$ brew install --cask aws-vault

Linuxなど他の環境ではGithubからダウンロードできる。

Releases · 99designs/aws-vault

aws-vaultの使い方

アクセスキーの保存: aws-vault add

アクセスキーの保存はaws-vaultを使って以下のようにコマンドを実行する。

$ aws-vault add [profile name]
Enter Access Key ID: AKIXXXXXXXXXXXXXXXXXXXXX
Enter Secret Access Key:
Added credentials to profile "xxxx" in vault

[profile name]は、保存するクレデンシャル情報の名前で任意の名前を指定できる。

アクセスキーの一覧: aws-vault list

保存されたアクセスキーの一覧を表示するには以下のコマンドを実行する。

$ aws-vault list
Profile                  Credentials              Sessions
=======                  ===========              ========
suer                     suer                     -

アクセスキーの使用: aws-vault exec

aws-vaultで保存したアクセスキーを使ってAWSにCLIでアクセスするには、以下のコマンドを実行する。

aws-vault exec [profile name] -- コマンド

たとえば、S3バケットの一覧を表示するには以下のように実行する。

$ aws-vault exec [profile name] -- aws s3 ls

アクセスキーの削除: aws-vault remove

保存されたアクセスキーを削除するには、以下のコマンドを実行する。

$ aws-vault remove [profile name]

[profile name]は削除したいクレデンシャル情報の名前。

アクセスキーの復元: –no-sessionオプション+環境変数の確認

aws-vaultで保存したアクセスキーを復元するには–no-sessionオプションを付けてenvコマンドで環境変数AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYを確認する。

$ aws-vault exec [profile name] --no-session -- env | grep -i aws
...
AWS_ACCESS_KEY_ID=AKIXXXXXXXXXXXXXXXXXXXX
AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXXXXXXXXXXXX

--no-sessionオプションを付けない場合もAWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYは設定されるが、aws-vaultが生成する一時的なキーとなっている。 大本のアクセスキーを確認するには--no-sessionオプションが必要となる。

ブラウザでAWS Consoleにログインする

以下のコマンドでブラウザを立ち上げ、AWS Consoleを開く。

$  aws-vault login [profile name]

aws-vaultコマンドを省略する

aws-vault exec [profile name] -- コマンド とするのは長いので通常通りaws cliを利用するには~/.aws/configで対象profileに対してcredential_processを指定します。Macの場合は以下のように設定します。

[profile name]
credential_process=aws-vault exec [profile name] --json --prompt osascript

これで通常通りawsコマンドを実行できる。

aws --profile [profile name] s3 ls