AD Connectorで既存Active Directory利用するWorkspacesを設定してみた

2018.02.09

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

はじめに

AWSチームのすずきです。

既存のActive Directory(ADサーバ)の認証情報を使用するWorkspaces環境を構築するため、 AD Connectorを設置する機会がありましたので、紹介させて頂きます。

AD ConnectorをつかったオンプレミスのActive DirectoryからAWSへの接続方法

構成図

検証環境

  • 今回の検証、同一VPC上のEC2にADサーバと、AD Connectorを設置しました。

Windows Server 2016でアクティブディレクトリサーバを構築してみた

本番環境(想定)

  • 専用線(DX)などで、オンプレミスのAD環境との連携を想定しています。

事前確認

AD Connectorの設置要件が満たされている事を確認するため、 設置するVPCにEC2インスタンス、今回はAmazonLinuxを設置し、事前確認を行いました。

ポート確認

AD Connectorを設置するVPCセグメントから、ADサーバへのポート疎通を確認します。

今回はWorkSpacesでADサーバを利用するため、WorkSpacesの管理者ガイドに記載されたポートを対象に確認を行いました。

Amazon WorkSpaces のポート要件

  • 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

NMAP

Amazon Linuxでは、「nmap」コマンドをインストールしポートスキャンを行う事が可能です。

TARGETIP="172.31.40.1"
sudo yum install nmap -y
nmap -Pn ${TARGETIP}
sudo nmap -Pn -sU ${TARGETIP}
TCPポート
$ nmap -Pn ${TARGETIP}

