AWSCLI(AWS SDK)のAssumeRoleでロールを切り替えるときに使えるスクリプトを作りました

2017.02.23

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、臼田です。

awscliを利用しているときにAssumeRoleを使う事は、今ではそんなに面倒ではありません。下記のブログのようにprofileを切り替えることによりセッショントークンなどを気にしなくても良くなりました。

AWS CLIがAssumeRoleによる自動クレデンシャル取得とMFAに対応しました!

しかし、上記内でも書かれている通り、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簡単にできるようになるといいのになぁ…(願望)