LoginSignup
0
0

More than 1 year has passed since last update.

スマホを使わずにAWSの二段階認証を行う

Last updated at Posted at 2022-06-19

履歴

  • 2022/6/19 初版
  • 2023/1/6 誤植修正

動機

  • AWSにログインするにはID・パスワードに認証だけでなく、仮想MFAデバイスなどを用いた多要素認証を行う方がセキュリティ上良いとされています
  • 仮想MFAデバイスにはスマホアプリのGoogle AuthenticatorやMS Authenticatorが用いられることが多いのですが、以下のような問題があります
    • AWSにログインするたびにスマホが必要になり、PC上のブラウザにOne Time Password(OTP)を手入力する必要がある。
    • スマホをなくしたり、壊れたりするとAWSにログインできなくなる

やりたいこと

  • スマホアプリのAuthenticatorは今まで通り使える
  • 自分の所有するPCからはスマホなしでAWSにログインできるようにする

前提など

  • AWSへのログインをテーマにしていますが、他のサービスにも使えます
  • Linuxを前提します(他のプラットフォームで同じことができるかは未確認)

MFAデバイスの設定

  • AWSにログインして、画面右上のユーザー名をクリックして、「セキュリティ認証情報」の設定を開きます

ksnip_20220619-104842.png

  • 多要素認証の欄から「MFAデバイスの管理」を開きます
    • すでにMFAデバイスを登録済みの場合は、一旦削除する必要があります。

ksnip_20220619-105814.png

  • 下記の画面で以下のように操作します
    • 「QRコードの表示」をクリックして、スマホのAuthenticatorアプリにアカウントを追加します
    • 「シークレットキーの表示」をクリックして表示される文字列をコピーしておきます
    • スマホのAuthenticatorからMFAコードを2回取得して、MFAコード1と2に入力します
    • 「MFAの割り当て」を押下します

ksnip_20220619-105820.png

ここまででスマホのAuthenticatorアプリは通常通り使えるようになります

仮想MFAシェルスクリプトの仕様

スマホのAuthenticatorの代替となる、シェルスクリプトを作成します。
使い方は以下のようなものにします。IAMユーザー名はhogehogeとします

$ mymfa hogehoge
hogehoge
123456

ここで123456がMFAコードです。
これを手でコピーしても良いのですが、MFAコードをクリップボードにコピーするところまでシェルスクリプトで行うようにします。

仮想MFAシェルスクリプトの実装 mymfa

シークレットキーなどの情報は別ファイルに分けておきたいので、まずはロジックの部分を以下のように実装します。

ファイル名は仮にmymfaとします。

#!/bin/bash

. $HOME/.mymfa_keys

genotp() {
  oathtool --totp --digits=6 --time-step-size=30s --base32 ${secrets[$1]}
}

if [ $# -gt 0 ]; then
  key="$1"
else
  key="$defaultKey"
fi

otp="$(genotp $key)"

echo $key
echo $otp

if which xclip > /dev/null 2>&1 && [ $"$DISPLAY" != x ] ;then
    echo $otp | xclip
    echo $otp | xclip -sel c
fi

MFAコードの生成部分はoathtoolというツールを使っています。
生成したMFAコードをクリップボードにコピーするのにxclipを使っています。
それぞれパッケージのインストールが必要です。

$ sudo dnf install oathtool xclip

xclipがない場合や、Window Systemが立ち上がってない場合は、クリップボードへのコピーは行いません。

仮想MFAシェルスクリプトの設定ファイル

シークレットキーなどのデータは $HOME/.mymfa_keys としてシェルスクリプトから読み込まれます。
以下のような形式で記述します。

declare -A secrets=(
  ["hogehoge"]="ABCDEFG"
  ["awsroot"]="ZYXWVUTS"
)
defaultKey=hogehoge
  • secretsはシークレットキーをkey-value形式で記述します。keyはアカウント名などの任意の文字列、valueはAWSの画面でコピーしたシークレットキーです。
    • 普段使うアカウント以外にも、AWSのrootユーザーのキーや、他のサービスのキーも追加できます
  • defaultKeyはシェルスクリプトに引数を渡さなかったときに使われるデフォルトのユーザー名です。

使う

$ mymfa

とするだけで、デフォルトのアカウントのMFAコードがクリップボード(およびセレクション)にコピーされます。
各デスクトップ環境のランチャーから起動するのも便利でしょう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0