AWS CLIのprofile設定について整理してみた
AWS CLIとは?
CLIとはコマンドラインインターフェイスの略で、AWSをコマンドラインから利用するためのツールです
新プロジェクトへ移った際など、毎回忘れて調べ直すことになっているのでここに整理してまとめておこうと思います
インストール
インストール方法については公式HPを参照
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html
名前付きprofileとは?
名前付きprofileは、AWS CLIコマンドを操作する際に適応できる設定と認証情報の集まりです。
コマンドラインでCLIコマンドを打ち込む際、profileを使用することで認証情報を切り替えて操作することができます
例)
$ aws s3 ls --profile ei_blog
コマンドラインからprofileの設定をする
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
.aws/config
[default] region=ap-northeast-1 output=json [ei_blog] region=ap-northeast-1 output=json
.aws/credentials
[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設定
スイッチ先のIAM Roleにsts:AssumeRoleを実行する許可するポリシーをスイッチ元のIAM Userに加えておきます
*AssumeRoleとは?
AWSアカウント間でIAM Roleを引き渡す方法、今回の場合sample-manageがsample-devのロールに対してAssumeRoleをすることでsample-devのRoleでAWSリソースを操作できるようになります
.aws/config
[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
.aws/credentials
[sample-manage] aws_access_key_id = ****************XXXX aws_secret_access_key = ****************XXXX
MFAを用いたスイッチロールパターン
.aws/config
[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