AWS CLIのクレデンシャル(認証情報)の管理と切り替え

AWS CLIで、作業内容に合わせてIAMユーザを複数利用したい時があるかと思います。

例えばS3のバケット操作のみ許可されたIAMユーザや、Terraform実行用に複数のサービスの操作権限が付与されたユーザを用意したり、要所でクレデンシャルの情報を切り替えたりしたいわけです。

認証情報の管理と切り替え方法をメモします。

defaultの認証情報を設定

aws configure コマンドを実行し、アクセスキーとシークレットキー、その他必要な情報を入力することで設定ができます。コマンド実行後、ホームディレクトリの .aws ディレクトリにクレデンシャルの情報が記録されます。

# ~/.aws/credentialsの中身

[default]
aws_access_key_id = xxxxxxxxxx
aws_secret_access_key = xxxxxxxxxx
# ~/.aws/configの中身

[default]
output = json
region = ap-northeast-1

profileを指定して複数の認証情報を管理

aws configure コマンドに --profile オプションをつけると、指定した名前で認証情報を設定することができます。

aws configure --profile hogehoge

~/.aws/credentials は下記のようになります。

[default]
aws_access_key_id = xxxxxxxxxx
aws_secret_access_key = xxxxxxxxxx

[hogehoge]
aws_access_key_id = xxxxxxxxxx
aws_secret_access_key = xxxxxxxxxx

[mogumogu]
aws_access_key_id = xxxxxxxxxx
aws_secret_access_key = xxxxxxxxxx

認証情報を指定する場合は下記のように、 --profile オプションとプロファイル名を引数に渡します。

aws cli --profile hogehoge s3 ls

設定ファイルを直接編集して複数の認証情報を管理

~/.aws/credentials~/.aws/config ファイルを直接編集して切り替えることもできます。

例えば下記のように複数の情報を追記しておき、コメントアウト・インをしてクレデンシャルを切り替えます。

[default]
# terraform-user
aws_access_key_id = xxxxxxxxxx
aws_secret_access_key = xxxxxxxxxx

# S3 ls only
# aws_access_key_id = xxxxxxxxxx
# aws_secret_access_key = xxxxxxxxxx

# god-user
# aws_access_key_id = xxxxxxxxxx
# aws_secret_access_key = xxxxxxxxxx

aws cliコマンドに --profile オプションを指定したくない、もしくはなんらかの事情で指定できない時に、応急処置的な方法として使えるかと思います。

まとめ

defaultのみで良い場合は aws configure コマンド。複数の認証情報を使い分けたい場合は aws configure --profile が使えます。

状況に応じて ~/.aws/credentials を直接書き換えるのもありですが、特別な事情がない場合は aws configure コマンドで設定するのが良いかなと思います。