Starting Nmap 6.40 ( http://nmap.org ) at 2018-02-08 14:39 UTC
Nmap scan report for ip-172-31-40-1.ap-northeast-1.compute.internal (172.31.40.1)
Host is up (0.0035s latency).
Not shown: 991 filtered ports
PORT     STATE SERVICE
53/tcp   open  domain
88/tcp   open  kerberos-sec
135/tcp  open  msrpc
139/tcp  open  netbios-ssn
389/tcp  open  ldap
445/tcp  open  microsoft-ds
3268/tcp open  globalcatLDAP
3269/tcp open  globalcatLDAPssl
3389/tcp open  ms-wbt-server

Nmap done: 1 IP address (1 host up) scanned in 4.47 seconds
UDPポート
$ sudo nmap -Pn -sU ${TARGETIP}

Starting Nmap 6.40 ( http://nmap.org ) at 2018-02-08 14:42 UTC
Nmap scan report for ip-172-31-40-1.ap-northeast-1.compute.internal (172.31.40.1)
Host is up (0.0024s latency).
Not shown: 998 open|filtered ports
PORT    STATE SERVICE
53/udp  open  domain
123/udp open  ntp

NC

「nmap」が利用できない場合には、「nc」コマンドでの確認も可能です。 RPCの動的ポート(TCP 1024-65535)は省略しています。

TARGETIP="172.31.40.1"
TCPPORT=(53 88 135 139 389 445 3268)
UDPPORT=(53 123)

for PORT in ${TCPPORT[@]}; do
  nc -zv ${TARGETIP} ${PORT}
done

for PORT in ${UDPPORT[@]}; do
  nc -zvu ${TARGETIP} ${PORT}
done
$ for PORT in ${TCPPORT[@]}; do
>   nc -zv ${TARGETIP} ${PORT}
> done
Connection to 172.31.40.1 53 port [tcp/domain] succeeded!
Connection to 172.31.40.1 88 port [tcp/kerberos] succeeded!
Connection to 172.31.40.1 135 port [tcp/epmap] succeeded!
Connection to 172.31.40.1 139 port [tcp/netbios-ssn] succeeded!
Connection to 172.31.40.1 389 port [tcp/ldap] succeeded!
Connection to 172.31.40.1 445 port [tcp/microsoft-ds] succeeded!
Connection to 172.31.40.1 3268 port [tcp/msft-gc] succeeded!

$ for PORT in ${UDPPORT[@]}; do
>   nc -zv ${TARGETIP} ${PORT}
> done
Connection to 172.31.40.1 53 port [udp/domain] succeeded!
Connection to 172.31.40.1 123 port [udp/ntp] succeeded!

SRVレコード

ADサーバのDNSから、AD Connector が必要とするSRVレコード 「_ldap_tcp.<ドメイン名>」「_kerberos_tcp.<ドメイン名>」が得られる事を確認します。

ADDOMAIN="cm-test.local"
TARGETIP="172.31.40.1"

LDAP_TMP="_ldap._tcp.${ADDOMAIN}"
echo "### ${LDAP_TMP} ###"
dig SRV "${LDAP_TMP}" "@${TARGETIP}" 

KERBEROS_TMP="_kerberos._tcp.${ADDOMAIN}"
echo "### ${KERBEROS_TMP} ###"
dig SRV "${KERBEROS_TMP}" "@${TARGETIP}"

_ldap

$ dig SRV "${LDAP_TMP}" "@${TARGETIP}"

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.56.amzn1 <<>> SRV _ldap._tcp.cm-test.local @172.31.40.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28630
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 2

;; QUESTION SECTION:
;_ldap._tcp.cm-test.local.	IN	SRV

;; ANSWER SECTION:
_ldap._tcp.cm-test.local. 600	IN	SRV	0 100 389 EC2AMAZ-#######.cm-test.local.

(略)

_kerberos.

$ dig SRV "${KERBEROS_TMP}" "@${TARGETIP}"

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.56.amzn1 <<>> SRV _kerberos._tcp.cm-test.local @172.31.40.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41594
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 2

;; QUESTION SECTION:
;_kerberos._tcp.cm-test.local.	IN	SRV

;; ANSWER SECTION:
_kerberos._tcp.cm-test.local. 600 IN	SRV	0 100 88 EC2AMAZ-#######.cm-test.local.

(略)

DNS設定確認

  • ADサーバのDNSからSRVレコードの取得が出来ない場合、ADサーバのDNS設定を確認します。

ディレクトリの作成

ディレクトリタイプの選択

  • 既存の AD の拡張として「AD Connectorの作成」を選択します

ディレクトリの詳細

  • 組織名、Workdocなどのアクセスに利用する任意の文字列を指定します
  • ディレクトリのDNS、ADサーバのドメイン名を指定します
  • ディレクトリのNetBIOS名は、ADサーバのNetBIOS名を指定します
  • Connectorアカウントは、事前にADサーバに追加したADユーザを指定します
  • DNSアドレスは、ADサーバのIPアドレスを指定します

  • 今回VPCはデフォルトVPCを指定、サブネットは「a」「c」を指定しました。

ディレクトリの確認

  • ADコネクタの作成が完了し、ステータスがアクティブになると、ディレクトリが利用可能となります。

一覧

詳細

Workspacesの有効化

  • ディレクトリの詳細画面より、Workspacesのディレクトリ設定画面に遷移します

  • Workspacesのディレクトリ設定画面で、ADコネクタのディレクトリを選択し、アクションから「登録」操作を行います

  • WorkspacesにはWorkdocsのライセンスがバンドルされるので、あわせて有効化しました。

  • 登録済みとなった事を確認します。

ディレクトリの利用

  • Workspacesの起動時、ディレクトリとしてAD Connectorの利用が可能になります。

  • ユーザの特定画面で、ADサーバのユーザが選択できる事を確認します。

  • その後のWorkSpaces、WorkDocsの設定は、以下の記事を御覧ください。

Amazon WorkSpacesの構築~WorkDocsの設定までをやってみた

まとめ

「AD Connector」を利用する事で、既存ADサーバと連携したWorkspaces環境を簡単に構築する事ができ、 2014年当時の「WorkSpaces Connect」と比較して、各段に進化していることを確認できました。

WorkSpaces を 自前Active Directory に接続して立ち上げてみよう!

AD Connectorを設定される場合には、 事前に設置予定のVPCから、ADサーバに対して必要なポートが疎通可能な状態である事と、 ADサーバのDNSから、ldap、kerberosのSRVレコードが取得が出来る事を確認頂くことをおすすめします。