AWS CLIでスイッチロールする為のconfigとcredentialsの設定

2 min read読了の目安(約2400字

はじめに

IAMロールでCLIを使おうと思って、configとcredentialsを設定しようと思った時に、苦戦しましたので記事にまとめました。
アクセスキーとシークレットアクセスキーとリージョンについてはここでは皆様知っている程でお話を進めます。
もし分からない方は公式ドキュメントからご確認ください。

スイッチロールせず、1つの環境しか使わない場合

まずは、
IAMロールではなく、一つのAWS環境しか使わない場合。

この場合、aws configureコマンドで設定するのが一番簡単です。
aws configureコマンドではなく、自分で直接configファイルとcredentialsファイルを作成して、入力しても大丈夫です。

$aws configure
AWS Access Key ID [None]: {あなたのアクセスキー}
AWS Secret Access Key [None]: {あなたのシークレットアクセスキー}
Default region name [None]: {AWSサービスを利用されているリージョン}
Default output format [None]: {出力したいフォーマット}

$aws configureを入力すると、
AWS Access Keyから順番に入力を求められます。
入力してENTERを押すと次の項目が出てきます。

※例

AWS Access Key ID [None]: sampleAccessKey
AWS Secret Access Key [None]: sampleSecretAccessKey
Default region name [None]: us-west-2
Default output format [None]: json

output formatはその名の通り、出力するフォーマットです。json,yaml,text などがあります。指定しない場合はjsonになります。

このコマンドを実行すると
~/.awsの中にconfigファイルとcredentialsファイルが作成され、下記のようになります。
上記の例の通り入力すると

~/.aws/config

[default]
region = us-west-2
output = json

~/.aws/credentials

[default]
aws_access_key_id = sampleAccessKey
aws_secret_access_key = sampleSecretAccessKey

と記載されています。
[default]とあるのはそのままの意味で、cliを利用する時にオプション設定しない場合はこのdefaultのものが呼ばれます。

$aws s3 ls

を入力すると、defaultの情報が呼び出されて、s3のlistが表示されます。

上記の設定では、一つのAWS環境だけ使う場合は問題無いのですが、
複数の環境を使う場合やIAMロールを使っている場合は、別の設定が必要です。

スイッチロールで複数の環境を利用したい場合

ここからが本題です。
複数の環境を使い分ける場合は、profileを使います。

まずは設定方法
コマンドで設定する場合はprofileオプションを使い、

$aws configure --profile {設定したいプロファイル名}

もしくは、個別に手動で設定します。

では、中身を設定していきましょう。
例えば1つのIAMユーザーにIAMロールが3つある場合

~/.aws/config

[profile a]
region = us-west-2
output = json
role_arn = arn:aws:iam::123456789012:role/role-name
source_profile = user1

[profile b]
region = us-west-2
output = json
role_arn = arn:aws:iam::567890123456:role/role-name
source_profile = user1

[profile c]
region = us-west-2
output = json
role_arn = arn:aws:iam::789012345678:role/role-name
source_profile = user1

~/.aws/credentials

[user1]
aws_access_key_id = sampleAccessKey
aws_secret_access_key = sampleSecretAccessKey

となります。
source_profileでcredentialsの名前を入力します。
CLIを実行する時は

$aws s3 ls --profile {configのプロファイル名} 

となります。

実行する時と
source_profileの宛先がごっちゃにならないように注意。

まとめ

  • 環境を分ける場合はprofileを使う。
  • source_profileの宛先はcredentialsの名前を指定する。

参考

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