Skip to content

MFAが有効になっているアカウントのCLI用認証ツール

2020/5/24

最近、AWSを使う機会が多く、会社で触ることも多い。
会社の場合、色々と厳しいためCLIについてもMFAを有効化している。

"MFAトークンを使用して、AWS CLI 経由で AWS リソースへのアクセス"する方法について、AWS公式が以下の通り説明している。
MFA トークンを使用して、AWS CLI 経由で AWS リソースへのアクセスを認証する方法を教えてください。

毎回セッショントークンを作成して環境変数に設定するか、認証情報ファイルを編集する必要があり、これが非常に面倒だ。

そこで、簡単なツールを作ってみた。

置き場所
https://github.com/poppyhi/make_aws_credential

セッショントークンを作成、環境変数にセットするようのスクリプトを生成するツール。
Linux環境用のシェルスクリプト生成版とWindows環境用のバッチ生成版を作成した。

とりあえず普段Linuxを触っているため、Linux版について簡単に説明。

#!/usr/bin/python3
import json
import subprocess
import os

token_code = input('Enter token code:')

# create session token(10hours)
command = 'aws sts get-session-token --serial-number arn:aws:iam::[ID]:mfa/[UID] --duration-seconds 36000 --token-code ' + str(token_code)
ret = subprocess.check_output(command, shell=True)

credentials = json.loads(ret)

AccessKeyId = credentials["Credentials"]["AccessKeyId"]
SecretAccessKey = credentials["Credentials"]["SecretAccessKey"]
SessionToken = credentials["Credentials"]["SessionToken"]

filename = "set_aws_credential.sh"
with open(filename, mode='w') as f:
    f.write("export AWS_ACCESS_KEY_ID=" + AccessKeyId + "\n")
    f.write("export AWS_SECRET_ACCESS_KEY=" + SecretAccessKey + "\n")
    f.write("export AWS_SESSION_TOKEN=" + SessionToken + "\n")

aws sts get-session-token のところのarn:aws:iam::[ID]:mfa/[UID] のところは自分のmfaデバイス情報に書き換える必要がある。

ツール実行後、 Enter token code: と表示されるので、mfaのトークンを入力する。

set_aws_credential.sh というシェルスクリプトのファイルが生成されるため、

$ source set_aws_credential.sh

と実行すれば環境変数が設定される。

--duration-seconds 36000 のところでセッショントークンの有効期限が設定されている。
36000秒は10時間だが、最大は129600秒(36時間)らしいので好きに書き換えれば良い。

なお、何故環境変数設定スクリプトを生成する形にしたかというと、python実行中に環境変数を設定しても、pythonが実行し終わると環境変数の設定がなくなってしまうからだった。

うまい方法ないかなーと思っているが、とりあえずちょっとだけ手間が増えるだけなのでいいかなと考えている。