jaws-framework で作ったアプリケーションを MFA によって保護された API アクセスでデプロイする

JAWS/best_practices.md at 6bfd2ca7a00054b750add46a909af3f4a9d4a749 · jaws-framework/JAWS · GitHub によると cloudformation の実行は jaws が生成したテンプレートを多段階の認証を経てAWS Consoleにアクセスし、UI上でペーストして実行すると良いみたいなことが書いてあるが、とてもやりたくないと思う。

かといってアクセスキーで認証できるアカウントに AdministratorAccess をやらないというは確かにそうしたい。

CLIAPI アクセスも MFA で認証する方法があることを知って、上の記事を読むと意外に手間がかからなかった。

  • IamUser: jaws (MFA 有効化 + アクセスキー発行 + いくらか使いたいポリシーをアタッチ)
  • Role: cfn-executer (MFA による認証が済んだ jaws ユーザーにロールを使うのを許可している)

を用意して ~/.aws/credentialsをこのようにした。

[toqoz-jaws]
aws_access_key_id = aaa # jawsユーザーのアクセスキー
aws_secret_access_key = AAA
[toqoz-jaws-cloudformation]
source_profile = toqoz-jaws
role_arn = arn:aws:iam::$ACCOUNT_ID:role/cfn-executer
mfa_serial = $MFA_SERIAL

aws cli とかだと、これでプロファイル toqoz-jaws-cloudformation を使えば勝手に mfa code を聞いてくれるんだけど、jaws dash はそうもいかなかったので、cloudformation の update は aws cli からそれ以外は jawsのコマンドでやることにした

bin/deploy