Amazon WorkSpaces環境を最小構成で試すためのCloudFormation Templateを公開しました

2020.11.11

しばたです。

最近Amazon WorkSpacesに関する検証を行うことが多くなってきたため、最小構成でWorkSpaces環境を構築するCloudFormationテンプレートを作成しGitHubで公開してみました。

Amazon WorkSpaces Trial Stack

作ったものは以下のGitHubリポジトリで公開しています。

構成図

このテンプレートを使うと下図の構成を作ることができます。

最小構成とするため10.0.0.0/16のVPCに2つのPublic Subnet(10.0.1.0/24, 10.0.2.0/24)を用意し、その中に

  • Domain Controller 兼 Bastion となるWindows Server 2019 EC2
  • AD Connector
  • WorkSpaces

を展開します。
AD ConnectorとWorkSpacesについてはCloudFormationでサポートしていない部分があるため直接生成するのではなく、EC2内部に構築スクリプトを自動生成する様にしています。
自動生成された構築スクリプトを実行するためにEC2にはWorkSpacesに対する管理権限を持つIAMロールをアタッチしています。

ディレクトリ環境にSimple ADでなくEC2 Domain Controllerを採用したのはEC2 Domain ControllerであればActive Directoryのフル機能を使えるのと、EC2を停止することでADの利用を中断し再作成せずに済む点を重視した結果となります。

構成上の注意点

このテンプレートの使い方を説明する前に注意点について触れておきます。

このテンプレートでは最小構成で簡易にWorkSpacesを試すことを目的としたためいくつか本番環境では推奨されない構成を採っています。
本テンプレートは本番環境で使わないでください。

以下に詳細を記載します。

1. ネットワーク構成上の問題

このテンプレートでは構成を簡素にするため2つのPublic Subnetに全てのサービスを構成していますが、一般的にはWorkSpacesを構成する要素はPrivate Subnetに構成することが多いです。

2. Active Directory 構成上の問題

このテンプレートではドメインコントローラーを単一のEC2で稼働させていますが、通常ドメインコントローラーは複数のサブネットに2台数以上で冗長構成とすることが推奨されています。
また、ドメインコントローラーと踏み台サーバーを兼務させていますがこれも非推奨です。

3. AD Connector接続ユーザーの権限の問題

このテンプレートでは手順の簡素化のためAD Connectorに接続するユーザーadconnectorDomain Adminsグループに所属させています。
これは過剰な権限であり、以下のドキュメント・ブログに記載されている様に必要最低限の権限を与えることが推奨されています。

4. EC2インスタンスに与えられている権限の問題

このテンプレートでは踏み台サーバーとなるEC2からWorkSpacesの初期導入に関わる設定を行うため比較的強めの権限を持つIAMロールを与えています。
本番環境では必要最低限の権限を与える様にしてください。

導入手順

ここからこのテンプレートの導入手順を説明していきます。

想定リージョン

このテンプレートは東京リージョン(ap-northeast-1)とWorkSpacesの価格が安いバージニア北部(us-east-1)で動作確認をしています。
WorkSpacesはリージョン毎でサポートされるAvailability IDが決まっているため

  • 東京 : apne1-az1, apne1-az4
  • バージニア北部 : use1-az2, use1-az4, use1-az6

からいずれか2つを指定してください。 なお、アカウント毎でAvailablity Zoneの名前とIDの紐づけは異なるので適宜確認してください。

0. 事前準備

事前準備としてEC2キーペアを作成しておいてください。
このキーペアは作成するEC2で使用します。

1. CloudFormationスタックの作成

CloudFormationテンプレート WorkSpacesTrial.yaml を使いスタックを作成してください。

指定パラメーターは以下の通りです。

パラメーター名 説明 デフォルト値 備考
SystemName 各リソースに付けるシステム名 workspaces 各リソースは <システム名>-<環境名>-<リソース名>で命名されます
EnvironmentName 各リソースに付ける環境名 trial 各リソースは <システム名>-<環境名>-<リソース名>で命名されます
AZ1 Public Subnet1を配備するAvailability Zone名 -
AZ2 Public Subnet2を配備するAvailability Zone名 -
KeyPairName EC2で使用するキーペア名 - キーペアは事前に作成しておいてください
WindowsLatestAmi EC2のAMI /aws/service/ami-windows-latest/Windows_Server-2019-Japanese-Full-Base 英語OS : /aws/service/ami-windows-latest/Windows_Server-2019-English-Full-Base も利用可能
MaintenanceCIDR EC2に接続可能なCIDR 1.2.3.4/32 ここで指定したCIDRからのみRDP接続できます
DomainDNSName 作成されるActive DirectoryのDNS名 corp.contoso.com
DomainNetBIOSName 作成されるActive DirectoryのNetBIOS名 corp
DomainSafeModePassword ディレクトリサービス復元モード(DSRM)の管理者パスワード P@ssword 複雑さの要件を満たす必要があります
ADConnectorPassword AD Connector用ユーザーadconnectorのパスワード P@ssword 複雑さの要件を満たす必要があります

