35歳からの中二病エンジニア

社寺・鉄道・アニメを愛でるウェブ技術者の呟き

MacでAuthyよりも楽チンなMFA(多要素認証)

最初に断っておくと、この記事で取り扱う方法はAlfredというツールの有償ライセンスが必要となるので予めご了承いただきたい。

はじめに

Google等で利用可能なMFAの仮想デバイスとしては、MacだとAuthyが筆頭候補になるかと思う。ただ、MFAを多用していると認証の度にツールを起動してGUIを操作するのが段々と面倒になってくる。それが嫌でMFAを使わないのでは本末転倒なので、キーボード操作だけでMFAのトークン入力を完結できる方法を探ってまとめてみた。

必要なツール等のインストール方法

OATH Toolkit

こちらはワンタイムパスワード認証に関連したツール・ライブラリー群で、後述するAlfredのWorkflowから間接的に利用する。インストールはHomebrewを使うのが便利だ。

$ brew cask install oath-toolkit

Alfred

こちらが今回の土台となるツール。ウェブエンジニア界隈では名の知れたツールだけれども、一言で表すとすれば「超多機能なコマンドラインランチャー」だ。Alfred単体でも何件か記事が書けそうなボリュームなので、詳しくは本家や紹介記事を参照していただきたい。

ダウンロードは開発元からも可能だが、Homebrewを使うのが便利だ。

$ brew cask install alfred

インストール後、有償機能を全解放するためのPowerpackを購入する。今回の方法を利用するためには、有償機能であるWorkflowが必要になるためだ。

Powerpackは現行バージョンのみのライセンスで$23、永久ライセンスで$39(2019年10月現在)となっているが、余程金銭面を気にするのでない限りは後者がおすすめだ。ちなみに、Alfredの有償機能の中にはWorkflow以外にも、拡張クリップボードやスニペット、辞書連携等の便利機能が沢山あるので、買い切りなのはとても良心的だと思う(将来的にサブスクリプション化されない保証は無いけれども…)。

alfred-mfa-workflow

こちらが今回の要であるAlfred上でMFAのトークン入力を完結するためのWorkflowだ。Workflowについては、雑に一言で説明するならば「すごいプラグイン」というところか。u-minor氏により開発されており、2019年10月時点で最新のAlfred 4でも動作を確認している。

インストール方法だが、GitHubリポジトリーReleasesから、 MFA.Token.alfredworkflow をダウンロードする。Alfredがインストールされていればダウンロード後にFinder上で開けるので、あとはダイアログに従ってインストールしよう。

使い方

初期化(初回実行時のみ)

初回のみパスフレーズの登録が必要になる。これは各サービスのシークレットキーを暗号化するためのもので、毎度の認証で複合するために必要になるので覚えておかなければならない。

初期化の方法は、Alfred上で mfa init と入力して画面の指示に従ってパスフレーズを入力すれば良い。

サービスの追加

Alfred上で mfa add (サービス名) (シークレットキー) と入力することで、新規のサービスを追加できる。

シークレットキーはMFA登録時にQRコードが表示されたタイミングで取得できるものだ。ただ、既にAuthyを利用している場合は普通に取得し直すことができないので、後述の方法で抜き出す必要がある。

サービスの削除

Alfred上で mfa rm (サービス名) と入力することで、指定したサービスを削除できる。

MFAトークンの入力

これが一番使うコマンドで、普段のMFAトークン入力で毎回やることだ。

Alfred上で mfa (サービス名) と入力するとパスフレーズが求められ、パスフレーズが正しければMFAトークンがクリップボードにコピーされる。また、ブラウザーのフォームにフォーカスが当たっていれば自動入力までしてくれる。これはAWSコンソールへのログイン時などに大変重宝する。

これでMFAのトークン入力はキーボードで完結できるようになる。僕もこの仕組みを導入してからは積極的にMFAを利用するようになったので、入力のストレスさえ軽減されればより活用されるのではないかと思う。

Authyからシークレットトークンを抜き出す方法

新たにサービスを追加していくのであれば先述のように比較的容易に設定できるのだけれども、既にAuthyに登録している場合は一手間掛かる。ここまで記事を読んでいて全くMFAを使っていない人はまずいないだろうと思うので、ある意味ここからが本記事の肝とも言える。

まず、ここではChrome拡張を利用する。Firefox等でも同等のことはできそうだけれども、一度きりの作業なので宗教的理由でも無い限りはChromeの利用をお勧めしたい。Chromeを起動したら、以下の手順を実行すれば良い。

  1. Chromeを起動して、Chrome拡張版のAuthyをインストールする。
  2. 拡張機能の画面を開いて[デベロッパーモード]を有効にする。
  3. Authyを起動してパスワード認証を通した状態で置いておく。1
  4. 拡張機能の画面に戻ってAuthyを選択し、[ビューを検証]-[main.html]を開く。
  5. コンソールが開くので、Generating Authy passwords on other authenticatorsの7.にあるスクリプトを貼り付けて実行する。
  6. コンソール上にAuthyに登録されているサービスが列挙されるので、 TOTP URIsecret パラメーターがシークレットキーとなる。2

なお、CLI で Authy と共通の MFA Token を生成するにもシークレットキーを取得する方法が記載されているが、2019年10月現在はこちらの方法は利用できないので注意されたい。また、ここに記載した情報はGenerating Authy passwords on other authenticatorsを踏まえたものではあるが、翻訳がてら自分でやってみて躓いた所を加筆したり、説明不要と思われる箇所は省略している。詳しく知りたい方は元記事を参照していただきたい。

おわりに

以上の仕組みを利用すると、普段のMFAトークン入力はAlfredから mfa aws (パスフレーズ入力) の2ステップで行えるようになる。特に普段からAlfredを利用している場合はMFAの扱いが格段に楽になると思われるので、是非とも試していただきたい。

末筆ながら、alfred-mfa-workflow開発者であるu-minor氏Generating Authy passwords on other authenticatorsの手法を公開されたgboudreau氏に感謝申し上げる。

参考文献


  1. これをやっておかないとスクリプトが正しく実行されなかったり、[main.html]が表示されなかったりするので要注意。

  2. エラーが発生する場合は削除されたサービスが無いか確認してみよう。あった場合は一時的に元に戻すことでエラー回避できる。