🔐

AWS Vault + Docker版AWS CLI のすゝめ

2022/03/04に公開

AWS Vaultについて

ローカル環境でAWS CLIを利用する際、素のAWS CLIだと認証情報を平文で保存することになり、セキュリティ的に宜しくありません。

平文で保存することを回避する為、AWS Vaultを利用することが多いと思います。

AWS CLIについて

MacにAWS CLIをインストールする際、Homebrewpippkgファイルなどのインストール方法がありますが、個人的に一番楽なのは、AWSが公式で用意してくれているAWS CLIのDockerイメージを利用する方法です。

コマンドを実行する際は、下記のようなaliasを準備する必要がありますが、バージョンのアップグレードはdocker pullするだけで済むのは非常に楽です。

$ alias aws='docker run --rm -it -v ~/.aws:/root/.aws amazon/aws-cli'
$ aws s3 ls --profile default
$ docker pull amazon/aws-cli:latest

AWS VaultとDocker版AWS CLIの連携について

AWS ValutとDocker版AWS CLIを組み合わせて利用したいのですが、当然そのような仕組みは用意されていない為、zshで独自関数を作成してみました。

事前準備

$ brew install aws-vault direnv

.zshrc

~/.zshrc
aws() {
    aws-vault exec $AWS_PROFILE -- env | \
    read envs <<< $(awk -v 'ORS= ' '/AWS_(REGION|ACCESS_KEY_ID|SECRET_ACCESS_KEY|SESSION_TOKEN)/ {print "-e " $0}'); \
    zsh -c "docker run --rm -it $envs amazon/aws-cli $*"
}

AWS profileの作成

$ aws-vault add jonsmith
Enter Access Key Id: ABDCDEFDASDASF
Enter Secret Key: %%%
$ aws-vault list
Profile                  Credentials              Sessions
=======                  ===========              ========
jonsmith                 jonsmith                 -

利用するAWS profileを環境変数に設定

$ direnv edit .
export AWS_PROFILE=jonsmith

利用方法

$ aws --version
aws-cli/2.4.20 Python/3.8.8 Linux/5.10.76-linuxkit docker/x86_64.amzn.2 prompt/off
$ aws configure list
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                <not set>             None    None
access_key     ****************DASF              env    
secret_key     ****************awrh              env    
    region           ap-northeast-1              env    ['AWS_REGION', 'AWS_DEFAULT_REGION']

Discussion