

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

# 将实例加入到活动目录域
<a name="dotnet-activedirectory"></a>

使用 Amazon Elastic Beanstalk，您的环境中的 Windows 服务器实例可以自动加入 Active Directory 域。您可以使用目录服务管理[Amazon 目录](https://docs.amazonaws.cn/directoryservice/latest/admin-guide/what_is.html)，然后在`aws:elasticbeanstalk:windows:activedirectory`命名空间中使用配置选项打开联接。然后，在 Elastic Beanstalk 向其部署应用程序之前，每个实例在启动时都会加入该域。您无需编写任何自定义联接逻辑或自己管理联接。

您可以将实例加入微软 Amazon 托管广告目录或简单广告目录，或者通过 AD 连接器加入您自行管理的 Active Directory。

**注意**  
Active Directory 域名在 2026 年 [https://docs.amazonaws.cn/elasticbeanstalk/latest/relnotes/release-2026-08-18-windows.html](https://docs.amazonaws.cn/elasticbeanstalk/latest/relnotes/release-2026-08-18-windows.html) 8 月 18 日当天或之后发布的 Windows 服务器平台版本上可用。早期的平台版本不支持`aws:elasticbeanstalk:windows:activedirectory`命名空间并在验证期间拒绝其选项。要升级您的环境，请参阅[更新 Elastic Beanstalk 环境的平台版本](using-features.platform.upgrade.md)。

## 域名加入的工作原理
<a name="dotnet-activedirectory-how"></a>

当带有 Active Directory 选项的环境中的实例启动时，它会在 Elastic Beanstalk 部署您的应用程序之前执行以下操作：

1. 在目录中为自己创建一个计算机对象。该实例使用环境实例配置文件的证书调用 Amazon 目录服务 [ CreateComputer ](https://docs.amazonaws.cn/directoryservice/latest/devguide/API_CreateComputer.html) API 操作。如果您设置该`DirectoryOU`选项，则该实例将在该组织单位 (OU) 中创建计算机对象。否则，它会在目录的默认容器中创建对象。

1. 将自身重命名为`EC2-{{XXXXXXXX}}`，其中`{{XXXXXXXX}}`是实例 ID 的最后八个大写字符。

1. 加入域，然后重新启动以完成加入。这与 Elastic Beanstalk 环境中的每个 Windows Server 实例在配置期间为应用其主机名而执行的一次性重启相同，因此域加入不会增加额外的重启。

如果没有 Active Directory 选项，Elastic Beanstalk 会从其私有 IPv4 地址（例如）派生每个 Windows 实例的主机名。`IP-0A010203`IP 地址可以重复使用，因此这些名称可能会与目录中陈旧的计算机对象发生冲突。这可能发生在跨区域重复使用 IP 范围的灾难恢复拓扑中，也可能发生在长期环境中。当设置 Active Directory 选项时，主机名将改为从实例 ID 派生。由于每个实例 ID 都是全局唯一的，因此与陈旧计算机对象发生名称冲突的可能性可以忽略不计。实例ID-derived 主机名仅适用于具有 Active Directory 选项的环境。

## 先决条件
<a name="dotnet-activedirectory-prereqs"></a>

在配置 Active Directory 域加入之前，请验证是否满足以下先决条件：
+ ** Amazon 目录服务目录 ** — Amazon 托管的微软 AD、Simple AD 或 AD Connector。要创建一个，请参阅《 Amazon 目录服务管理指南》[中的 “](https://docs.amazonaws.cn/directoryservice/latest/admin-guide/getting_started.html)设置*Amazon 目录服务” *。
+ **网络连接和 DNS 解析 ** — 您的环境必须在可访问目录的 VPC 中运行，并且环境中的实例必须解析该目录的 DNS 名称。加入过程通过 DNS SRV 记录发现域控制器。这通常意味着将您的 VPC 与指向该目录 DNS 服务器的 DHCP 选项集相关联。这是标准的 Amazon 目录服务配置。有关更多信息，请参见[创建或更改《*Amazon 目录服务管理指南》*](https://docs.amazonaws.cn/directoryservice/latest/admin-guide/dhcp_options_set.html)中的 DHCP 选项集。缺少 DNS 解析是域加入失败的常见原因。
+ **实例配置文件权限 **-环境的[实例配置文件](iam-instanceprofile.md)（例如`aws-elasticbeanstalk-ec2-role`）必须具有调用目录`ds:CreateComputer`的权限。要遵循最小权限原则，请在您的目录中添加一个范围内的策略：

  ```
  {
    "Version": "2012-10-17",
    "Statement": [
      {
        "Effect": "Allow",
        "Action": "ds:CreateComputer",
        "Resource": "arn:aws:ds:{{us-east-2}}:{{123456789012}}:directory/{{d-1234567890}}"
      }
    ]
  }
  ```

  或者，您可以附加[AmazonSSMDirectoryServiceAccess](https://docs.amazonaws.cn/aws-managed-policy/latest/reference/AmazonSSMDirectoryServiceAccess.html)托管策略，其中包括您账户中所有目录的`ds:CreateComputer`权限。
+ **支持的平台版本 **-您的环境必须运行 2026 年 [https://docs.amazonaws.cn/elasticbeanstalk/latest/relnotes/release-2026-08-18-windows.html](https://docs.amazonaws.cn/elasticbeanstalk/latest/relnotes/release-2026-08-18-windows.html) 8 月 18 日当天或之后发布的 Windows Server 平台版本。
+ **现有的 OU（如果你设置了`DirectoryOU`）**— Elastic Beanstalk 不创建组织单位。如果设置该`DirectoryOU`选项，则 OU 必须已经存在于目录中，否则连接将失败。

## 配置活动目录域加入
<a name="dotnet-activedirectory-configure"></a>

要启用 Active Directory 域加入功能，请在`aws:elasticbeanstalk:windows:activedirectory`命名空间中设置以下配置选项。可以在[配置文件中设置它们 ](ebextensions.md) Amazon CLI，也可以使用任何其他方法来设置[配置选项](command-options.md)。有关每个选项的详细信息，请参阅[aws: elasticbeanstalk: windows: 活动目录](command-options-general.md#command-options-general-elasticbeanstalkwindowsactivedirectory)。
+ `DirectoryId`— 要加入的目录的 ID（例如，`d-1234567890`）。设置此选项可开启该功能。如果您不进行设置，则环境的行为不会改变。
+ `DirectoryName`— 目录的完全限定的 DNS 名称（例如，`corp.example.com`）。设置时`DirectoryId`为必填项。
+ （可选）`DirectoryOU`— 用于创建计算机对象的组织单位的可分辨名称（例如，`OU=WebServers,DC=corp,DC=example,DC=com`）。OU 必须已经存在。如果您未设置此选项，则会在目录的默认容器中创建计算机对象。

以下 Amazon CLI 示例在运行环境中配置 Active Directory 域加入。该示例使用`--option-settings`参数的 JSON 语法，因为`DirectoryOU`值包含逗号，速记语法将其解释为分隔符。

**Example Amazon CLI -配置活动目录域加入**  

```
aws elasticbeanstalk update-environment \
    --environment-name {{my-env}} \
    --option-settings '[
      {"Namespace": "aws:elasticbeanstalk:windows:activedirectory", "OptionName": "DirectoryId", "Value": "{{d-1234567890}}"},
      {"Namespace": "aws:elasticbeanstalk:windows:activedirectory", "OptionName": "DirectoryName", "Value": "{{corp.example.com}}"},
      {"Namespace": "aws:elasticbeanstalk:windows:activedirectory", "OptionName": "DirectoryOU", "Value": "{{OU=WebServers,DC=corp,DC=example,DC=com}}"}
    ]'
```

**重要**  
当您在此命名空间中添加、更改或删除任何选项时，Elastic Beanstalk 会在您的环境中重新预置亚马逊 EC2 实例。这将触发[滚动更新](using-features.rollingupdates.md)。

如果您将环境配置更改为指向其他目录，则替换实例会加入新目录。如果您删除这些选项，则替代实例将在不加入域的情况下启动，并使用标准 IP-address-derived 主机名。在这两种情况下，先前创建的实例的计算机对象都保留在目录中。有关更多信息，请参阅 [管理目录中的计算机对象](#dotnet-activedirectory-cleanup)。

## 确认域名加入
<a name="dotnet-activedirectory-confirm"></a>

要确认某个实例已加入该域，请执行以下任一操作：
+ 验证名为`EC2-{{XXXXXXXX}}`（实例的主机名）的计算机对象是否存在于您的目录中、您指定的 OU 或默认容器下。
+ 查看该线路的实例部署日志`Active Directory: joined to {{directory-name}}`。有关更多信息，请参阅 [查看 Elastic Beanstalk 环境的部署日志](environments-deployment-logs.md)。

当您的环境向外扩展时，Auto Scaling 会添加也加入该域的实例。要查看其中一个实例的部署日志，请从 Amazon S3 中检索该日志。有关更多信息，请参阅 [部署日志存储在哪里](environments-deployment-logs.md#environments-deployment-logs.instance)。

## 域名加入失败
<a name="dotnet-activedirectory-failures"></a>

域加入失败不会阻止部署。如果实例由于任何原因无法加入域，它将退回到标准 IP-address-derived 主机名 (`IP-{{XXXXXXXX}}`)，继续部署，环境仍可达到 Re * ady * 状态并报告运行正常。

为了使故障可见，Elastic Beanstalk 将实例的实际域成员资格与配置的目录进行比较，并在二者不匹配[时发出`ERROR`](using-features.events.md)事件：

```
Active Directory domain join did not complete: instance is not joined to '{{corp.example.com}}' (PartOfDomain=False, Domain={{WORKGROUP}}). See the deployment log for the join output.
```

该实例将联接过程的输出写入`C:\cfn\log\eb-ad-join.log`。当连接失败时，Elastic Beanstalk 还会将此日志复制到实例的部署日志中，因此您无需连接到实例即可检索原因。有关更多信息，请参阅 [查看 Elastic Beanstalk 环境的部署日志](environments-deployment-logs.md)。

## 问题排查
<a name="dotnet-activedirectory-troubleshooting"></a>

如果您的实例未加入网域，请检查以下内容：
+ **加入日志 **-读取实例部署日志（参见[查看 Elastic Beanstalk 环境的部署日志](environments-deployment-logs.md)）或实例`C:\cfn\log\eb-ad-join.log`上的联接输出。该日志记录了导致联接失败的特定错误。
+ **DNS 解析 **-在环境 VPC 中的实例中，验证目录的 DNS 名称（`DirectoryName`值）是否已解析。如果没有，请将 VPC 与指向该目录 DNS 服务器的 DHCP 选项集相关联。
+ **IAM 权限 ** — 验证环境的实例配置文件是否允许`ds:CreateComputer`访问该目录。没有它，连接在尝试创建计算机对象时会失败。
+ **组织单位 **-如果设置`DirectoryOU`，请验证 OU 是否存在于目录中，并且其标识名是否与选项值完全匹配。加入不存在的 OU 失败。
+ **实例配置 **-每个实例`C:\cfn\eb-ad.json`上的文件记录了实例启动时`DirectoryName`使用的`DirectoryId`和。使用它来确认实例收到了哪个目录配置。

## 管理目录中的计算机对象
<a name="dotnet-activedirectory-cleanup"></a>

当实例或环境终止时，Elastic Beanstalk 不会从您的目录中删除该实例的计算机对象。每个加入的实例都会留下其`EC2-{{XXXXXXXX}}`计算机对象，扩展活动会为每个新实例创建一个对象。您有责任使用贵组织的常用目录管理工具，定期从您的目录中删除过时的计算机对象。

由于每个新实例的主机名都来自其自己的全局唯一实例 ID，因此与陈旧计算机对象发生名称冲突的可能性可以忽略不计。