スイッチロールでAWS SDKを実行する
「開発用のAWSアカウントにスイッチロールで入る」方法でコンソールを利用してる人が、同じように「開発用のPCからスイッチロールでAWS-SDKを実行する」方法。
CLIは --profile
でできるけど、SDKはどうやるのか分からなかったから調べた。
前提
ここでは、アカウントAで作成したIAMユーザー (MFA認証あり) を、アカウントBのIAMロールにスイッチして開発できるようにします。
この記事は以下の前提で記載するので、自分の環境に読み替えてください。
- アカウントA (スイッチ元) のID …
000000000000
- アカウントA (スイッチ元) のIAMユーザー名 …
kiriukun
- アカウントB (スイッチ先) のID …
999999999999
- アカウントB (スイッチ先) のIAMロール名 …
switch-DevRole
手順1. スイッチ元のアクセスキーを認証情報ファイルに記載
まずアカウントAでアクセスキーを作成し、シークレットとともにローカルの認証情報ファイル ~/.aws/credentials
に記載。
ファイルの内容は以下の通りになる。
もちろんCLIで aws configure
を使ってセットしてもOK。
なお、この記事ではプロファイルは default
とする。単純に aws configure
でセットすればプロファイルは default
のはず。
手順2. スイッチ先のロールを設定ファイルに記載
次に、ローカルの設定ファイル (~/.aws/config
) にスイッチロールの記載を追加する。
この記事ではプロファイル develop
として、セクション [profile develop]
を追加し、ファイルの内容は以下の通りになる。
スイッチ先のロールを role_arn
として、スイッチ元のプロファイルを source_profile
として、MFAデバイスを mfa_serial
として記載する必要がある。
region
と output
は気にしなくてOK。また、MFA認証を使わない場合は mfa_serial
の行は不要。
プロファイル名は develop
である必要はなく、好きな名前をつけてよい。
AWS CLIで叩いてみる
ここまでの手順で、CLIでオプション --profile
を指定することで、スイッチ先のロールでCLIを実行できるようになる。
ここでは試しに aws sts get-caller-identity
を実行して、実行者の情報を取得してみる。
まず、オプション --profile
未指定で実行。
アカウントAの情報が返却された。次に、オプション --profile
でプロファイル develop
を指定して実行。
Arn
に注目。スイッチ先のロール switch-DevRole
による一時的なアクセス情報が返却されている。
これで、スイッチロールを使ってCLIを叩けることを確認できた。
手順3. AWS SDKが設定ファイルを読み込むようにする
環境変数 AWS_SDK_LOAD_CONFIG
に 1
をセットする。これをしないとAWS SDKが設定ファイルを読み込んでくれず、プロファイルを認識しない。
一度設定したら変えるものではないと思うので、これは永続的に設定しても大丈夫。
手順4. デフォルトのプロファイルを設定する
最後に、環境変数 AWS_PROFILE
でデフォルトとなるプロファイルを設定する。
ここでは前述のスイッチロールを設定した develop
プロファイルをセットする。
これをセットすると、CLIで使われるデフォルトのプロファイルも変更されるので注意。なお、Linuxでは以下のコマンドで環境変数を削除できる。
AWS SDKで叩いてみる
前述の aws sts get-caller-identity
をAWS SDKから実行してみる。
npm install aws-sdk
したディレクトリで、コマンドラインから node
の対話モードで以下を実行。
このように、スイッチ先のロール switch-DevRole
による一時的なアクセス情報が返却されれば成功。
以下のようにエラーが表示された場合は設定ファイルが読み込めていないので、環境変数 AWS_SDK_LOAD_CONFIG
に 1
がセットされているかもう一度確認。
以上
これだと、別のAWS環境も利用する人はたびたび環境変数 AWS_PROFILE
を手動で設定しなきゃいけなくて面倒かも。そこはどうしようって感じ。
ちなみに環境変数 AWS_PROFILE
を使わずに、以下のようにコード内でプロファイルを指定する方法もある。
でもこれで開発しちゃうと、本番環境でココどうするのって結局なるから、環境変数 AWS_PROFILE
で設定するのがいいかなと個人的には思う。
参考にさせていただいた記事
IAM初心者がAWS CLIでスイッチロールするまで | DevelopersIO
設定の基本 - AWS Command Line Interface
AWS CLI での IAM ロールの使用 - AWS Command Line Interface
IAM ロール (AWS CLI) の切り替え - AWS Identity and Access Management