

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

# `DirectoryService` 部分
<a name="DirectoryService-v3"></a>

**注意**  
在 3.1.1 Amazon ParallelCluster 版本中增加了对 Support 的支持。`DirectoryService`

**（可选）**支持多用户访问的集群的目录服务设置。

Amazon ParallelCluster 管理支持多用户通过[系统安全服务守护程序 (SSSD) 支持的轻型目录访问协议 (LDAP) 使用活动目录 (AD](https://sssd.io/docs/introduction.html)) 访问集群的权限。有关更多信息，请参阅[什么是 Amazon Directory Service？](https://docs.amazonaws.cn/directoryservice/latest/admin-guide/what_is.html) 在《*Amazon Directory Service 管理指南》*中。

我们建议您使用 LDAP TLS/SSL （简称 LDAPS），以确保任何潜在的敏感信息都通过加密通道传输。

```
DirectoryService:
  DomainName: string
  DomainAddr: string
  PasswordSecretArn: string
  DomainReadOnlyUser: string
  LdapTlsCaCert: string
  LdapTlsReqCert: string
  LdapAccessFilter: string
  GenerateSshKeysForUsers: boolean
  AdditionalSssdConfigs: dict
```

[更新策略：必须停止计算实例集才能更改此设置以进行更新。](using-pcluster-update-cluster-v3.md#update-policy-compute-fleet-v3)

## `DirectoryService` 属性
<a name="DirectoryService-v3.properties"></a>

**注意**  
如果您计划 Amazon ParallelCluster 在无法访问 Internet 的单个子网中使用，[Amazon ParallelCluster 在无法访问互联网的单个子网中](aws-parallelcluster-in-a-single-public-subnet-no-internet-v3.md)请参阅了解其他要求。

`DomainName`（**必需**，`String`）  
用于指示身份信息的 Active Directory (AD) 域。  
`DomainName` 同时接受完全限定域名 (FQDN) 和 LDAP 可分辨名称 (DN) 格式。  
+ FQDN 示例：`corp.example.com`
+ LDAP DN 示例：`DC=corp,DC=example,DC=com`
此属性对应于名为 `ldap_search_base` 的 sssd-ldap 参数。  
[更新策略：必须停止计算实例集才能更改此设置以进行更新。](using-pcluster-update-cluster-v3.md#update-policy-compute-fleet-v3)

`DomainAddr`（**必需**，`String`）  
URI 或 URIs 指向用作 LDAP 服务器的 AD 域控制器。该 URI 对应于名为 `ldap_uri` 的 SSSD-LDAP 参数。该值可以是逗号分隔的字符串。 URIs要使用 LDAP，必须在每个 URI 的开头添加 `ldap://`。  
示例值：  

```
ldap://192.0.2.0,ldap://203.0.113.0          # LDAP
ldaps://192.0.2.0,ldaps://203.0.113.0        # LDAPS without support for certificate verification
ldaps://abcdef01234567890.corp.example.com  # LDAPS with support for certificate verification
192.0.2.0,203.0.113.0                        # Amazon ParallelCluster uses LDAPS by default
```
如果您使用 LDAPS 进行证书验证，则 URIs 必须是主机名。  
如果您使用 LDAPS 而不进行证书验证或 LDAP，则 URIs 可以是主机名或 IP 地址。  
使用 LDAP over TLS/SSL (LDAPS) 可避免通过未加密的通道传输密码和其他敏感信息。如果 Amazon ParallelCluster 找不到协议，它会在每个 URI 或主机名的开头添加 `ldaps://`。  
[更新策略：必须停止计算实例集才能更改此设置以进行更新。](using-pcluster-update-cluster-v3.md#update-policy-compute-fleet-v3)

`PasswordSecretArn`（**必需**，`String`）  
包含`DomainReadOnlyUser`纯文本密码的 Amazon Secrets Manager 密钥的 Amazon 资源名称 (ARN)。密钥的内容对应于名为 `ldap_default_authtok` 的 SSSD-LDAP 参数。  
使用 Amazon Secrets Manager 控制台创建密钥时，请务必选择 “其他类型的密钥”，选择纯文本，并且仅在密钥中包含密码文本。  
有关如何使用 Amazon Secrets Manager 创建密钥的更多信息，请参阅[创建 Amazon Secrets Manager 密钥](https://docs.amazonaws.cn//secretsmanager/latest/userguide/create_secret)
LDAP 客户端使用密码向 AD 域进行身份验证`DomainReadOnlyUser`，就像请求身份信息一样。  
如果用户拥有 [https://docs.amazonaws.cn/secretsmanager/latest/apireference/API_DescribeSecret.html](https://docs.amazonaws.cn/secretsmanager/latest/apireference/API_DescribeSecret.html) 的权限，则会验证 `PasswordSecretArn`。如果指定的密钥存在，则 `PasswordSecretArn` 有效。如果用户 IAM 策略不包括 `DescribeSecret`，则不验证 `PasswordSecretArn` 并显示警告消息。有关更多信息，请参阅 [基本 Amazon ParallelCluster `pcluster` 用户策略](iam-roles-in-parallelcluster-v3.md#iam-roles-in-parallelcluster-v3-base-user-policy)。  
当密钥的值发生变化时，*不会* 自动更新集群。要针对新密钥值更新集群，必须使用 [`pcluster update-compute-fleet`](pcluster.update-compute-fleet-v3.md) 命令停止计算实例集，然后从头节点内运行以下命令。  

```
$ sudo /opt/parallelcluster/scripts/directory_service/update_directory_service_password.sh
```
[更新策略：必须停止计算实例集才能更改此设置以进行更新。](using-pcluster-update-cluster-v3.md#update-policy-compute-fleet-v3)

`DomainReadOnlyUser`（**必需**，`String`）  
在对集群用户登录进行身份验证时，用于查询 AD 域以获取身份信息的身份。它对应于名为 `ldap_default_bind_dn` 的 SSSD-LDAP 参数。对此值使用您的 AD 身份信息。  
以节点上特定 LDAP 客户端要求的格式指定身份：  
+ MicrosoftAD：

  ```
  cn=ReadOnlyUser,ou=Users,ou=CORP,dc=corp,dc=example,dc=com
  ```
+ SimpleAD：

  ```
  cn=ReadOnlyUser,cn=Users,dc=corp,dc=example,dc=com
  ```
[更新策略：必须停止计算实例集才能更改此设置以进行更新。](using-pcluster-update-cluster-v3.md#update-policy-compute-fleet-v3)

`LdapTlsCaCert`（**可选**，`String`）  
证书包的绝对路径，其中包含证书链中为域控制器颁发证书的每个证书颁发机构的证书。它对应于名为 `ldap_tls_cacert` 的 SSSD-LDAP 参数。  
证书捆绑包是一个由 PEM 格式（在 Windows 中也称为 DER Base64 格式）的不同证书串联组成的文件。它用于验证充当 LDAP 服务器的 AD 域控制器的身份。  
Amazon ParallelCluster 不负责将证书初始放置到节点上。作为集群管理员，您可以在创建集群后在头节点中手动配置证书，也可以使用[引导脚本](custom-bootstrap-actions-v3.md)。或者，您可以使用包含头节点上配置的证书的亚马逊机器映像 (AMI)。  
[Simple AD](https://docs.amazonaws.cn/directoryservice/latest/admin-guide/directory_simple_ad.html) 不提供 LDAPS 支持。要了解如何将 Simple AD 目录与集成 Amazon ParallelCluster，请参阅*Amazon 安全博客*中的[如何为 Simple AD 配置 LDAPS 端点](https://www.amazonaws.cn/blogs/security/how-to-configure-ldaps-endpoint-for-simple-ad/)。  
[更新策略：必须停止计算实例集才能更改此设置以进行更新。](using-pcluster-update-cluster-v3.md#update-policy-compute-fleet-v3)

`LdapTlsReqCert`（**可选**，`String`）  
指定在 TLS 会话中对服务器证书执行哪些检查。它对应于名为 `ldap_tls_reqcert` 的 SSSD-LDAP 参数。  
有效值：`never`、`allow`、`try`、`demand` 和 `hard`。  
即使发现证书有问题，`never`、`allow` 和 `try` 也允许继续连接。  
在未发现证书问题的情况下，`demand` 和 `hard` 允许继续进行通信。  
如果集群管理员使用的值不需要证书验证成功，则会向管理员返回一条警告消息。出于安全考虑，我们建议您不要禁用证书验证。  
默认值为 `hard`。  
[更新策略：必须停止计算实例集才能更改此设置以进行更新。](using-pcluster-update-cluster-v3.md#update-policy-compute-fleet-v3)

`LdapAccessFilter`（**可选**，`String`）  
指定用于将目录访问权限限制为一部分用户的筛选器。此属性对应于名为 `ldap_access_filter` 的 SSSD-LDAP 参数。您可以使用此属性将查询限制为支持大量用户的 AD。  
此筛选器可阻止用户访问集群。但它不影响被阻止用户的可发现性。  
如果设置了此属性，则 SSSD 参数 `access_provider` 将由 Amazon ParallelCluster 在内部设置为 `ldap` 且不得被 [`DirectoryService`](#DirectoryService-v3)/[`AdditionalSssdConfigs`](#yaml-DirectoryService-AdditionalSssdConfigs) 设置修改。  
如果省略此属性且未在 [`DirectoryService`](#DirectoryService-v3)/[`AdditionalSssdConfigs`](#yaml-DirectoryService-AdditionalSssdConfigs) 中指定自定义用户访问权限，则目录中的所有用户都可以访问集群。  
示例：  

```
"!(cn=SomeUser*)"  # denies access to every user with an alias that starts with "SomeUser"
"(cn=SomeUser*)"   # allows access to every user with alias that starts with "SomeUser"
"memberOf=cn=TeamOne,ou=Users,ou=CORP,dc=corp,dc=example,dc=com" # allows access only to users in group "TeamOne".
```
[更新策略：必须停止计算实例集才能更改此设置以进行更新。](using-pcluster-update-cluster-v3.md#update-policy-compute-fleet-v3)

`GenerateSshKeysForUsers`（**可选**，`Boolean`）  
定义集群用户在头节点上进行初始身份验证后是否立即为其 Amazon ParallelCluster 生成 SSH 密钥。  
如果设置为 `true`，则每个用户在头节点上进行首次身份验证后会为其生成一个 SSH 密钥并保存到 `USER_HOME_DIRECTORY/.ssh/id_rsa`（如果不存在）。  

对于尚未在头节点上进行身份验证的用户，可能会在以下情况下进行首次身份验证：
+ 用户使用自己的密码首次登录头节点。
+ 在头节点中，sudoer 首次切换到用户：`su USERNAME`
+ 在头节点中，sudoer 首次以用户身份运行命令：`su -u USERNAME COMMAND`
之后，用户可以使用 SSH 密钥登录到集群头节点和计算节点。使用 Amazon ParallelCluster时，集群计算节点的密码登录在设计上是禁用的。如果用户未登录到头节点，则不会生成 SSH 密钥，用户将无法登录到计算节点。  
默认值为 `true`。  
[更新策略：必须停止计算实例集才能更改此设置以进行更新。](using-pcluster-update-cluster-v3.md#update-policy-compute-fleet-v3)

`AdditionalSssdConfigs`（**可选**，`Dict`）  
键值对的字典，其中包含要写入集群实例上的 SSSD 配置文件的 SSSD 参数和值。有关 SSSD 配置文件的完整描述，请参阅 `SSSD` 的 on-instance man 页面和相关配置文件。  
SSSD 参数和值必须与下表中所述 Amazon ParallelCluster的 SSSD 配置兼容。  
+ `id_provider`由`ldap`内部设置为 Amazon ParallelCluster ，不得修改。
+ `access_provider`指定 [`DirectoryService`](#DirectoryService-v3)/ Amazon ParallelCluster 时在`ldap`内部设置[`LdapAccessFilter`](#yaml-DirectoryService-LdapAccessFilter)为，且不得修改此设置。

  如果省略 [`DirectoryService`](#DirectoryService-v3)/[`LdapAccessFilter`](#yaml-DirectoryService-LdapAccessFilter)，则也将省略其指定的 `access_provider`。例如，如果您在 [`AdditionalSssdConfigs`](#yaml-DirectoryService-AdditionalSssdConfigs) 中将 `access_provider` 设置为 `simple`，则不得指定 [`DirectoryService`](#DirectoryService-v3)/[`LdapAccessFilter`](#yaml-DirectoryService-LdapAccessFilter)。
以下配置代码段是 `AdditionalSssdConfigs` 有效配置的示例。  
此示例启用 SSSD 日志的调试级别，将搜索库限制为特定的组织部门，并禁用凭证缓存。  

```
DirectoryService:
  ...
  AdditionalSssdConfigs:
    debug_level: "0xFFF0"
    ldap_search_base: OU=Users,OU=CORP,DC=corp,DC=example,DC=com
    cache_credentials: False
```
此示例指定 SSSD [https://www.mankier.com/5/sssd-simple](https://www.mankier.com/5/sssd-simple) `access_provider` 的配置。为 `EngineeringTeam` 中的用户提供了目录访问权限。在这种情况下，不得设置 [`DirectoryService`](#DirectoryService-v3)/[`LdapAccessFilter`](#yaml-DirectoryService-LdapAccessFilter)。  

```
DirectoryService:
  ...
  AdditionalSssdConfigs:
    access_provider: simple
    simple_allow_groups: EngineeringTeam
```
[更新策略：必须停止计算实例集才能更改此设置以进行更新。](using-pcluster-update-cluster-v3.md#update-policy-compute-fleet-v3)