AD Connectorを使ってAmazon WorkSpaces環境を構築してみた
しばたです。
前回の記事でAD Connector使ったドメイン環境を構築しました。
せっかく環境を作ったので一番よく利用されるであろうユースケースであるAmazon WorkSpaces(以後WorkSpaces)環境を構築してみました。
参考資料
実はDevelopers.IOにはEC2インスタンスをオンプレドメインに見立てたAD Connecotr+Workspaces設定の記事、WorksSpacesの初期設定に関する過去記事が存在します。
これらの記事の内容と重複する部分は結構あるのですが、実際のオンプレドメインに対してWorkSpaces環境を構築する記事はまだ無かったので本記事の価値も多少はあるかと思います。
今回作る環境
今回作る環境を下図に示します。
以前構築したVPN環境をベースに、インターネットへアクセス用にインターネットゲートウェイ、パブリックサブネット、NATゲートウェイを追加し、インターネットへのアクセスをNATゲートウェイ経由になる様に既存のルートテーブルを変更しておきます。
ざっくり以下のCloudFormation Templateでリソースを追加し、ルートテーブルの切り替えは手動で行いました。
CloudFormation Template
AWSTemplateFormatVersion: 2010-09-09
Parameters:
SystemName:
Description: "System name of each resource names."
Type: String
Default: "devio"
EnvironmentName:
Description: "Environment name of each resource names."
Type: String
Default: "test"
AZ1:
Description: "AZ1"
Type: AWS::EC2::AvailabilityZone::Name
Default: "ap-northeast-1a"
AZ2:
Description: "AZ2"
Type: AWS::EC2::AvailabilityZone::Name
Default: "ap-northeast-1c"
VPNGatewayID:
Description: "Set your VPN gateway resource id."
Type: String
Default: "vgw-xxxxxxxxxxxxxxxxx"
Resources:
# IGW
IGW1:
Type: AWS::EC2::InternetGateway
Properties:
Tags:
- Key: Name
Value:
Fn::Sub: "${SystemName}-${EnvironmentName}-igw"
AttachGateway1:
Type: AWS::EC2::VPCGatewayAttachment
Properties:
VpcId:
Fn::ImportValue:
Fn::Sub: "${SystemName}-${EnvironmentName}-vpc"
InternetGatewayId:
Ref: IGW1
# Public Subnet
PublicSubnet1:
Type: AWS::EC2::Subnet
Properties:
AvailabilityZone:
Ref: AZ1
VpcId:
Fn::ImportValue:
Fn::Sub: "${SystemName}-${EnvironmentName}-vpc"
CidrBlock: 172.18.11.0/24
MapPublicIpOnLaunch: False
Tags:
- Key: Name
Value:
Fn::Sub: "${SystemName}-${EnvironmentName}-public-subnet-1"
PublicSubnet2:
Type: AWS::EC2::Subnet
Properties:
AvailabilityZone:
Ref: AZ2
VpcId:
Fn::ImportValue:
Fn::Sub: "${SystemName}-${EnvironmentName}-vpc"
CidrBlock: 172.18.12.0/24
MapPublicIpOnLaunch: False
Tags:
- Key: Name
Value:
Fn::Sub: "${SystemName}-${EnvironmentName}-public-subnet-2"
# Route Tables
PublicRouteTable1:
Type: AWS::EC2::RouteTable
Properties:
VpcId:
Fn::ImportValue:
Fn::Sub: "${SystemName}-${EnvironmentName}-vpc"
Tags:
- Key: Name
Value:
Fn::Sub: "${SystemName}-${EnvironmentName}-public-rtb"
PublicRoute1:
Type: AWS::EC2::Route
DependsOn: AttachGateway1
Properties:
RouteTableId:
Ref: PublicRouteTable1
DestinationCidrBlock: 0.0.0.0/0
GatewayId:
Ref: IGW1
PublicRTAssociation1:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
RouteTableId:
Ref: PublicRouteTable1
SubnetId:
Ref: PublicSubnet1
PublicRTAssociation2:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
RouteTableId:
Ref: PublicRouteTable1
SubnetId:
Ref: PublicSubnet2
# EIP
EIP1:
Type: AWS::EC2::EIP
Properties:
Domain: vpc
EIP2:
Type: AWS::EC2::EIP
Properties:
Domain: vpc
# NAT Gateway
NGW1:
Type: AWS::EC2::NatGateway
Properties:
AllocationId:
Fn::GetAtt:
- EIP1
- AllocationId
SubnetId:
Ref: PublicSubnet1
Tags:
- Key: Name
Value:
Fn::Sub: "${SystemName}-${EnvironmentName}-ngw1"
NGW2:
Type: AWS::EC2::NatGateway
Properties:
AllocationId:
Fn::GetAtt:
- EIP2
- AllocationId
SubnetId:
Ref: PublicSubnet2
Tags:
- Key: Name
Value:
Fn::Sub: "${SystemName}-${EnvironmentName}-ngw2"
# NGWに向くRoute (一時利用)
# 172.18.1.0/24 のネットワーク用
TempRouteTable1:
Type: AWS::EC2::RouteTable
Properties:
VpcId:
Fn::ImportValue:
Fn::Sub: "${SystemName}-${EnvironmentName}-vpc"
Tags:
- Key: Name
Value:
Fn::Sub: "${SystemName}-${EnvironmentName}-temp-rt1"
TempRoute11:
Type: AWS::EC2::Route
Properties:
RouteTableId:
Ref: TempRouteTable1
DestinationCidrBlock: 0.0.0.0/0
NatGatewayId:
Ref: NGW1
TempRoute12:
Type: AWS::EC2::Route
Properties:
RouteTableId:
Ref: TempRouteTable1
DestinationCidrBlock: 192.168.0.0/16
GatewayId:
Ref: VPNGatewayID
# 172.18.2.0/24 のネットワーク用
TempRouteTable2:
Type: AWS::EC2::RouteTable
Properties:
VpcId:
Fn::ImportValue:
Fn::Sub: "${SystemName}-${EnvironmentName}-vpc"
Tags:
- Key: Name
Value:
Fn::Sub: "${SystemName}-${EnvironmentName}-temp-rt2"
TempRoute21:
Type: AWS::EC2::Route
Properties:
RouteTableId:
Ref: TempRouteTable2
DestinationCidrBlock: 0.0.0.0/0
NatGatewayId:
Ref: NGW2
TempRoute22:
Type: AWS::EC2::Route
Properties:
RouteTableId:
Ref: TempRouteTable2
DestinationCidrBlock: 192.168.0.0/16
GatewayId:
Ref: VPNGatewayID
WorkSpaces構築の前提条件
WorkSpacesを利用するためのネットワーク要件は以下に記載されています。
AD Connectorと連携する場合は、ドメインコントローラーに対して
- TCP/UDP 53 - DNS
- TCP/UDP 88 - Kerberos authentication
- UDP 123 - NTP
- TCP 135 - RPC
- UDP 137-138 - Netlogon
- TCP 139 - Netlogon
- TCP/UDP 389 - LDAP
- TCP/UDP 445 - SMB
- TCP 1024-65535 - Dynamic ports for RPC
のポートを開ける様にしておいてください。
WorkSpacesの構築
ここから本題に入ります。
WorkSpaceはCloudFormationからも作成できるのですが、今回はマネジメントコンソールから作成します。
ドメインの登録
マネジメントコンソールからDirectory Serviceを選択し、AD Connectorにより連携されたディレクトリを選択します。
ディレクトリの詳細画面の「AWS アプリおよびサービス」欄に各種AWSサービスとの連携状況が表示されいてますので、ここから「Amazon WorkSpaces」をクリックします。
するとWorkSpacesの設定画面に遷移します。
まだWorkSpacesと連携させていないので「登録済み」の欄は「いいえ」となっています。
ここでディレクトリをチェックした状態でアクションから「登録」を選びます。
ディレクトリの登録画面がポップアップしますので、WorkSpacesを展開するサブネット(今回の場合は172.18.1.0/24
、172.18.2.0/24
のPrivateサブネット2つ)を選択し「登録」をクリックします。
「セルフサービスアクセスの許可」「Amazon WorkDocsの有効化」は必要に応じて設定してください。
今回は両方ともデフォルトのまま有効にしてあります。
するとディレクトリの「登録済み」の欄が「はい」になり登録が完了します。
これでWorkSpacesに対するドメインの登録は完了です。
WorkSpacesの構築
続けてWorkSpaces環境を構築します。
今回はテストですのでイメージやバンドルの設定は行わずAWSが提供しているバンドルをそのまま使います。
WorkSpacesの「WorkSpaces」欄を選択し、画面上部にある「WorkSpacesの起動」をクリックします。
するとWorkSpaces作成ウィザードが開始されます。
はじめにディレクトリの選択画面が表示されますので、前項で登録したディレクトリ(corp.shibata.tech
)を選択し「次のステップ」をクリックします。
次はユーザーの指定画面になります。
ユーザー検索を行うと先程登録したディレクトリからユーザーが選択できるようになっていますので必要なユーザーを選択し「次のステップ」をクリックしてください。
(この図ではユーザー山田 太郎(tarou.yamada@corp.shibata.tech)
を選択しています。)
続けてバンドルの選択画面になります。
ここでは用途に応じたバンドルを選択し「次のステップ」をクリックしてください。
(今回は日本語Standard with Windows 10を選択、ボリュームサイズはデフォルトのままとしました)
次はWorkSpacesの設定画面になります。
ここも用途に応じた設定をして「次のステップ」をクリックしてください。
(今回は実行モードはAutoStop
、ボリュームの暗号化はしない設定としました。)
最後に設定内容の確認画面になりますので、間違いがないことを確認し「WorkSpacesの起動」をクリックします。
WorkSpacesの起動まではしばらく時間がかかります。
WorkSpacesの起動が完了するとステータスが「AVAILABLE」になります。
以上で完了です。
WorkSpacesクライアントの設定と接続
ここからはWorksSpacesを利用するクライアント側の設定を行います。
ユーザーの招待
WorkSpacesの管理者は利用者に対してEメールでWorkSpaces利用のための招待を行えます。
該当のWorkSpacesを選択した状態でアクションから「ユーザーの招待」をクリックします。
すると以下の様なテンプレートが表示されますので内容をコピーしてユーザーにメールを送ります。
今回は私が検証するのでメールは送らず、こちらの内容を次項で実施していきます。
WorkSpacesクライアントのインストール
以下のURLからプラットフォームに応じたWorkSpacesクライアントアプリケーションをインストールします。
今回はWindowsアプリケーションをダウンロードし、インストールします。
クライアント環境はWindows 10で検証しました。
ダウンロードしたMSIインストーラーを実行します。
インストールウィザードが開始されるので「Next」をクリックします。
インストール方式を選択し「Next」をクリックします。
(今回はAll Usersインストールにしました)
インストールディレクトリを選択し「Next」をクリックします。
(今回はデフォルトのインストールディレクトリのままとしています)
「Install」をクリックするとインストールが開始されます。
インストールが完了したら「Finish」をクリックします。
以上でクライアントのインストールは完了です。
WorkSpacesクライアントの起動
最後にインストールしたクライアントを起動し実際にWorkSpacesにアクセスしてみます。
スタートメニューに「Amazon WorkSpaces」のアプリケーションが登録されていますので選択して起動します。
WorkSpacesの初期登録画面が起動します。
下図ではモザイクをかけているためわかりにくいですが、ここに招待メールにある「登録コード」を入力し「Register」をクリックします。
接続の確認が行われるので少し待ちます。
続けてユーザーのログイン画面になります。
ここでユーザー情報(山田 太郎(tarou.yamada)とパスワード
)を入力し「Sign in」をクリックします。
認証情報を記憶しておくか確認されますので必要に応じて記憶してください。
これでWorkSpacesが起動しWindows 10(Windows Server 2016 Desktop Experience)に接続できました。
上図ではホスト名やIPアドレスを確認しています。
IPアドレスが172.18.2.4
と指定したサブネットにきちんと登録され、DNS設定はオンプレ側DNSに向いています。
またホスト名にはIP-C613B7A0
が設定されており、Active Direcotryユーザーとコンピューターからもこのコンピューターがドメイン参加していることが確認できました。