注:本文针对在IDC自建AD活动目录的场景。如果您使用的是AWS托管的Directory Service,则可以跳过本文第三章节,即可直接在第四章节的界面中看到托管的目录。
一、背景
EC2 Windows有两种加入域:手工加入,自动加入。手工加入域的方式就和一个普通电脑一样,先修改DNS为域控制器的DNS IP,然后在系统属性部分,将单机切换到域,重启即可完成加域。自动加域是通过AWS云端的AD Connector,将所有新开的EC2自动加入域,而无须人工操作,也被称为Seamless Join Domain。两种模式的主要对比如下图。

本文实验环境:
1、EC2上自建的Windows Server 2016英文版搭建域控制器,模拟企业私有IDC的域控制器。如果是真实生产环境,需要另外配置Direct Connect专线或者Site-to-Site VPN将AWS和私有IDC打通。
2、采用云上AD Connector建立和域的集成。
3、新创建的EC2采用Windows Server 2019自动加域。
二、域控制器和服务账户的搭建
为了进行对接,本文将采用较高的安全实践,即加入域的过程不采用domain admin的粗暴方式,而是定一个具有最小权限的服务账号,通过这个服务账号对接到AD Connector。
创建AD过程略,请参考相应文档。
三、AD Connector创建
进入Directory Service模块,如果之前没有创建过,将出现向导页面,从下拉框中选择AD Connector并点击创建。如下截图。

在向导页面,选择创建“Ad Connector”,如下截图。

在选择规格页面,选择小型的规格。如下截图。

在配置VPC网络页面,选择默认VPC,并选择对应两个AZ的两个子网。如果是真实生产环境,域控制器位于私有IDC而不在云上,那么VPC就选择已经打通VPN能够连接到私有IDC的那个子网。如下截图。

在设置AD界面,填写AD域控制器的域名,例如本文档是myad01.com。在下方的DNS中,填写现有域的DNS服务器,如果是生产环境,在私有IDC中,一般是主辅两个域控制器扮演DNS,也称为PDC和BDC,则填写他们的内网IP地址。本文档是用EC2模拟的域控制器做测试,自有一个主域控制器,因此就填写一个唯一的内网IP。如下截图。

接下来将页面向下滚动,在最下方,填写连接到域的服务账号。本文档为了模拟最小权限,将不使用Domain Admin这种高级别账号进行对接,而是另外创建了一个最小权限的用于域集成的服务账户。这个过程请参考相关文档。
填写服务用户的用户名和密码后,就可以点击下一步按钮继续操作。如下截图。

在向导最后一步的Review界面,不需要修改任何参数,直接点击右下角的Create按钮创建AD Connector。如下截图。

创建开始后,界面提示需要5-10分钟。此时需要等待一定时间。如下截图。

等待5-10分钟后,AD Connector的状态显示正常。如下截图。

四、创建EC2加域需要的IAM角色
进入IAM模块,点击添加角色。点击添加角色。如下截图。

在创建角色向导的第一步,选择角色的使用者是EC2。如下截图。

在策略界面,一共需要添加两个策略,第一个策略,搜索策略名称“AmazonSSMManagedInstanceCore”,并选中之。如下截图。

不要着急下一步,继续搜索第二个策略,名称是“”,并选中之,然后可以点击下一步标签按钮继续。如下截图。

在标签配置界面,无须进行设置,直接点击下一步继续。如下截图。

输入角色的名称,并点击下一步完成创建。

创建角色完成后,可以尝试在角色界面的搜索框中,查找下角色名称,确认创建成功。如下截图。

至此EC2角色创建完成。
五、创建EC2并自动加域
现在开始创建EC2。
在向导第一个步骤,选择EC2的AMI界面,选择最新的Windows Server 2019英文版,基础版本选择Base版本,也就是带有图形界面的版本。如果选择Core版本将不带图形界面不利于操作,因此请确认选择正确版本。如下截图。

在向导第三个步骤,选择能够链接到域控制器的VPC,在从目录服务中,选择刚才通过AD Connector链接到的域。如下截图。

