亚马逊AWS官方博客

将 Linux 实例无缝加入适用于 Microsoft Active Directory 的 AWS Directory Service 中

我接触过的很多客户都使用 Active Directory 来管理各种应用程序和服务的集中式用户身份验证和授权。对于这些客户来说,Active Directory 是他们 IT 拼图的关键部分。

在 AWS,我们提供适用于 Microsoft Active Directory 的 AWS Directory Service,为我们的客户提供构建于实际 Microsoft Active Directory 之上的高度可用的弹性 Active Directory 服务。AWS 管理运行 Active Directory 所需的基础设施,并处理所需的所有补丁和软件更新。它是完全托管型服务,因此,在域控制器故障之类的情况下,我们的监控将自动检测并替换故障的控制器。

手动连接计算机与 Active Directory 是一项费力不讨好的任务;您必须连接到计算机,进行一系列手动更改,然后执行重新启动。虽然这些都没有特别具有挑战性,但它确实需要时间,如果您希望注册多台计算机,则这项任务很快就会耗费大量时间。

今天,团队正在推出一项新功能,该功能将使 Linux EC2 实例在启动时无缝连接到适用于 Microsoft Active Directory 的 AWS Directory Service。此功能补充了可使 Windows EC2 实例在启动时无缝加入域的现有功能。此功能将使客户能够更快地移动并改善管理员的体验。

现在,您可以将您的 Windows 和 Linux EC2 实例同时无缝连接到适用于 Microsoft Active Directory 的 AWS Directory Service。该目录可以在您自己的账户中,或者可以从另一个账户与您共享,但唯一需要注意的是,实例和目录必须在同一个区域内。

要显示过程的工作原理,我们来了解一个现有的适用于 Microsoft Active Directory 的 AWS Directory Service,并逐步完成使 Linux EC2 实例无缝加入该目录所需的步骤。

创建和存储 AD 凭证
要将 Linux 计算机无缝加入我的 AWS Managed Active Directory 域,我需要一个有权将实例加入域的账户。尽管 AWS 代理管理员的成员拥有将计算机加入域的足够权限,但我创建了一个拥有所需最低权限的服务账户。我们的文档对如何创建这种服务账户进行了说明。

无缝加入域的功能需要了解我的活动目录服务账户的凭证。为实现这一目标,我需要使用 AWS Secrets Manager 与指定名称的密钥来创建密钥,无缝域功能将使用它来将实例加入目录中。

AWS Secrets Manager 控制台中,单击 Store a new secret(存储新密钥)按钮,在下一个屏幕上,在被要求选择密钥类型时,选择名为 Other type of secrets(其他密钥类型)的选项。我现在可以添加两个密钥/值。第一个称为 awsSeamlessDomainUsername,在值文本框中,我会输入 Active Directory 服务账户的用户名。第二个密钥称为 awsSeamlessDomainPassword,我会在此输入我的服务账户密码。

由于这是演示,我选择将 DefaultEncryptionKey 用作密钥,但您可以决定使用自己的密钥。

点击下一步后,系统要求我给密钥指定名称。我添加了以下名称,将 d-xxxxxxxxx 替换为我的目录 ID。

aws/directory-services/d-xxxxxxxxx/seamless-domain-join

如果您输入此名称错误或者在句前或句尾输入了空格,域加入将会失败。

我记下了密钥 ARN,因为我在创建 IAM 策略时将会需要它。

创建所需的 IAM 策略和角色
现在,我需要创建一个 IAM 策略,以授予读取我的 seamless-domain-join 密钥的权限。

我登录 IAM 控制台并选择 Policies(策略)。在内容窗格中,我选择 Create policy(创建策略)。我切换到 JSON 选项卡并从以下 JSON 策略文档中复制文本,从而将 Secrets Manager ARN 替换为我之前记下的那个。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetSecretValue",
                "secretsmanager:DescribeSecret"
            ],
            "Resource": [
                "arn:aws:secretsmanager:us-east-1:############:secret:aws/directory-service/d-xxxxxxxxxx/seamless-domain-join-example"
            ]
        }
    ]
}

在 Review(审查)页面上,我将策略命名为 SeamlessDomainJoin-Secret-Readonly,然后选择 Create policy(创建策略)以保存我的工作。

现在,我需要创建一个将使用此策略的 IAM 角色(以及其他几个角色)。在 IAM 控制台中,我选择 Roles(角色),然后在内容窗格中选择 Create role(创建角色)。在 Select type of trusted entity(选择受信任实体的类型)下,我选择 AWS 服务,然后选择 EC2 作为使用案例并单击 Next:Permissions(下一步:权限)。


我将以下策略附加到我的角色中:AmazonSSMManagedInstanceCoreAmazonSSMDirectoryServiceAccessSeamlessDomainJoin-Secret-Readonly

我单击要求提供 Role name(角色名称)的 Review(审查)屏幕,调用角色 EC2DomainJoin,但您可以调用您喜欢的任何角色。然后,我通过按下屏幕右下角的按钮来创建角色。

创建 Amazon 系统映像
当我稍后启动 Linux 实例时,我需要选择一个 Linux Amazon 系统映像 (AMI) 作为模板。当前,默认的 Linux AMI 不包含这个新的无缝域功能所需的 AWS Systems Manager 代理(SSM 代理)版本。因此,我将不得不使用更新的 SSM 代理创建 AMI。为此,我首先在我的账户中创建一个新的 Linux 实例,然后使用 SSH 客户端连接到该实例。然后,我遵照文档说明将 SSM 代理更新到 2.3.1644.0 或更新版本。一旦实例完成更新,我就可以使用下列文档根据此实例创建一个新的 AMI。

现在,我有了一个新 AMI,我可以在下一步中使用它。将来,基础 AMI 将更新为使用较新的 SSM 代理,我们可以跳过此部分。如果您有兴趣了解实例使用的是哪个版本的 SSM 代理,本文档将向您解释如何检查。

无缝加入
首先,我需要创建一个 Linux 实例,因此,我前往 EC2 控制台并选择 Launch Instance(启动实例)。

接下来,我选择 Linux Amazon 系统映像 (AMI)。我选择之前创建的 AMI。

配置实例时,我很谨慎地选择包含我的目录的 Amazon Virtual Private Cloud。使用标记为 Domain join directory(域加入目录)的下拉列表,我能够选择希望此实例加入的目录。

在 IAM 角色中,我选择之前创建的 EC2DomainJoin 角色。

当我启动此实例时,它将无缝加入我的目录中。实例上线后,我可以使用适用于 Microsoft Active Directory 的 AWS Directory Service 的管理员凭证对实例进行 SSH 连接,以确认一切是否正常工作。

这项新功能从今天开始推出,我们期待获得您对此新功能的反馈。

愉快加入

— Martin