6
4

More than 5 years have passed since last update.

AWS WorkspacesでGoogle Authenticationを使う

Posted at

概要

AWS WorkspaceでMFAを実現する方法です。
本稿では、パスワード、クライアント証明書、Google Authentication (OTP) の3要素で認証後 Workspacesにログインできるように設定してみます。
以下に記載の情報は2018/2/11時点です。

構築手順

参考資料

以下の資料には必要な情報がほぼすべて書いてありますので、これを読めばそれほど苦労せずに構築できます。
- GoogleAuthenticatorを利用してAmazon WorkSpacesへ多要素認証ログインする
- Google Authenticator を使って Amazon WorkSpaces に多要素認証ログイン
基本的に、前者の資料のほうが新しいですので、そちらをベースに構築をすすめ、必要に応じて後者の資料を参照するのがよいかと思います。
これらの資料には書いていないのですが、構築中に以下のライブラリをコピーする必要があります。

$ sudo cp /usr/local/lib/security/pam_google_authenticator.so /usr/lib64/security

ネットワークを構築

  • VPCを作成
  • VPC内にサブネットを3つ作成 1つはWorkspacesのWindows10、残りの2つはActiveDirectoryとRADIUSで使います。Workspacesはサブネットを分ける必要はありませんので、最低2つのサブネットでも大丈夫です。

RADIUSサーバーを構築

  • EC2でAmazon Linux 2でインスタンスを作成します。小規模な運用ならt2.microで十分いけます。
  • 必要なパッケージをインストールします。
$ sudo yum install freeradius freeradius-utils git gcc pam-devel qrencode qrencode-libs qrencode-devel autoconf automake libtool
  • Google Authenticatorのファイルを構築
$ cd
$ git clone https://github.com/google/google-authenticator-libpam.git
$ cd /home/ec2-user/google-authenticator-libpam/
$ ./bootstrap.sh
$ ./configure
$ make
$ sudo make install
  • RADIUSのグループを作成
$ sudo groupadd radius-enabled
  • /etc/raddb/radiusd.conf を変更
修正前
user = radiusd
group = radiusd
修正後
user = root
group = root
  • /etc/raddb/usersを変更
追加
DEFAULT    Group != "radius-enabled", Auth-Type := Reject
           Reply-Message = "Your account has been disabled."
DEFAULT    Auth-Type := PAM
  • /etc/raddb/sites-available/defaultを変更
修正前
# pam
修正後
pam
  • /etc/pam.d/radiusdを変更
修正前
#%PAM-1.0
auth       include     password-auth
account    required    pam_nologin.so
account    include     password-auth
password   include     password-auth
session    include     password-auth
修正後
#%PAM-1.0
#auth       include     password-auth
#account    required    pam_nologin.so
#account    include     password-auth
#password   include     password-auth
#session    include     password-auth
auth requisite pam_google_authenticator.so
account required pam_permit.so
session required pam_permit.so
  • /etc/raddb/clients.confを変更
追加
client from-vpc {
    ipaddr     = 172.16.0.0
    netmask    = 16
    secret     = testing123
    shortname  = from-vpc
}
  • モジュール関係
$ sudo ln -s /etc/raddb/mods-available/pam /etc/raddb/mods-enabled/pam
$ sudo cp /usr/local/lib/security/pam_google_authenticator.so /usr/lib64/security
  • サービスを起動
$ sudo systemctl enable radiusd
$ sudo systemctl start radiusd
$ sudo systemctl status radiusd

status表示でおかしなところがないか確認してください。
以下のような表示になっていれば問題ないです。

Active: active (running) since Mon 2018-02-12 04:53:34 UTC; 3min 59s ago
  • ユーザーを登録
$ sudo useradd -g radius-enabled mhishi
$ sudo -u mhishi /usr/local/bin/google-authenticator

いろいろと質問されるので、基本的に y で答えていけばよいですが、1.5分のwindowを4分にのばしますか、という質問にはnとするのがよいかと思います。サーバーもスマホも時刻は十分に正確ですので。
登録が終わったらスマホにGoogle Authenticatorをセットアップしてください。

  • テストしてみます
$ radtest mhishi 000000 172.16.2.206 10 testing123
Sent Access-Request Id 66 from 0.0.0.0:53281 to 172.16.2.206:1812 length 76
        User-Name = "mhishi"
        User-Password = "000000"
        NAS-IP-Address = 172.16.2.206
        NAS-Port = 10
        Message-Authenticator = 0x00
        Cleartext-Password = "000000"
Received Access-Accept Id 66 from 172.16.2.206:1812 to 0.0.0.0:0 length 20

コマンド中の000000のところはスマホに表示されているOTPを入力してください。上記のように、正常に認証されるとAccess-Acceptと出力されますが、認証できない場合はAccess-Rejectになります。

Directoryを構築

  • Active Directoryを構築

AWS Consoleから、Workspacesへ移動し、Directory からMicrosoft ADを作成します。なお、Simple ADはMFAに対応していません。
ADの作成画面では、DNSはpublicに利用可能なものである必要はありません。適当にしてください。また、管理者は表示されている通りAdminですので注意が必要です。
VPCとサブネットは、先ほど作成したものを指定してください。

  • AD Connectorを構築

同様にConsoleからAD Connectorを作成し、先ほど作成したMicrosoft ADに接続するよう指定してください。
Connectorが作成でしたら、そのConnectorをActionから登録してください。Console上では、Microsoft ADとAD Connectorが表示されていますが、この段階でAD Connectorのほうが登録済み、Microsoft ADは登録されていない状態になっている必要があります。

  • AD管理環境を構築

運用を楽にするため、ADを管理するための環境を構築します。
EC2でWindows Serverをセットアップしてください。t2.microで問題ありません。Windowsが起動したら、AD ManagementのFeatureを追加してください。さらに、このWindowsを先ほど構築したMicrosoft ADに参加させます。

  • ユーザーを登録

さきほどのWindows ServerからADに接続し、RADIUSと同じユーザーを作成してください。

  • Workspacesを作成

AWS ConsoleからWorkspacesを作成してください。特別難しい設定はありません。
作成後、Active Directoryのユーザーでログインすることができることを確認してください。(MFAはまだ使えませんが)

  • RADIUSと接続しGoogle Authenticatorを有効化

AWS ConsoleからRADIUSサーバーに紐づいているセキュリティグループを編集し、AD ConnectorのIPアドレスからUDP 1812ポートへのアクセスを許可します。
AWS ConsoleからWorkspacesへ移動し、ディレクトリ画面に行きます。ここでAD Connectorをチェックし詳細の更新を選択します。
詳細画面にMFA認証セクションがあるので、そこに必要事項を入力します。プロトコルはPAPで、タイムアウトは10秒、試行回数は3回ぐらいを指定しておきます。
再度Workspacesのログイン画面に行くと、OTPを入力するフィールドが増えているはずです。

  • クライアント証明書でのログインを有効化

まず、opensslなどでオレオレ証明書を作成します(すでにPKIの仕組みをお持ちのかたは、そちらをお使いください)。証明書ができたら、Root CAの証明書をパソコンの信頼済みルート証明に追加し、またクライアント証明書も追加しておきます。
さらに、AWS ConsoleのWorkspacesからディレクトリに移動し、AD Connectorの詳細の更新画面に行きます。「アクセス制御」セクションで、信頼されたWindows、MacOSからのアクセスを許可をそれぞれチェックし、ROOT CAの証明書をインポートします。その他プラットフォームからのアクセスは拒否しておきます。
この設定が完了すると、クライアント証明書がインストールされたWindows/MACからしかアクセスできないようになります。

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4