MFA設定されたAWSアカウントで簡単にAWSumeを使う

2022.12.07

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

前提・困っていたこと

AWS CLIを使った作業を行う場合に、スイッチロールを使ってAWSリソースにアクセスするのにDevelopersIOで紹介されていたAWSumeを利用しています。

ここで、スイッチロール元のAWSアカウントにMFAが設定されている場合、

awsume <profile_name>
Enter MFA token:

のように、MFAトークンの入力を求められます。

AWSアカウントの認証情報は1Passwordで管理しているため、ここで1Passwordを起動して、スイッチロール元のAWSアカウントの情報を表示、MFAシリアルの値をコピーして、ターミナルに貼り付けていました。

毎回、この操作を繰り返すのが手間だと考えたので、これを省力化する方法を探しました。

解決方法

1Password CLI 2 を使ってコマンドラインで MFA の認証コード (OTP) を取得する方法が書かれた記事がありました。

他方で、AWSume には、MFAトークンを受け取るオプションが存在したので、その組み合わせを使ってみました。

  1. AWSumeをインストールし、利用したいAWSアカウントがスイッチロールで利用できるように設定する
  2. 1Password CLI 2をインストールする(バージョン2である必要があります)
  3. eval $(op signin) でCLIから1Passwordにサインインする
  4. 1Password CLI 2 を使ってコマンドラインで MFA の認証コード (OTP) を取得するを参考に、スイッチロール元のMFAシリアルが取得できることを確認する

その上で、以下の組み合わせで、MFAトークンを手動で入力することなく、AWSume を利用することができました。

awsume <profile_name> --mfa-token `op item get "AWS Account" --otp`

ここで、 profile_name は、スイッチロール先のAWS CLIのプロファイル名、"AWS Account" は、1Passwordで管理しているスイッチロール元のAWSアカウントの名前を入力します。