こんにちは、技術4課の城です。
WorkSpacesの接続元を制限する方法の一つとして、Windows、Macのクライアントについては、デバイス認証が用意されています。
Windows端末にて作業を実施する際に必要なことについて、記載します。
やること
AWSドキュメントを参考に下記を実施します。
- ルート証明書、クライアント証明書の用意
- ルート証明書のインポート(AWSマネジメントコンソール)
- クライアント証明書のインポート(ローカル端末)
環境
OpenSSLはStoreでインストールしたUbuntu 16.04のOpenSSLを利用します。
事前確認
ubuntuを起動し、opensslがインストール済みであることを確認します。
openssl version
【結果例】
OpenSSL 1.0.2g 1 Mar 2016
※インストールされていない場合はインストールします。
sudo apt-get install openssl
作業用ディレクトリの作成
mkdir -p ~/workspaces/CA/{newcerts,client}
コンフィグの変更
sudo vi /etc/ssl/openssl.cnf デフォルトのディレクトリを変更しておきます。 [ CA_default ]セクション dir = ./demoCA ↓ dir = /home/【ユーザー名】/workspaces/CA
自己認証局の作成
シリアルとインデックスファイルの作成
cd ~/workspaces/CA echo 01 > serial touch index.txt
自己認証局(CA)の秘密鍵(cakey.pem)、証明書(cacert.pem)の作成
sudo openssl req \ -x509 \ -days 3650 \ -newkey rsa:2048 \ -keyout cakey.pem \ -out cacert.pem \ -subj "/C=JP/ST=Tokyo/O=Serverworks/CN=jo-workspaces-ca" 対話式にて入力していきます。任意の秘密鍵のパスフレーズを入力します。 Generating a 2048 bit RSA private key .........................+++ .+++ writing new private key to 'private/cakey.pem' Enter PEM pass phrase: 【任意のパスフレーズを入力】 Verifying - Enter PEM pass phrase: 【パスフレーズの再入力】 -----
クライアント証明書の作成
秘密鍵(client.key)の作成
cd client sudo openssl genrsa -out client.key 2048
署名要求(CSR)の作成
sudo openssl req \ -new \ -key client.key \ -out client.csr \ -sha256 対話式にて入力していきます。下記は例です。 You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:JP State or Province Name (full name) [Some-State]:Tokyo Locality Name (eg, city) []: Organization Name (eg, company) [Internet Widgits Pty Ltd]:Serverworks Organizational Unit Name (eg, section) []: Common Name (e.g. server FQDN or YOUR name) []:jo-workspaces Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
CSRへの署名に利用するコンフィグの作成
cp /etc/ssl/openssl.cnf . vi openssl.cnf [ usr_cert ]セクション 下記、追加 keyUsage = critical,nonRepudiation, digitalSignature, keyEncipherment,dataEncipherment extendedKeyUsage = clientAuth 下記行をコメントアウト nsComment = "OpenSSL Generated Certificate"
CSRへの署名
sudo openssl ca \ -config openssl.cnf \ -keyfile ~/workspaces/CA/cakey.pem \ -cert ~/workspaces/CA/cacert.pem \ -in client.csr \ -out client.crt 対話式にて入力していきます。 Using configuration from openssl.cnf Enter pass phrase for /home/kotajo/workspaces/CA/cakey.pem: 【秘密鍵のパスフレーズを入力】 Check that the request matches the signature Signature ok Certificate Details: Serial Number: 1 (0x1) Validity Not Before: Sep 9 13:42:36 2018 GMT Not After : Sep 9 13:42:36 2019 GMT Subject: countryName = JP stateOrProvinceName = Tokyo organizationName = Serverworks commonName = jo-workspaces X509v3 extensions: X509v3 Basic Constraints: CA:FALSE X509v3 Key Usage: critical Digital Signature, Non Repudiation, Key Encipherment, Data Encipherment X509v3 Subject Key Identifier: 4B:F0:A3:F6:B5:FE:E6:EE:03:0E:1B:C8:49:28:C3:50:A5:5F:0B:70 X509v3 Authority Key Identifier: keyid:A7:B6:0F:DF:AC:E9:25:31:10:EE:95:C6:30:62:25:C2:BC:7F:0E:34 X509v3 Extended Key Usage: TLS Web Client Authentication Certificate is to be certified until Sep 9 13:42:36 2019 GMT (365 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated
標準だと証明書の期限が1年なので、延長したい場合は -days
オプションや openssl.cnf
の設定変更で対応します。
インストール用クライアント証明書(client.p12)の作成
sudo openssl pkcs12 \ -export \ -in client.crt \ -inkey client.key \ -certfile ~/workspaces/CA/cacert.pem \ -name 'jo workspaces client cert' \ -caname jo-workspaces-ca \ -out client.p12 パスワードなしで作成する場合はそのままEnterでOKです。 Enter Export Password: Verifying - Enter Export Password:
ルート証明書のインポート(AWSマネジメントコンソール)
WorkSpacesのダッシュボードにて[Directory]をクリックします。
対象のDirectory Serviceを選択し、[アクション] > [詳細の更新]とクリックします。
[アクセス制御のオプション]を展開します。
「信頼された Winodws デバイスのみに WorkSpaces へのアクセスを許可」にチェックし、[インポート]をクリックします。
cacert.pem
の内容を貼り付け、[インポート]をクリックします。
[更新と終了]をクリックします。
アクセス確認(拒否されること)
アクセス確認をします。
クライアント証明書をインストールしていないため、アクセスできません。
クライアント証明書のインポート(ローカル端末)
作成したclient.p12をローカル端末にて実行します。
証明書のインポートウィザードが開きますので、そのまま[次へ]をクリックします。
インポートする証明書ファイルについても、そのまま[次へ]をクリックします。
秘密キーの保護についても、そのまま[次へ]をクリックします。
証明書ストアは「信頼されたルート証明機関」を選択し、次へをクリックします。
自己認証局なので、セキュリティ警告が出ます。[はい]をクリックします。
[完了]をクリックします。
アクセス確認
WorkSpacesクライアントを起動し、アクセスします。
アクセスできました!!
終わりに
今さらながらではありますが、デバイス認証の手順についてまとめてみました。
どなたかの助けになれば、幸いです。
城 航太 (記事一覧)
営業部カスタマーサクセス課・課長
AWSへの移行、AWSアカウントセキュリティ、ネットワーク広く浅くといった感じです。最近はAmazon WorkSpacesやAmazon AppStream2.0が好きです。APN Ambassador 2019,2020