AWS Lambda Python でMFA認証コードを作成してみる
はじめに
今回はAWS Lambda PythonでMFA認証コードを作成してみたいと思います。
あまり必要になることもないかと思いますが、試したら出来たので共有します!
準備
ライブラリ
今回は以下のライブラリを使わせてもらいます。
GitHub - pyauth/pyotp: Python One-Time Password Library
こちらのライブラリをpipでインストールする必要があるのですが、今回はLambdaで実装していくのでレイヤー化します。
ライブラリダウンロード
適当にdockerやらEC2やら立ててレイヤー化の作業を行います。
今回はAmazon Linux2のEC2を使いました。
インストール手順は以下となります。
sudo easy_install pip mkdir python pip install -t ./python pyotp zip -r pyotp.zip python aws -s mv pyotp.zip s3://バケット名/pyotp.zip
やっていることはライブラリをダウンロードしてS3バケットに配置しているだけです。
レイヤー化
マネジメントコンソールから[Lambda]→[レイヤー]→[レイヤーの作成]
名前は任意ですが、ここではpyotpとしておきます。
S3のリンクは先ほどライブラリを配置したパスを指定します。
実装
AWS Lambda で準備したレイヤーを利用してMFA認証コードを作成します。
Lambda関数に先ほど作成したレイヤーを追加しておきます。
Python のコード例は以下になります。
実行したら以下のような情報が出ます。
012345 #MFA認証コード 14 #コードが切り替わるまでの時間、30になったら切り替わる
おわりに
軽く解説します。
TOTPメソッド内の数字ですが、これはMFAのシークレットキーになります。
普通はQRコードでMFA登録を行うことが多いと思いますが、実はQRコードと同時にシークレットキーも払い出されています。
これでサーバレスにMFA認証が可能となります。
主な利用ケースとしてはMFA認証を利用したCLIの操作でしょうか。
他にもスマホを持っていないガラケーユーザーがAmazon connectと連携したLambdaを電話コールで叩いてMFAコードを取得、MFA認証でログインするとか変則的な使い方もできそうです(`・ω・´)