将亚马逊 EC2 Linux 实例无缝加入你的 AWS 托管微软 AD 活动目录 - AWS Directory Service

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

将亚马逊 EC2 Linux 实例无缝加入你的 AWS 托管微软 AD 活动目录

此过程将亚马逊 EC2 Linux 实例无缝连接到您的 AWS 托管微软 AD 活动目录。要完成此过程,您需要创建一个可能产生额外费用的 AWS Secrets Manager 密钥。有关更多信息,请参阅AWS Secrets Manager 定价

如果您需要跨多个 AWS 账户进行无缝域加入,则可以选择启用目录共享

支持以下 Linux 实例分发版和版本:

  • Amazon Linux AMI 2018.03.0

  • Amazon Linux 2(64 位 x86)

  • Red Hat Enterprise Linux 8 (HVM)(64 位 x86)

  • Ubuntu Server 18.04 LTS 和 Ubuntu Server 16.04 LTS

  • CentOS 7 x86-64

  • SUSE Linux 企业服务器 15 SP1

注意

Ubuntu 14 和红帽企业 Linux 7 和 8 之前的发行版不支持无缝域加入功能。

有关将 Linux 实例无缝加入 AWS 托管 Microsoft AD Active Directory 的过程的演示,请 YouTube 观看以下视频。

先决条件

在设置与 EC2 Linux 实例的无缝域加入之前,您需要完成这些部分中的步骤。

无缝加入域名的网络先决条件

要无缝地加入 EC2 Linux 实例,您需要完成以下操作:

  • 拥有 AWS 托管的 Microsoft 广告。要了解更多信息,请参阅 创建你的 Microsoft AWS 托管广告

  • 您需要以下 IAM 权限才能无缝加入 EC2 Linux 实例:

    • 拥有 AWS 托管的 Microsoft 广告。要了解更多信息,请参阅 创建你的 Microsoft AWS 托管广告

    • 您需要以下 IAM 权限才能无缝加入 EC2 Windows 实例:

      • 具有以下 IAM 权限的 IAM 实例配置文件:

        • AmazonSSMManagedInstanceCore

        • AmazonSSMDirectoryServiceAccess

      • 无缝加入 AWS 托管 Microsoft AD 的用户需要 EC2 以下 IAM 权限:

        • AWS Directory Service 权限:

          • "ds:DescribeDirectories"

          • "ds:CreateComputer"

        • 亚马逊 VPC 权限:

          • "ec2:DescribeVpcs"

          • "ec2:DescribeSubnets"

          • "ec2:DescribeNetworkInterfaces"

          • "ec2:CreateNetworkInterface"

          • "ec2:AttachNetworkInterface"

        • EC2 权限:

          • "ec2:DescribeInstances"

          • "ec2:DescribeImages"

          • "ec2:DescribeInstanceTypes"

          • "ec2:RunInstances"

          • "ec2:CreateTags"

        • AWS Systems Manager 权限:

          • "ssm:DescribeInstanceInformation"

          • "ssm:SendCommand"

          • "ssm:GetCommandInvocation"

          • "ssm:CreateBatchAssociation"

  • 创建 AWS 托管 Microsoft AD 时,系统会创建一个包含入站和出站规则的安全组。要了解有关这些规则和端口的更多信息,请参阅随 AWS Managed Microsoft AD 创建的内容。要无缝加入域名加入 EC2 Linux 实例,您启动实例的 VPC 应允许与 Microsoft AD AWS 托管安全组的入站和出站规则中允许的端口相同。

    • 根据您的网络安全和防火墙设置,您可能需要允许额外的出站流量。此流量将通过 HTTPS(端口 443)流向以下端点:

      终端节点 角色

      ec2messages.region.amazonaws.com

      使用会话管理器服务创建和删除会话频道。有关更多信息,请参阅 AWS Systems Manager 终端节点和限额

      ssm.region.amazonaws.com

      的终端节点 AWS Systems Manager Session Manager。有关更多信息,请参阅 AWS Systems Manager 终端节点和限额

      ssmmessages.region.amazonaws.com

      使用会话管理器服务创建和删除会话频道。有关更多信息,请参阅 AWS Systems Manager 终端节点和限额

      ds.region.amazonaws.com

      的终端节点 AWS Directory Service。有关更多信息,请参阅 的地区可用性 AWS Directory Service

      secretsmanager.region.amazonaws.com

      的终端节点 AWS Secrets Manager。有关更多信息,请参阅 AWS Secrets Manager 终端节点和限额

  • 我们建议使用 DNS 服务器来解析你的 Microsoft AD AWS 托管域名。为此,您可以创建 DHCP 选项集。请参阅为 AWS Managed Microsoft AD 创建或更改 DHCP 选项集了解更多信息。

    • 如果您选择不创建 DHCP 选项集,则您的 DNS 服务器将是静态的,并由您的 AWS 托管 Microsoft AD 进行配置。

