aws-cliのprofile機能
複数アカウントを利用する際は危険
複数案件をこなしていると、aws-cli
にて複数のアカウント情報を取り扱うことが出てくると思います。
その際に、各認証情報を正確に区別する必要があり、間違って別の認証情報を使ってAWSサービスを操作してしまうと大問題になってしまします。
cliでの基本的な認証処理
aws-cli
を使う場合、ホーム直下の.aws
ディレクトリにある認証情報は.config
ファイルと.creadincails
ファイルに記載します。
~
└── .aws
├── .config
└── .credentials
上記ファイルは、aws configure
コマンドで作成するも良いですし、物理的にファイルを作成してもどちらでも問題ありません。
実行ユーザーの~/.aws/
内の上記ファイルを利用して認証処理を行います。
記載内容は以下が基本です。
[default]
output = json
region = {リージョン}
[default]
aws_access_key_id = {アクセスキー}
aws_secret_access_key = {シークレットキー}
認証情報の複数管理方法
aws-cli
にはこのようなケースを考えて、profile機能があります。
profile機能を知らなかった僕
以下のように各ファイルを管理し、
~
└── .aws
├── .config.hoge
├── .credentials.hoge
├── .config.fuga
└── .credentials.fuga
cpコマンドで都度コピーし
cp ~/.aws/.config.hoge ~/.aws/.config
cp ~/.aws/.credentials.hoge ~/.aws/.credentials
作業が終わったらrmコマンドで消していました。。。。(お恥ずかしい・・・orz)
rm ~/.aws/.config
rm ~/.aws/.credentials
profile機能を知った僕
ディレクトリとしては、各ファイル(config/credentials)をそれぞれ一つずつ管理します。
~
└── .aws
├── .config
└── .credentials
その上で、以下のようにセクションを各認証情報毎に分けて、各情報を記述します。
[profile hoge]
output = json
region = {リージョン}
[profile fuga]
output = json
region = {リージョン}
[default]
output = json
region = {リージョン}
[hoge]
aws_access_key_id = {アクセスキー}
aws_secret_access_key = {シークレットキー}
[fuga]
aws_access_key_id = {アクセスキー}
aws_secret_access_key = {シークレットキー}
[default]
aws_access_key_id = {アクセスキー}
aws_secret_access_key = {シークレットキー}
上記のように.configでは[profile {profile}]
、.credentialsでは[{profile}]
のようにセクション(profile)指定します。
その上で、コマンド実行時に
aws ~~~ --profile ${profile}
と--profile
オプションでセクション(profile)を指定することで、各ファイルに指定したセクション(profile)毎の設定を利用して操作をしてくれます。
しゅごい。
ちなみに、--profile
オプションをつけ忘れると、[default]セクション(profile)の設定が利用されるので、複数の認証情報を扱い場合はdefaultセクションは指定せず、必ず--profileで意図的に指定する運用にした方が良いかと思われます!