Got Some \W+ech?

Could be Japanese. Could be English. Android, セキュリティ, 機械学習などをメインに、たまにポエムったり雑感記載したりします。

AzureADでYubiKeyを管理しつつ認証(TOTP)する #azureAD #yubikey

FOLIOアドベントカレンダー 8日目、個人投稿2回目です。

adventar.org

8日に当社の勉強会「Scramble!」に来ていただいた皆様、ありがとうございました。

folio.connpass.com

FOLIOの情報戦略のこれから_-_情報システムを添えて.pdf - Speaker Deck

その場でお話した通り、当社はMicrosoft365を中心にした社内基盤へ生まれ変わろうとしています。 Microsoft365のIdP「AzureAD」は柔軟かつ強固なMFA方式を自由に選べます。通知ベースのMFAもデフォルトでついてくるスグレモノです。*1 特に10月からPublic PreviewになったハードウェアキーによるTOTPは、自分にとって嬉しいニュースでした。なぜなら、何らかの理由でスマホを使えないメンバーに、完全に独立したセキュリティキーをお渡しできるからです。 そこで本エントリでは、それについて触れてみようと思います。

techcommunity.microsoft.com

手順としては次の通りになります。ただし、ベンダーからバルクで購入する場合、1は不要になるようです。2までやってくれるかは原文からよみとれませんでした。

  1. YubiKeyに対するシードの設定
  2. YubiKeyとユーザーのヒモ付情報のAzureADアップロード
  3. 登録されたYubiKeyの有効化

YubiKeyに対するシードの設定

Yubikey Command Manger (CLI) を使って、シードをYubikeyに設定します。

% ykman oath add ken5scal@example.com
Enter a secret key (base32): xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
A credential called ksuzuki@folio-sec.com already exists on this YubiKey. Do you want to overwrite it? [y/N]: y

YubiKeyとユーザーの紐づけたCSVファイルをAzureADにアップロード

さきほどのシードを登録したYubikeyをAzureADに登録します。その際に、下記のようにそのYubikeyとユーザー(UPN)を紐付けることができます。

upn,serial number,secret key,timeinterval,manufacturer,model
ken5scal@example.com,111111,SECRET_KEY,30,YubiKey,HardwareKey

f:id:kengoscal:20181207211959p:plain
アップロード先

登録されたYubikeyを有効化

アップロードが成功したら、対象のYubiKeyを有効化します。 f:id:kengoscal:20181207212419p:plain

有効化する際に求められるOTPは、Yubikeyを挿した状態のYubikey Authenticatorに表示される値を入力すればOKです。

f:id:kengoscal:20181207213420p:plain

同様にYubikey Authenticatorで表示された値を用いて、ログイン(2段階目)をできます。

f:id:kengoscal:20181207214921p:plain

このようにして、Azure ADに対してYubikeyでOTPすることが可能です。

終わりに

実はいくつか制限があり、現在は1人に付き5デバイスまでしか設定できません。また、これは私だけかもしれませんが、一回登録を解除(削除)したYubiKeyはたとえシードを再設定したとしても、最有効化できないようです(失敗します)。Public Previewだからかもしれません。

とはいえ、やはり一番めんどくさいのはシードの設定とCSVのアップロード、そして有効化の一連の作業です。情シスの身として考えると、そこらへんの工程はできるだけなくして欲しいと思います。将来的には個人向けOffice365アカウントやGSuiteのように、そもそもYubikeyを指すだけで完結するようなることを期待しています。

9日目は @laysakuraさんです

*1:Oktaは月$6追加料金がかかります