AWS CLIでスイッチロールする為のconfigとcredentialsの設定
はじめに
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の名前を指定する。
参考
Discussion