AD Connectorを使ってAmazon WorkSpaces環境を構築してみた

2019.06.16

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

しばたです。

前回の記事で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/24172.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ユーザーとコンピューターからもこのコンピューターがドメイン参加していることが確認できました。