AWSCLI(AWS SDK)のAssumeRoleでロールを切り替えるときに使えるスクリプトを作りました
こんにちは、臼田です。
awscliを利用しているときにAssumeRoleを使う事は、今ではそんなに面倒ではありません。下記のブログのようにprofileを切り替えることによりセッショントークンなどを気にしなくても良くなりました。
しかし、上記内でも書かれている通り、AWS SDK(boto3等)からAssumeRoleを利用する際には、従来通りにセッションを取得しなければなりません。
私はServerless FrameworkをAssumeRoleして使うときにこれにハマりました。
毎回これを行うのはやはり面倒なので、カッとなってAssumeRoleのコマンドと環境変数の設定まで行うスクリプトを作りました。
set_assumeスクリプト
コードはGithubに公開しました。
https://github.com/cm-usuda-keisuke/set_assume
シェル初心者お手製なので、なにか思う所があればプルリク下さい。(書き方とか、英語とか…)
set_assume.shの使い方
環境変数を設定するため、sourceコマンドにて実行して下さい。
-aにrole-arn、-nにrole-session-nameを入れて下さい。
$ source set_assume.sh -a arn:aws:iam::000000000000:role/targetrole -n newrole role-arn:arn:aws:iam::000000000000:role/targetrole role-session-name:newrole { "AssumedRoleUser": { "AssumedRoleId": "ASSUMEROLESUMPLE:newrole", "Arn": "arn:aws:sts::000000000000:assumed-role/targetrole/newrole" }, "Credentials": { "SecretAccessKey": "SampleXXXXXXXXXXXXXXXXXXX", "SessionToken": "Sample//////////XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX==", "Expiration": "2017-02-23T00:00:00Z", "AccessKeyId": "SAMPLEXXXXXXX" } } export success AWS_ACCESS_KEY_ID:SAMPLEXXXXXXX AWS_SECRET_ACCESS_KEY:SampleXXXXXXXXXXXXXXXXXXX AWS_SESSION_TOKEN: Sample//////////XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX==
MFAの情報も必要な場合には、-sと-tオプションも利用して下さい。
$ source set_assume.sh -a arn:aws:iam::000000000000:role/targetrole -n newrole -s arn:aws:iam::000000000000:mfa/yourrole -t 000000 role-arn:arn:aws:iam::000000000000:role/targetrole role-session-name:newrole serial-number:arn:aws:iam::000000000000:mfa/yourrole token-code: 000000 { "AssumedRoleUser": { "AssumedRoleId": "ASSUMEROLESUMPLE:newrole", "Arn": "arn:aws:sts::000000000000:assumed-role/targetrole/newrole" }, "Credentials": { "SecretAccessKey": "SampleXXXXXXXXXXXXXXXXXXX", "SessionToken": "Sample//////////XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX==", "Expiration": "2017-02-23T00:00:00Z", "AccessKeyId": "SAMPLEXXXXXXX" } } export success AWS_ACCESS_KEY_ID:SAMPLEXXXXXXX AWS_SECRET_ACCESS_KEY:SampleXXXXXXXXXXXXXXXXXXX AWS_SESSION_TOKEN: Sample//////////XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX==
オプションは下記のようになっています。
-a: role-arn (required) -n: role-session-name (required) -s: serial-number -t: token-code
実行したら、環境変数がセットされているので、その環境でslsコマンド等がAssumeRoleされた状態で利用できます。
unset_env_credentials.shの使い方
ついでに、環境変数にセットしたAWS Credentialsを消すスクリプトも作成しました。
こちらも同様に、sourceコマンドにて実行して下さい。
source unset_env_credentials.sh
最後に
AWS SDKでもAssumeRole簡単にできるようになるといいのになぁ…(願望)