[AWS]WorkSpacesのデバイス認証を使ってセキュリティを向上させる

コンニチハ、千葉です。

2017年6月に機能追加されたデバイス認証をやってみました。今まではWorkSpacesを利用する際、セキュリティ向上としてMFAを利用することができましたが、デバイス認証が追加されたことで特定の端末からのみアクセスを許可できるようになりました。

デバイス認証で追加された機能

デバイス認証機能が追加されたことで、クライアント証明書をインストールしてある端末からのアクセスのみ許可、もう一つの機能としてデバイスの種類(windows、mac、iPad等)での許可ということができるようになりました。具体的には以下のような設定ができるようになりました。

デバイスタイプでのアクセス許可

以下の図のようにデバイスを指定してアクセスを許可できるようになりました。PCからのみアクセスを許可する場合は、全てチェックを外すことで不要なアクセスを拒否することができます。

20170619-workspaces-devaice-auth-2

クライアント証明書によるアクセス許可

クライアント証明書をインストールした端末からのみをアクセス許可することができます。これを有効にすると一気にセキュリティが向上しますね。端末にクライアント証明書をアクセスする端末に配布する必要が出てきますが、不特定多数からのアクセスを拒否することができるようになります。

やってみた

デバイスタイプでのアクセス許可設定、クライアント証明書でのアクセス許可をやってみました。

デバイスタイプでのアクセス許可

まずはデバイスタイプでのアクセス許可設定を行います。設定は、Directory Serviceで行います。

対象のDirectoryを選択し、「Update Details」を選択します。

20170619-workspaces-devaice-auth-1

Access Control Options > Other Platformsから許可するデバイスタイプを選択します。

20170619-workspaces-devaice-auth-2

試しに許可していないデバイスタイプからアクセスしてみました。

20170619-workspaces-devaice-auth-3

アクセス拒否されました!

クライアント証明書によるアクセス許可

次に、クライアント証明書によるアクセス許可をやってみます。まずはクライアント証明書を作成する必要があるので作成します。

クライアント証明書の作成

証明書はAmazon Linuxで作成しました。クライアント証明書の作成方法ですが

  • オレオレ認証局の作成
  • クライアント証明書用のCSRを作成
  • オレオレ認証局に署名してもらう
  • インストール用のクライアント証明書(p12形式)を作成
  • 端末にクライアント証明書を作成する

となります。

生成されるファイルの整理

  • 認証局の秘密鍵:cakey.pem
  • 認証局の公開鍵(ルート証明書):cacert.pem
  • クライアント証明書の秘密鍵:client.key
  • CA署名済みのクライアント証明書:client.crt
  • クライアント証明書配布用:workspaces.p12
opensslのインストール確認
$ sudo yum update -y
$ rpm -qa | grep openssl
openssl-1.0.1k-15.99.amzn1.x86_64
オレオレ認証局(CA)の作成
sudo mkdir -p /etc/pki/workspaces/newcerts
cd /etc/pki/workspaces/
echo "01" | sudo tee serial
sudo touch index.txt
sudo cp /etc/pki/tls/openssl.cnf openssl_ca.cnf
sudo vi openssl_ca.cnf
# [ CA_default ]の箇所
# => dir = /etc/pki/workspaces に変更
# [ v3_ca ]の箇所
# => authorityKeyIdentifier=keyid:always,issuer をコメントアウト
# => keyUsage = digitalSignature,cRLSign,keyCertSign を追加
sudo openssl req -new -x509 -keyout cakey.pem -out cacert.pem -days 3560 -config openssl_ca.cnf # 任意のパスワードを入力
# 入力例
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Tokyo
Locality Name (eg, city) [Default City]:Akihabara
Organization Name (eg, company) [Default Company Ltd]:chiba company
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:chiba-ca.com
Email Address []:

認証局の公開鍵(cacert.pem)、秘密鍵(cakey.pem)が作成されます。

クライアント証明書用のCSRを作成
sudo mkdir Client
cd Client/
sudo openssl genrsa -out client.key 2048
sudo openssl req -new -key client.key -out client.csr -sha256
# 入力例
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Tokyo
Locality Name (eg, city) [Default City]:Akihabara
Organization Name (eg, company) [Default Company Ltd]:chiba company
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:chiba.com
sudo cp /etc/pki/tls/openssl.cnf ./openssl_client.cnf
sudo vi openssl_client.cnf
# [ CA_default ]の箇所
# => dir = /etc/pki/workspaces に変更
# => private_key     = $dir/cakey.pem に変更
# [ usr_cert ]の箇所
# => keyUsage = critical,nonRepudiation, digitalSignature, keyEncipherment,dataEncipherment を追加
# => nsComment = "OpenSSL Generated Certificate" をコメントアウト
# => extendedKeyUsage = clientAuth を追加
オレオレ認証局に署名してもらう
sudo openssl ca -config openssl_client.cnf -out client.crt -in client.csr

署名済みのクライアント証明書(client.crt)が作成されます。

インストール用のクライアント証明書(p12形式)を作成
sudo openssl pkcs12 -export -in client.crt -inkey client.key -name chiba.com -certfile ../cacert.pem -out workspaces.p12

配布用のクライアント証明書(workspaces.p12)が作成されます。

端末にクライアント証明書を作成する

Macの場合のクライアント証明書インストール方法です。

「workspaces.p12」をMacにダウンロードしダブルクリック、キーチェーンにインストールします。

20170619-workspaces-devaice-auth-13

オレオレ証明書なので、デフォルトで信頼されないため有効化します。 ルート証明書(chiba-ca.com)を右クリック > 情報を見る > 常に信頼を選択します

20170619-workspaces-devaice-auth-12

ルート証明書をDirectory Serviceにインポートする

対象のDirectoryを選択し、Actions > Update Detailsを選択します。

クライアント証明書アクセスを有効可し、ルート証明書(cacert.pme)をインポートします。

20170619-workspaces-devaice-auth-10

アクセスしてみる

アクセスできました!

20170619-workspaces-devaice-auth-9

まとめ

WorkSpacesのデバイス認証についてやってみました。特に、クライアント証明書を利用したデバイス認証により、不特定多数からのアクセスを防ぐことができます。導入しない手はないと思います!!

参考

http://docs.aws.amazon.com/ja_jp/workspaces/latest/adminguide/trusted-devices.html