AWS CLIのprofile設定について整理してみた

#AWS
#CLI
#profile

CLIとはコマンドラインインターフェイスの略で、AWSをコマンドラインから利用するためのツールです

新プロジェクトへ移った際など、毎回忘れて調べ直すことになっているのでここに整理してまとめておこうと思います

インストール方法については公式HPを参照

https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html

 

名前付きprofileは、AWS CLIコマンドを操作する際に適応できる設定と認証情報の集まりです。

コマンドラインでCLIコマンドを打ち込む際、profileを使用することで認証情報を切り替えて操作することができます

 

例)

$ aws s3 ls --profile ei_blog

https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-configure-profiles.html

 

まず、aws configureのコマンドにより対話的に設定することができます

 

オプションなしだとdefaultに設定

$ aws configure AWS Access Key ID [****************XXXX]: AWS Secret Access Key [****************XXXX]: Default region name [ap-northeast-1]: Default output format [json]:

 

--profileオプションをつけると指定した名前のprofileに設定されます 以下はei_blogという名前のprofileを作る例

$ aws configure --profile ei_blog

設定したprofile情報は「~/.aws」に保存されています コマンドラインからaws configureで設定しなくても、直接編集して設定することも可能です

.aws/ ├ config └ credentials
[default] region=ap-northeast-1 output=json [ei_blog] region=ap-northeast-1 output=json
[default] aws_access_key_id = ****************XXXX aws_secret_access_key = ****************XXXX [ei_blog] aws_access_key_id = ****************XXXX aws_secret_access_key = ****************XXXX

sample-manageのアカウントからsample-devアカウントへスイッチロールする例です

Trust Relationship

条件として、RoleSessionNameがsample-manageにログインしているユーザーのusernameであることが必要という設定にしています

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<スイッチ元 account id>:root" }, "Action": "sts:AssumeRole", "Condition": { "StringLike": { "sts:RoleSessionName": "${aws:username}" } } } ] }

スイッチ先のIAM Roleにsts:AssumeRoleを実行する許可するポリシーをスイッチ元のIAM Userに加えておきます

 

*AssumeRoleとは?

AWSアカウント間でIAM Roleを引き渡す方法、今回の場合sample-manageがsample-devのロールに対してAssumeRoleをすることでsample-devのRoleでAWSリソースを操作できるようになります

[profile sample-manage] region=ap-northeast-1 output=json [profile sample-dev] source_profile=sample-manage role_arn=arn:aws:iam::<スイッチ先 account id>:role/<role name> //スイッチ先のロールARN role_session_name=<今回の場合はsample-manageアカウントのIAMユーザー名> region=ap-northeast-1
[sample-manage] aws_access_key_id = ****************XXXX aws_secret_access_key = ****************XXXX
[profile mfa-manage] [profile mfa-dev] source_profile=mfa-manage role_arn=<スイッチ先のロールARN> role_session_name=<今回の場合はsample-manageアカウントのIAMユーザー名> mfa_serial=arn:aws:iam::<スイッチ元 account id>:mfa/<IAMユーザー名> region=ap-northeast-1