选择无缝域名加入服务账户

你可以将 Linux 计算机无缝加入你的 AWS 托管微软 AD Active Directory 域。要执行此操作,您必须使用一个具有创建计算机账户权限的用户账户,才能将计算机加入域。尽管 AWS 委托管理员或其他组的成员可能有足够的权限将计算机加入域,但我们不建议使用这些角色。作为最佳实践,我们建议您使用具有将计算机加入域所需最低权限的服务账户。

要委托具有将计算机加入域所需的最低权限的帐户,可以运行以下 PowerShell 命令。您必须在已安装 为托管的 Microsoft AD 安装活动目录 AWS 管理工具 的已加入域的 Windows 计算机上运行这些命令。此外,您必须使用有权修改您的计算机 OU 或容器权限的账户。该 PowerShell 命令设置权限,允许服务帐户在域的默认计算机容器中创建计算机对象。

$AccountName = 'awsSeamlessDomain' # DO NOT modify anything below this comment. # Getting Active Directory information. Import-Module 'ActiveDirectory' $Domain = Get-ADDomain -ErrorAction Stop $BaseDn = $Domain.DistinguishedName $ComputersContainer = $Domain.ComputersContainer $SchemaNamingContext = Get-ADRootDSE | Select-Object -ExpandProperty 'schemaNamingContext' [System.GUID]$ServicePrincipalNameGuid = (Get-ADObject -SearchBase $SchemaNamingContext -Filter { lDAPDisplayName -eq 'Computer' } -Properties 'schemaIDGUID').schemaIDGUID # Getting Service account Information. $AccountProperties = Get-ADUser -Identity $AccountName $AccountSid = New-Object -TypeName 'System.Security.Principal.SecurityIdentifier' $AccountProperties.SID.Value # Getting ACL settings for the Computers container. $ObjectAcl = Get-ACL -Path "AD:\$ComputersContainer" # Setting ACL allowing the service account the ability to create child computer objects in the Computers container. $AddAccessRule = New-Object -TypeName 'System.DirectoryServices.ActiveDirectoryAccessRule' $AccountSid, 'CreateChild', 'Allow', $ServicePrincipalNameGUID, 'All' $ObjectAcl.AddAccessRule($AddAccessRule) Set-ACL -AclObject $ObjectAcl -Path "AD:\$ComputersContainer"

如果您更喜欢使用图形用户界面(GUI),您可以使用 向您的服务账户委派权限 中所述的手动过程。

创建密钥以存储域服务账户

您可以使用 AWS Secrets Manager 存储域名服务帐户。有关更多信息,请参阅创建 AWS Secrets Manager 密钥

注意

Secrets Manager 会收取相关费用。有关更多信息,请参阅《AWS Secrets Manager 用户指南》中的 “定价”。

创建密钥并存储域服务账户信息
  1. 登录 AWS Management Console 并打开 AWS Secrets Manager 控制台,网址为https://console.aws.amazon.com/secretsmanager/

  2. 选择存储新密钥

  3. Store a new secret(存储新密钥)页面上,执行以下操作:

    1. 密钥类型下,选择其他密钥类型

    2. 键/值对下,执行以下操作:

      1. 在第一个框中,输入 awsSeamlessDomainUsername。在同一行的下一个框中,输入您服务账户的用户名。例如,如果您之前使用过该 PowerShell 命令,则服务帐户名称将为awsSeamlessDomain

        注意

        必须完全按照原样输入 awsSeamlessDomainUsername。确保前后均没有任何空格。否则,域加入将失败。

        在 AWS Secrets Manager 控制台的 “选择密钥类型” 页面上。在密钥类型下选择其他类型的密钥并输入 awsSeamlessDomainUsername 作为键值。
      2. 选择添加行

      3. 在新行的第一个框中输入 awsSeamlessDomainPassword。在同一行的下一个框中,输入服务账户密码。

        注意

        必须完全按照原样输入 awsSeamlessDomainPassword。确保前后均没有任何空格。否则,域加入将失败。

      4. 加密密钥下,保留默认值 aws/secretsmanager。选择此选项时, AWS Secrets Manager 始终会对密钥进行加密。您也可以选择您创建的密钥。

      5. 选择下一步

  4. 在 “密钥名称” 下,使用以下格式输入包含您的目录 ID 的密钥名称,d-xxxxxxxxx替换为您的目录 ID:

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

    这将用于检索应用程序中的密钥。

    注意

    您必须aws/directory-services/d-xxxxxxxxx/seamless-domain-join完全按原样输入,但要d-xxxxxxxxxx用您的目录 ID 替换。确保前后均没有空格。否则,域加入将失败。

    在 AWS Secrets Manager 控制台的配置密钥页面上。输入密钥名称并突出显示。
  5. 将其他所有内容都设置为默认值,然后选择下一步

  6. 配置自动轮换下,选择禁用自动轮换,然后选择下一步

    存储此密钥后,您可以为其启用轮换。

  7. 查看设置,然后选择存储以保存更改。Secrets Manager 控制台将返回您账户中的密钥列表,并且列表中现在包含新的密钥。

  8. 从列表中选择您新创建的密钥名称,并记下密钥 ARN 值。您需要在下一部分中使用该名称。