このスタックを作成すると、

  • VPCをはじめとしたネットワークスタックの作成
  • EC2にアタッチするIAMロールの作成
  • EC2の作成
    • EC2の初期化処理(cfn-init)の中でActive Directoryドメインを構築
    • AD Connector接続用ユーザー adconnector を追加
    • テスト用ドメインユーザー user01 - user10 を追加
    • 後続処理のためのPowerShellスクリプトを自動生成

が行われます。
EC2の作成に若干時間がかかるため完了までに10~20分程度要します。

2. AD Connectorの作成

ここからの作業は作成されたEC2インスタンスにAdministratorユーザーでログインして行います。

EC2インスタンスにログインするとデスクトップにREADMEWorkSpacesToolsフォルダへのショートカットがあり、WorkSpacesToolsフォルダに自動生成されたスクリプトが保存されています。

PowerShellコンソールを起動し、C:\WorkSpacesTools\01-cretate-adconnector.ps1を実行します。 エラー無く処理が完了すればAD Connectorが作成されます。

# 実行例
PS C:\> C:\WorkSpacesTools\01-cretate-adconnector.ps1
2020/11/04 5:45:39 : Start Creating AD Connector...
2020/11/04 5:46:48 : Waiting for Creation Complete...
2020/11/04 5:49:49 : Directory d-xxxxxxxxxx is created!

注意事項

AD Connectorの作成後、そのディレクトリIDがC:\WorkSpacesTools\adconnector.id.txtに保存されます。
このファイルは他の処理で使いますので削除しないでください。

3. WorkSpacesへの紐づけ

続けて作成したAD ConnectorをWorkSpacesと紐づけます。
PowerShellコンソールを起動し、C:\WorkSpacesTools\02-register-workspacesdirectory.ps1を実行します。
エラー無く処理が完了すればWorkSpacesへの紐づけは完了です。

# 実行例
PS C:\> C:\WorkSpacesTools\02-register-workspacesdirectory.ps1
workspaces_DefaultRole role is already exists. Skip creating workspaces_DefaultRole...
2020/11/04 5:51:03 : Register WorkSpaces...
2020/11/04 5:51:05 : Registration complete!

これですべての手順は完了です。
あとは自由にWorkSpacesを試してください。

削除手順

WorkSpacesの使用を止める場合は以下の手順を実施します。

0. 事前準備

予め全てのWorkSpaceを削除しておいてください。

1. WorkSpacesとAD Connectorの紐づけ解除

EC2にAdministratorユーザーでログインしてください。

PowerShellコンソールを起動し、C:\WorkSpacesTools\98-unregister-workspacesdirectory.ps1 を実行します。
エラー無く処理が完了すればWorkSpacesへの紐づけは解除されます。

# 実行例
PS C:\> C:\WorkSpacesTools\98-unregister-workspacesdirectory.ps1
2020/11/04 5:55:51 : Unregister WorkSpaces...
2020/11/04 5:56:05 : Unregistration Complete.
---------------------------------------------------------------------
If you want to remove workspaces_DefaultRole, please remove manually.
---------------------------------------------------------------------

WorkSpaces作成時に作成されるworkspaces_DefaultRoleに関しては不要であれば手動で消してください。本テンプレートで削除することはありません。

2. AD Connectorの削除

PowerShellコンソールを起動し、C:\WorkSpacesTools\99-delete-adconnector.ps1 を実行します。
エラー無く処理が完了すればAD Connectorは削除されます。

# 実行例
PS C:\> C:\WorkSpacesTools\99-delete-adconnector.ps1
2020/11/04 5:56:29 : Delete AD Connector...
d-xxxxxxxxxx
2020/11/04 5:56:29 : AD Connector stage is Deleting...
2020/11/04 5:56:29 : Operation complete.

スクリプトは直ちに終了しますが、AD Connectorが完全に削除されるまでにはしばらくかかります。

3. CloudFormationスタックの削除

最後に作成したCloudFormationスタックを削除します。
これで全てのリソースは削除されます。

この手順はAD Connectorが完全に削除された後に行ってください。

補足 : 利用料金に関して

WorkSpacesの利用料金は若干ややこしく、AD ConnectorおよびWorkSpacesの紐づけを気軽に再作成すると予期せぬ費用が掛かる場合があるのでご注意ください。
(特にAutoStopモードでの月額固定費はAD Connectorを作り直すとその都度請求されるはずです...)

WorkSpacesの利用料金については以下の記事が参考になるでしょう。

最後に

以上となります。

最初はCloudFormation一発でEC2だけでなくすべてのリソースを作ろうと計画したのですがAD ConnectorがCloudFormationに対応してない等の理由で諦めました。
ただ、そもそも論としてAD環境とAD Connecotor/WorkSpacesはライフサイクルの異なるサービスでありAD環境を一時停止しつつAD Connecotor/WorkSpacesを必要な時だけ再利用できる様になった今の仕組みの方が結果的には良かったと感じています。

WorkSpacesは環境面・費用面から気軽に試しにくいサービスだと感じています。
このテンプレートで少しでも気軽にWorkSpacesを試して頂ければ嬉しいです。
(でも利用料金には気をつけてください...)