AWS
aws-cli

aws-cliにて、複数の認証情報を使い分けたい場合の設定方法

aws-cliのprofile機能

複数アカウントを利用する際は危険

複数案件をこなしていると、aws-cliにて複数のアカウント情報を取り扱うことが出てくると思います。

その際に、各認証情報正確に区別する必要があり、間違って別の認証情報を使ってAWSサービスを操作してしまうと大問題になってしまします。

cliでの基本的な認証処理

aws-cliを使う場合、ホーム直下の.awsディレクトリにある認証情報は.configファイルと.creadincailsファイルに記載します。

directory
~
└── .aws
    ├── .config
    └── .credentials

上記ファイルは、aws configure コマンドで作成するも良いですし、物理的にファイルを作成してもどちらでも問題ありません。

実行ユーザー~/.aws/内の上記ファイルを利用して認証処理を行います。

記載内容は以下が基本です。

.config
[default]
output = json
region = {リージョン}
.credentials
[default]
aws_access_key_id = {アクセスキー}
aws_secret_access_key = {シークレットキー}

認証情報の複数管理方法

aws-cliにはこのようなケースを考えて、profile機能があります。

profile機能を知らなかった僕

以下のように各ファイルを管理し、

directory
~
└── .aws
    ├── .config.hoge
    ├── .credentials.hoge
    ├── .config.fuga
    └── .credentials.fuga

cpコマンドで都度コピーし

command
cp ~/.aws/.config.hoge ~/.aws/.config
cp ~/.aws/.credentials.hoge ~/.aws/.credentials

作業が終わったらrmコマンドで消していました。。。。(お恥ずかしい・・・orz)

command
rm  ~/.aws/.config
rm  ~/.aws/.credentials

profile機能を知った僕

ディレクトリとしては、各ファイル(config/credentials)をそれぞれ一つずつ管理します。

directory
~
└── .aws
    ├── .config
    └── .credentials

その上で、以下のようにセクションを各認証情報毎に分けて、各情報を記述します。

.config
[profile hoge]
output = json
region = {リージョン}

[profile fuga]
output = json
region = {リージョン}

[default]
output = json
region = {リージョン}

.credentials
[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)指定します。

その上で、コマンド実行時

command
aws ~~~ --profile ${profile}

--profileオプションでセクション(profile)を指定することで、各ファイルに指定したセクション(profile)毎の設定を利用して操作をしてくれます。

しゅごい。

ちなみに、--profileオプションをつけ忘れると、[default]セクション(profile)の設定が利用されるので、複数の認証情報を扱い場合はdefaultセクション指定せず必ず--profileで意図的に指定する運用にした方が良いかと思われます!