AmazonWorkSpacesにMFA(Oktaのワンタイムコード)を追加する

追加します。公式の手順は以下の通り。
https://help.okta.com/en/prod/Content/Topics/Security/AmaznWS_App.htm

OktaなどIdpにログインして、そこからいろいろなサービスにシングルサインオンできれば便利ですし、Oktaでログイン時にプッシュ通知+認証時に別デバイスでの承認が必要な設定にしておけばパスワードの総当たり攻撃や、フィッシングサイトにパスワードを提供してしまった際にも第三者のログインを防ぐことができます。

今回Amazonが提供するVDIに対してシングルサインオンしたいと思ったのですが、残念ながらWorkSpacesはSAMLなどに対応していないようです（2020/09時点）。その変わりRADIUS認証経由の多要素認証をサポートしていて、Oktaでも利用可能です。

## 今回の目的
Workspacesのログイン時にOktaのワンタイムコードも入力することでログイン可能とする

## やること
AWS上に「AWS Managed Microsoft AD」の構築
AWS上に「Windows Server 2016」の構築
Oktaに「Amazon WorkSpaces」の設定と追加（今回はトライアル版を利用します）
Oktaにユーザの追加
Workspacesの割当＋ワンタイムコードを用いたログイン

### AWS上に「AWS Managed Microsoft AD」の構築
今回はStandardで構築します。AWSの画面上から必須項目のみ入力します。

### AWS上に「Windows Server 2016」の構築
EC2のAMIに2016baseを選択します。
(OktaのRADIUSエージェントのサポートOSで最新版のためこれを選択します）

本サーバはRADIUS認証のみに利用して、インターネット経由でOktaとUDPで通信する必要があります。通信を受け付ける必要はないのでNATゲートウェイのサブネットに配置します。構築用のWorkspacesを作り、プライベートIP間でリモートデスクトップで操作します。
![Screen Shot 2020-09-13 at 19.28.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110457/80e681a5-8619-ae24-420f-76c9adbbbbf5.png)

### Oktaに「Amazon WorkSpaces」の設定と追加
Oktaの管理画面からエージェントをダウンロードします
![Okta-agent.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110457/f779b51f-279d-4104-e2f9-6f0a9bbb42c6.png)

ポート番号を「1899」に変更する
![okta-port.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110457/ad16331c-94ab-5a7a-d230-ef2905f51f48.png)

ログインのURLを入力
![okta-url.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110457/a714f4b5-d238-9d41-663e-6372dde02771.png)

認証
![allow.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110457/0f77d2bb-3e7e-f114-b743-bbaccc337a6f.png)

ディレクトリからWindowsサーバにUDP1899を開放する
![Screen Shot 2020-09-13 at 20.12.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110457/ac9fc131-75b0-ef26-3b21-58558a88bea0.png)

Windowsサーバのファイアウォールで「UDP1899」を通す
![Screen Shot 2020-09-13 at 20.14.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110457/93c62ac8-daf2-9720-63d1-5119f5434fd4.png)

OktaにWorkspacesの設定を追加
![okta-addapp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110457/6ce49690-cebb-b813-304b-e2529e1261ed.png)

認証情報の登録
（ログインするユーザとの付き合わせはメールアドレスのプレフィックスにします）
![okta-config.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110457/fe0a746c-187f-f310-5508-61caef23be6b.png)

Windowsサーバでサービスが動いているか確認する
![Screen Shot 2020-09-13 at 20.21.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110457/e07a6274-676c-fe21-8c84-d869e06eb309.png)

ディレクトリの多要素認証をONにします
![Screen Shot 2020-09-13 at 20.27.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110457/c02e33f1-44d9-f8ba-8d9b-230eaa4ccda4.png)
失敗しました。WindowsサーバのSG(IN)にUDP1899を追加してなかったため追加して再度実施
![Screen Shot 2020-09-13 at 20.29.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110457/e7ce28e8-d59b-de2e-965e-dd2eac071c7a.png)
### Oktaにユーザの追加
メールアドレス「kai.kusakari@gmail.com」を追加して、Workspacesにアサインします。設定時に「Application username format」に「Email prefix」を指定したため、Oktaの「App Username」は@より前の数値をとっています。ユーザ登録時にアクティベートのメールを送付するため、Okta Verifyの設定をしておきます。
![adduser.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110457/360c016b-5338-2c17-b836-4f47b4dc2df1.png)


### Workspacesの割当＋ワンタイムコードを用いたログイン
ユーザ名「kai.kusakari」として割当する
![Screen Shot 2020-09-13 at 20.48.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110457/b50bc1f3-a3b3-49cb-bd96-32cad82553f4.png)
ワンタイムコードを使ってログインできます
![Screen Shot 2020-09-13 at 20.51.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110457/a80a09e5-eac9-013d-219d-40476043d01c.png)

実現できました。シングルサインオンは実現できないため、カスタムURIを用いてユーザ名だけ補完してあげるなど検討していければと思います。
https://docs.aws.amazon.com/workspaces/latest/adminguide/customize-workspaces-user-login.html