为域服务账户密钥启用轮换

我们建议您定期轮换密钥以改善安全状况。

为域服务账户密钥启用轮换

创建所需 IAM policy 和角色

使用以下先决条件步骤创建自定义策略,该策略允许对您的 Secrets Manager 无缝域加入密钥(您之前创建的)进行只读访问,并创建新的 Linux EC2 DomainJoin IAM 角色。

创建 Secrets Manager IAM 读取策略

您可以使用 IAM 控制台创建策略,授予对 Secrets Manager 密钥的只读访问权限。

创建 Secrets Manager IAM 读取策略
  1. 以有权创建 IAM 策略的用户 AWS Management Console 身份登录。然后在上打开 IAM 控制台https://console.aws.amazon.com/iam/

  2. 在导航窗格中的访问管理下,选择策略

  3. 选择创建策略

  4. 选择 JSON 选项卡,然后复制以下 JSON 策略文档中的文本。然后将其粘贴到 JSON 文本框中。

    注意

    确保将区域和资源 ARN 替换为您之前创建的密钥的实际区域和资源 ARN。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret" ], "Resource": [ "arn:aws:secretsmanager:us-east-1:xxxxxxxxx:secret:aws/directory-services/d-xxxxxxxxx/seamless-domain-join" ] } ] }
  5. 完成后,选择下一步。策略验证程序将报告任何语法错误。有关更多信息,请参阅验证 IAM policy

  6. 检查策略页面上,输入一个策略名称,例如 SM-Secret-Linux-DJ-d-xxxxxxxxxx-Read。查看摘要部分,以查看您的策略授予的权限。选择创建策略,保存更改。托管策略列表中将显示新策略,并且现在已准备好附加到身份中。

注意

我们建议您为每个密钥创建一个策略。这样做可以确保实例只能访问相应的密钥,并在实例受损时将影响降至最低。

创建 Linux EC2 DomainJoin 角色

您可以使用 IAM 控制台创建用于加入您的 Linux EC2 实例的域名的角色。

创建 Linux EC2 DomainJoin 角色
  1. 以有权创建 IAM 策略的用户 AWS Management Console 身份登录。然后在上打开 IAM 控制台https://console.aws.amazon.com/iam/

  2. 在导航窗格中的访问管理下,选择角色

  3. 在内容窗格中,选择创建角色

  4. 选择受信任实体的类型下,选择 AWS 服务

  5. 在 “用例” 下,选择 EC2,然后选择 “下一步”。

    在 IAM 控制台的 “选择可信实体” 页面上。 AWS 服务并 EC2 被选中。
  6. 对于筛选策略,执行以下操作:

    1. 输入 AmazonSSMManagedInstanceCore。然后选择列表中该项目的复选框。

    2. 输入 AmazonSSMDirectoryServiceAccess。然后选择列表中该项目的复选框。

    3. 输入 SM-Secret-Linux-DJ-d-xxxxxxxxxx-Read(或您在上一过程中创建的策略名称)。然后选择列表中该项目的复选框。

    4. 添加了上面列出的三个策略后,选择创建角色

    注意

    Amazon SSMDirectory ServiceAccess 提供了将实例加入的权限 Active Directory 由... 管理 AWS Directory Service。Amazon SSMManaged InstanceCore 提供使用该 AWS Systems Manager 服务所需的最低权限。有关创建具有这些权限的角色的更多信息,以及您可以分配给 IAM 角色的其他权限和策略的信息,请参阅《AWS Systems Manager 用户指南》中的为 Systems Manager 创建 IAM 实例配置文件

  7. 角色名称字段中,输入新角色的名称,如 LinuxEC2DomainJoin 或您喜欢的其他名称。

  8. (可选)对于角色描述,请输入描述。

  9. (可选)在步骤 3:添加标签下选择添加新标签以添加标签。标签键值对用于组织、跟踪或控制此角色的访问权限。

  10. 选择 Create role(创建角色)。

