プロファイルがたくさん書いている ~/.aws/config を薄くする
AWS アカウントを複数使っていると~/.aws/config が大きくなりがちで、複数の組織に跨ったプロファイルが書かれている場合、プロファイル名の重複や誤編集などあります。組織ごとに分離できたら若干安全になる気がします。 今回、任意のプロファイルを ~/.aws/config から分離することができたので、その方法について書きます。
AWS CLI は環境変数 AWS_CONFIG_FILE を参照するため、この仕組みを利用してラッパーコマンドを作成すれば、任意の設定ファイルを指定して aws コマンドを実行できます。以下では、homebrew formula を活用した実装例を示します。
aws/config
[profile XXX]
sso_start_url=https://d-XXX.awsapps.com/start/
sso_account_id=XXX
sso_region=us-east-1
sso_role_name=AWSAdministratorAccess
output=json
region=us-east-1
[profile YYY]
sso_start_url=https://d-XXX.awsapps.com/start/
sso_account_id=XXX
sso_region=us-east-1
sso_role_name=AWSAdministratorAccess
output=json
region=us-east-1
実行ファイル hoge
#!/bin/bash
SUBCOMMAND=$1
shift
case "$SUBCOMMAND" in
aws)
AWS_CONFIG_FILE="$HOGE_AWS_CONFIG_FILE" aws "$@"
;;
aws_config_file_path)
echo "$HOGE_AWS_CONFIG_FILE"
;;
*)
# TODO: extract as help function
echo "Usage: hoge-cli <subcommand> [options]"
echo "Available subcommands:"
echo " aws Run AWS commands with hoge configuration"
;;
esac
Formula/hoge-cli.rb
class HogeCli < Formula
desc "hoge-cli is a command line tool for hoge' developers."
homepage 'https://github.com/hoge/hoge-cli'
version '0.1.2'
url 'git@github.com:hoge/hoge-cli.git', using: :git, tag: 'v0.1.2'
head 'git@github.com:hoge/hoge-cli.git', using: :git, branch: 'master'
depends_on 'awscli'
def install
libexec.install 'hoge', 'aws/config' => 'aws_config'
(bin / 'hoge').write_env_script libexec / 'hoge', HOGE_AWS_CONFIG_FILE: "#{libexec}/aws_config"
end
end
リポジトリは非公開のままで、homebrew でインストールできるようにするためには、以下のようにします。
brew tap hoge/hoge-cli git@github.com:hoge/hoge-cli.git
brew install hoge-cli
これで hoge
のサブコマンドとして aws コマンドを実行すると homebrew formula 内で抱えた aws config を参照して aws コマンドが実行されます。
ex: hoge aws s3 ls --profile XXX
まとめ
homebrew formula を使って aws コマンドのプロファイルを切り替える方法を紹介しました。
この方法を使うことで、~/.aws/config が肥大化することを防ぎつつ、特定の組織に閉じたプロファイルに限定した複数の AWS アカウントを使い分けることができます。また、homebrew formula を使うことで、他のユーザーにも簡単に共有できます。
以上。