AWS CLIをMFA付きで使う際のbatファイル(Windows用)

公式で公開されているMFAのためのコマンドを毎回コピペコピペで実行するのは嫌すぎるので、簡略に――作り込むほどのものではないので――バッチファイルを作って使うことにした。

言うまでもなくWindows用である。

内容

一部マスキングしているが、下記のような内容となる。

set AWS_ACCESS_KEY_ID=
set AWS_SECRET_ACCESS_KEY=
set AWS_SESSION_TOKEN=

aws sts get-session-token --serial-number arn:aws:iam::XXXXXXXXX:mfa/XXXXXXXXXX  --token-code %1 > tmp.json

for /f "usebackq" %%A in (`type tmp.json ^|  jq -r ".Credentials.AccessKeyId"`) do set AWS_ACCESS_KEY_ID=%%A
for /f "usebackq" %%A in (`type tmp.json ^|  jq -r ".Credentials.SecretAccessKey"`) do set AWS_SECRET_ACCESS_KEY=%%A
for /f "usebackq" %%A in (`type tmp.json ^|  jq -r ".Credentials.SessionToken"`) do set AWS_SESSION_TOKEN=%%A

--serial-numberには、AWSのマネジメントコンソールのSecurity credentialsのSign-in credentialsのAssigned MFA deviceにある値をハードコーディングしている。外部設定ファイルに入れたほうが使いまわしが効くのだが、業務用で他の人に配るならともかく、完全に個人用なので省略した。テンポラリファイルも作らなくてもなんとかする方法がありそうだが、これもわざわざ時間をかけて作り込むメリットがないのでオミットした。おかげで製作時間は多分10分くらいである。

余談ながら背景

先の実験でコンテナからTerraformを使うのは微妙という判断とあいなり、WSLを使ってみたところこれまたTerraformのコマンドキャンセルでコンソールから追い出される問題に遭遇し、しかたないので普段はWindowsからTerraformを使う状況に戻ってしまった。そこでしぶしぶ作ることにしたものである。

つまりAWS CLIを動かすのは途中経過で、Terraformを動かすのが最終目標なのだが、そのあたりの事情はバッチファイルの内容と対して関係しないため、タイトルはAWS CLI用とつけている。

参考