无缝加入 Linux 实例

无缝加入 Linux 实例
  1. 登录 AWS Management Console 并打开 Amazon EC2 控制台,网址为https://console.aws.amazon.com/ec2/

  2. 从导航栏的区域选择器中,选择与现有目录 AWS 区域 相同的目录。

  3. EC2 控制面板启动实例部分,选择启动实例

  4. 启动实例页面的名称和标签部分下,输入您要用于 Linux EC2 实例的名称。

  5. (可选)选择 “添加其他标签” 以添加一个或多个标签键值对,以组织、跟踪或控制此 EC2 实例的访问权限。

  6. 应用程序和操作系统映像(Amazon 机器映像)部分中,选择您想要启动的 Linux AMI。

    注意

    使用的 AMI 必须具有 AWS Systems Manager (SSM 代理)版本 2.3.1644.0 或更高版本。要通过从该 AMI 启动实例来检查 AMI 中已安装的 SSM Agent 版本,请参阅获取当前安装的 SSM Agent 版本。如果您需要升级 SSM 代理,请参阅在 Linux EC2 实例上安装和配置 SSM 代理。

    SSM 在将 Linux 实例加入时使用该aws:domainJoin插件 Active Directory 域。该插件将 Linux 实例的主机名更改为 EC2 AMAZ-XXXXXXX 格式。有关 aws:domainJoin 的更多信息,请参阅《AWS Systems Manager 用户指南》中的 AWS Systems Manager 命令文档插件参考

  7. 实例类型部分,从实例类型下拉列表中选择要使用的实例类型。

  8. 密钥对(登录)部分,您可以选择创建新密钥对,或从现有密钥对中进行选择。要创建新的密钥对,请选择新建新密钥对。输入密钥对的名称,然后为密钥对类型私钥文件格式选择一个选项。要以可与 OpenSSH 一起使用的格式保存私钥,请选择 pem。要以可与 PuTTY 一起使用的格式保存私钥,请选择 ppk。选择创建密钥对。您的浏览器会自动下载私有密钥文件。将私有密钥文件保存在安全位置。

    重要

    这是您保存私有密钥文件的唯一机会。

  9. 启动实例页面的网络设置部分下,选择编辑。从 VPC – 必需下拉列表中选择创建目录的 VPC

  10. 子网下拉列表中选择 VPC 中的其中一个公有子网。选择的子网必须将所有外部流量都路由到互联网网关。否则将无法远程连接到实例。

    有关如何连接到互联网网关的更多信息,请参阅《Amazon VPC 用户指南》中的使用互联网网关连接到互联网

  11. 自动分配公有 IP 下,选择启用

    有关公有和私有 IP 地址的更多信息,请参阅亚马逊 EC2 用户指南中的亚马逊 EC2 实例 IP 地址

  12. 对于防火墙(安全组)设置,您可以使用默认设置或进行更改以满足您的需求。

  13. 对于配置存储设置,您可以使用默认设置或进行更改以满足您的需求。

  14. 选择高级详细信息部分,从域加入目录下拉列表中选择您的域。

    注意

    选择域加入目录后,您可能会看到:

    选择域加入目录时出现错误消息。您现有的 SSM 文档存在错误。

    如果 EC2 启动向导识别出具有意外属性的现有 SSM 文档,则会出现此错误。您可以执行以下操作之一:

    • 如果您之前编辑过 SSM 文档并且属性符合预期,请选择关闭并继续启动 EC2 实例,不做任何更改。

    • 选择“在此处删除现有 SSM 文档”链接以删除 SSM 文档。这将允许创建包含正确属性的 SSM 文档。SSM 文档将在您启动 EC2 实例时自动创建。

  15. 对于 IAM 实例配置文件,请选择您之前在先决条件部分步骤 2:创建 Linux EC2 DomainJoin 角色中创建的 IAM 角色

  16. 选择启动实例

注意

如果您要使用 SUSE Linux 进行无缝域加入,则需要重新启动才能进行身份验证。要从 Linux 终端重启 SUSE,请键入 sudo reboot