yubikey 5CでAWSコンソールにU2Fでログインしてみる


yubicoの[yubikey 5C](https://www.yubico.com/product/yubikey-5c)を購入して、AWSコンソールのMFAをGoogle Authenticatorからyubikey 5Cを使ったU2Fに変更してみまたので、その方法についてまとめました。

## TL; DR
- Google Authenticatorの代わりにyubikeyを使うと便利
- とりあえずAWSコンソールのMFAをU2Fにしてみた
- yubikey 5Cを使ったときのハマりどころ

## キーワード
### yubikey
- アメリカ・スウェーデンを拠点とするYubico社が開発した認証デバイス
- ハードウェアトークンにあるボタンを押すだけで、パスワードを生成して自動入力
- ひとつのYubiKeyでワンタイムパスワードの生成、FIDO U2Fの二段階認証などが可能

### FIDO2
- Webブラウザ上で、FIDO(First IDentity Online)認証を行う仕様
- 外部の認証器を介して、WebサイトのUAF(生体認証)やU2F(PINコード)などで認証が可能
- Chrome・Edge・Firefoxなどの主要ブラウザで対応されている

### UAF
- UAF(Universal Authentication Framework)
- FIDO対応した端末を用いた生体認証
- 安全性は高いが対応できるのがFIDO対応端末のみ

### U2F
- U2F(Universal 2nd Factor)
- ユーザIDとパスワード入力後、セキュリティキーなどのシンプルな動作で2FAを行う仕様
- FIDO未対応端末でもFIDOの仕組みを利用することが可能

**yubikey 5CはFIDOに対応したU2F認証を提供するセキュリティキー**

## yubikey 5C
- 到着したyubikey 5C  
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320327/8cf165df-dd92-d530-3384-473feb5699c9.jpeg" width=40%>

- 裏面  
[yubico.com/start](https://yubico.com/start) にアクセスすると各サービスとの連携情報が入手できる
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320327/a6a6ab76-5908-38da-9087-fb8ee5abf6f0.jpeg" width=40%>

- 大きさ
iPhoneSEと比較するとこれぐらい（直径約2cmぐらいかな）
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320327/0a1831a8-64a6-43f8-3153-ba91328d2bc9.png" width=40%>

- とりあえず何も考えずに挿入
USB-Cにぴったりはまる（当たり前か。。。）
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320327/efc31f44-b26e-b0c2-2a3d-3def3338dae4.jpeg" width=50%>

## AWSコンソールのMFA Deviceを削除
まずは現在登録されているVirtual MFA Deviceを削除  

- AWSコンソールでパスワード認証
楽しそうだなぁ[re:Invent](https://reinvent.awsevents.com/)  
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320327/e0291980-613c-0466-e78d-bd2fe1f8aa14.jpeg" width=50%>

- MFAコード入力
MFAコードが要求されるので
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320327/e00ca227-0963-4585-0abf-4a51bee1ab38.png" width=40%>  

これを見ながら入力（6桁入力はめんどくさい）
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320327/cdb8c28e-f1b5-b0b6-e54b-53d18b876cf3.jpeg" width=25%>

- `My Security Credentials` を選択  
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320327/fe84be8f-d954-b147-e318-bf7b4b0aad79.jpeg" width=30%>

- 登録されているMFAデバイスを選択
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320327/97f01d7b-c269-e1a3-92d8-3689011365fb.jpeg" width=50%>

- `Remove` を選択して `Resync`
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320327/9eab04e2-e8e0-22d8-3ce5-c8b0ab54741e.jpeg" width=40%>

- `MFA code`を入力
しかも２回。。。しかしこれで6桁のPINコード入力とおさらば！
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320327/fc152c41-6a5a-aeb2-353f-fad4b1e4f540.jpeg" width=40%>

## U2F登録
そのままの流れで登録開始

- `Assign MFA Device`を選択  
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320327/fd80cb8f-bc38-50e5-9407-7b2e4e21a1a1.png" width=50%>

- `U2F security key`を選択
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320327/f6cb0ab2-44cc-b4ab-8caf-d280b62c844c.png" width=40%>

- 鍵入力要求画面
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320327/a37441bf-8cc9-fbbf-f2d8-7bb2087b762b.png" width=40%>

- USB-Cポートにyubikey 5Cを挿入
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320327/597e1561-ca01-c4ca-0475-fe0d908dccdb.jpeg" width=50%>

。。。エラー発生

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320327/1c48bf7f-bdfb-6557-313c-076b0644f552.png" width=40%>

ここで約１時間ぐらい調べてしまった。。。

### ※解決方法
この金具がただあるだけと思ってしまい、見事にハマってしまった。。。

```
- 鍵を挿入したときに緑のライトが光る
- その時にyubikey 5cの両脇の金色の金具に振れる
```

- 再度U2F登録開始  
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320327/642bd1a0-8169-c4d4-bf30-cc8dc5ef490b.png" width=40%>

- 鍵のここを触る
緑のライトが光っていることを確認して、金色の金具に振れる  
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320327/6a42ecfb-8fe4-b68c-519b-b0693cdf84cc.jpeg" width=50%>

- ブラウザから反応
Security Keyへのアクセス要求が来たので`Allow`
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320327/6a92a36e-c930-2ea4-ad5e-a29897d87f8a.png" width=40%>

- 登録完了成功 
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320327/83b17005-9e0a-1ccf-d424-fd00da026402.png" width=50%>

## 実際に試してみる
- AWSコンソールでパスワード認証  
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320327/e0291980-613c-0466-e78d-bd2fe1f8aa14.jpeg" width=50%>

- 鍵入力要求画面
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320327/5bdf263e-e427-049e-0c36-79f43bb3a3d2.png" width=40%>

緑のライトが光っていることを確認して、金色の金具に振れる  
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320327/6a42ecfb-8fe4-b68c-519b-b0693cdf84cc.jpeg" width=40%>

- ログイン完了  
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320327/412fae52-4e5d-8d26-13f7-617d5db7a3fe.png" width=50%>

## 注意点
- AWSの場合、2FAが設定できる権限をユーザが持っている必要があります。

## 最後に
その他Googleなどには設定してみましたが便利ですね。[okta](https://www.okta.com/) にも対応しているようなので、WebサービスはoktaでSSOするようにして、oktaでU2Fを設定すれば簡単な手順でセキュリティが向上すると思われます。
ちょっと細かい手順で書いているのは、もし社内に展開する時にそのままこの記事を使えるようにと密かに企んでおります。

## 参考
- [安全・快適なパスワードレス認証、FIDO「UAF」「U2F」の違いを探る](https://www.secioss.co.jp/%E5%AE%89%E5%85%A8%E3%83%BB%E5%BF%AB%E9%81%A9%E3%81%AA%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E3%83%AC%E3%82%B9%E8%AA%8D%E8%A8%BC%E3%80%81fido%E3%80%8Cuaf%E3%80%8D%E3%80%8Cu2f%E3%80%8D%E3%81%AE/)
- [FIDO U2F認証とは](https://www.cloudgate.jp/lineup/uno/fido_u2f.html)
- [主要Webブラウザに対応した「FIDO2」登場で、パスワードレス認証は広がるか？](http://epayments.jp/archives/9200)