1.はじめに
リモートワークで大活躍のAmazon WorkSpaces。便利だからこそ、セキュリティは万全にしておきたいですよね。「多要素認証(MFA)を入れるのが良いとは聞くけど、実際どうやるの?」と思っている方も多いのではないでしょうか。この記事では、そんな疑問に答えるため、Duo Securityを使ったMFA導入を実際に試し、その全手順をレポートします。
2.検証環境の構成
ミニマムな単体構成です。
- パブリックサブネットにduoプロキシをインストールしたEC2
- プライベートサブネットにMSAD,WorkSpaces

【STEP1】Duo側の設定手順
- Duoのホームページから30日間フリートライアルが申請可能です。
- https://www.cisco.com/c/ja_jp/products/security/duo/index.html
- アカウント発行に関して、案内メールが届きますので本文に沿って対応すればOKです。
Duo Admin PanelでApplicationを登録する
- Duo Admin Panelにログインする。
- [Applications] > [Protect an Application] を選択する。
- 「RADIUS」を検索して「Add」をクリックする。
- Integration key (ikey), Secret key (skey), API hostname (api_host) を控えます。(後述で作成するDuo Proxy Serverで必要。)
【STEP2】Duo Authentication Proxyサーバーの構築
- EC2インスタンスの起動(OSはWindows/Linuxどちらでも可)
- EC2のセキュリティグループ設定
- インバウンド:AWS MSADのドメインコントローラーIPアドレスから UDP:1812 を許可します。
- アウトバウンド:Duo Proxy Serverへの TCP:443を許可。 (アウトバウンドを制限していなければ不要です。)
- EC2のセキュリティグループ設定
- Duo Authentication Proxyのインストール
- インストールはドキュメントに従って導入します。
- https://duo.com/docs/awsworkspaces
- 最終的authproxy.cfg の設定
- DuoサーバにはMFAの認証(プライマリ)のみ実施させるように設定しました。
[duo_only_client] [radius_server_duo_only] skey= 【Duo Admin Panelで取得する】 api_host= 【Duo Admin Panelで取得する】 failmode=【safe】 radius_ip_1=【ADのコントローラーのIP】 radius_secret_1=【任意で作成したパス】 radius_secret_2=【1と同様】 port=【1812】
【STEP3】AWS Directory Service側の設定
- AWSコンソールでDirectory Serviceに移動、対象ディレクトリを選択し、[ネットワークとセキュリティ] タブの多要素認証 (MFA) を有効化します。
- RADIUSサーバーの情報を入力します。
RADIUSサーバーのIPアドレス:【ステップ2で構築したEC2のプライベートIP】 ポート番号:【1812】 共有シークレット:【DuoプロキシとMSADの間で使うパスワード】
- 登録が完了したことを確認します。
【STEP4】Duo側でWorkSpacesで利用するユーザの作成
- ADで用意したユーザ名と一致するようにするよう必要があります。
- 作成後は、画面右上のSend Duo pushでユーザに招待メールを送ります。
- ユーザは招待メールからDuoモバイルアプリのインストール、設定をするよう誘導されます。
準備完了!接続テストへ
- ADで多要素認証を有効化した事でWorkSpace clientでMFA欄が追加されます。
- Duoモバイルアプリから入手した数値を入力するもログイン出来ない状況が発生しました…。
- Duo Proxy Serverのログを確認しましたが、キーとなる情報が出力されていなかったため、config設定を変更しdebugログの出力を有効にしました。
[main] debug=true
- ログに詳細情報が出力されるようになり、下記エラーコードに着目しました。
- Duoモバイルアプリで数値は表示されているのに、MFAコードを拒否しますとは如何に?
[duoauthproxy.lib.log#info] (('10.80.16.236', 58411), y-ikeda, 6): Duo authentication returned 'deny': 'Incorrect passcode. Please try again.'
調査の末
1.Duo側で追加したアプリケーションのユーザアクセスの挙動制限
- Duo側で登録したアプリケーション(RADIUD)は、ユーザアクセスがデフォルトで無効化されているため有効にする必要がありました。
2.Duo側で追加したアプリケーションのポリシー権限
- Duo側で登録したアプリケーション(RADIUD)のポリシーは何も付与していない状況でした。
- 各ポリシーを確認するとパスコードチェックが入っておらず、こちらを有効化してポリシーを付与する事が必要でした。
再度ログインを試み無事、ログイン成功!
Duo管理画面でユーザ毎に接続履歴が確認出来ました。便利ですね。
試して思ったこと
- 始めは公式ドキュメントに沿って試行しましたが、configのところで上手くいかず躓きました。
- 通常のログレベルだと、あまり役に立つ情報がなかったため、調査のためにはdebugログを有効にする必要があります。
- また、今回はパスコードで認証しましたが、MFA欄に[push]と打てばモバイルアプリによるpush通知とすることも可能です。
- 個人的にはpush通知のほうが好みでした。