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
コマンドで設定するのが良いかなと思います。