选择好域之后,在IAM角色中,选择上一个步骤创建的IAM角色。如下截图。

之后的所有操作过程,都与之前创建一个普通的EC2过程相同。
在选择密钥界面,正常选择一个密钥即可。稍后登陆是使用域账号登陆,这里的密钥选择是本地管理员账户,不产生冲突,因此无论是否选择密钥,都不影响后续使用域用户登陆。选择密钥界面如下截图。

等待5-10分钟后,创建EC2完成。
六、使用Domain Admin身份登陆
微软Windows Server自2012版本后,默认是不允许Domain User用户在一个新的Server系统上登陆的,这与工作站版本的Pro系统有策略的区别。本文现在使用Domain Admin级别的账户先测试登陆。
本实验使用MacOS上的微软RDP客户端链接,在添加节点界面,输入EC2的公网IP。在密码位置,先不用填写。如下截图。

双击图标登陆,此时提示用户名和密码,这里输入域\用户名,例如myad01\admin01,这是一个域管理员用户,并输入密码,即可登陆。如下截图。

登陆成功,点击开始按钮,点击用户图标,查看自己的用户信息。如下截图。

查看后查看用户信息,即可看到当前登陆身份是域用户admin01。
至此域管理用户登陆完成。
七、使用Domain User身份登陆
前文已经提到,微软Windows Server自2012版本后,默认是不允许Domain User用户在一个新的Server系统上登陆的。如果希望放开Domain User登陆,需要新建组策略,并分发到域的Server上。下面介绍如何新建组策略。
1、设置允许Domain User登陆的组策略
首先登陆到域控制器上,进入管理工具。如下截图。

点击组策略管理。如下截图。

在本域的名字上,点击右键,选择新建组策略并链接到这里。如下截图。

输入新建组策略的名称,创建完成。如下截图。

点击右键,选择编辑,打开组策略编辑器。如下截图。

在新打开的编辑组策略的界面,点击“计算机管理”,展开“设置”,展开“控制面板设置”,展开到“本地用户和组”,然后对其点击鼠标右键,选择新建,点击新建“Local Group”。如下截图。

点击下方的添加按钮。如下截图。

在新探出的添加界面,点击更多按钮。如下截图。

在添加界面中,手工输入Domain Users,中间有一个空格,然后按“Check Name”按钮,即可完成匹配,然后再点击OK。如下截图。

继续点击OK完成添加。如下截图。

界面返回到Group Name界面。点击下拉框,从列表中选择“Remote Desktop Users(Built-in)”,选中之,点击OK按钮。如下截图。

添加完成。如下截图。

此时可以关闭域控制器上的窗口了。
之后登陆有两种情况:
- 如果新创建一个EC2,则自动获得最新的策略,立刻可以用Domain User账户登陆了。
- 如果是一个之前已经存在的节点,需要等待下一次组策略刷新再后台自动刷新后,才允许使用Domain User账户登陆。如果不想等待很长时间组策略刷新,那么需要用Domain Admin用户登陆到这个EC2,以管理员身份打开cmd,并执行gpupdate /force,然后退出切换用户。再用domain User登陆即可可以登陆成功。
2、新建User01账户并登陆测试
为了测试登陆,我们在域控制器上,新建了一个用户名为user01的普通权限用户。如下截图。

稍后我们将使用user01登陆。
现在启动RDP客户端,连接到刚创建的EC2上。点击查看用户信息。如下截图。

查看用户自己信息后,确认是user01普通用户,也就是domain user登陆成功。
至此,所有新EC2节点都可以自动加入域,且放开了Domain User随时可以登陆任意节点。
八、参考文档
两种加域方式的说明:
https://docs.aws.amazon.com/directoryservice/latest/admin-guide/launching_instance.html
配置IAM角色的说明:
https://docs.aws.amazon.com/zh_cn/directoryservice/latest/admin-guide/launching_instance.html
允许普通域用户通过RDP终端登陆
https://aws.amazon.com/premiumsupport/knowledge-center/ec2-domain-user-rdp/?nc1=h_ls
全文完。