

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

# 创建集群
<a name="tutorials_05_multi-user-ad-step3"></a>

如果您尚未退出 Amazon EC2 实例，请立即退出。

设置该环境是为了创建可以针对 Active Directory (AD) 对用户进行身份验证的集群。

创建简单的集群配置并提供与连接到 AD 相关的设置。想要了解更多信息，请参阅[`DirectoryService`](DirectoryService-v3.md)部分。

选择以下集群配置之一，然后将其复制到名为 `ldaps_config.yaml`、`ldaps_nocert_config.yaml` 或 `ldap_config.yaml` 的文件中。

建议您选择具有证书验证功能的 LDAPS 配置。如果选择此配置，则还必须将引导脚本复制到名为 `active-directory.head.post.sh` 的文件中。此外，您必须将其存储在配置文件中指示的 Amazon S3 存储桶中。

## 具有证书验证功能的 LDAPS 配置（推荐）
<a name="tutorials_05_multi-user-ad-step3-ldaps"></a>

**注意**  
`KeyName`：您的一个 Amazon EC2 密钥对。
`SubnetId / SubnetIds`： CloudFormation 快速创建堆栈（自动教程）或 python 脚本（手动教程）输出中 IDs 提供的子网之一。
`Region`：您在其中创建 AD 基础架构的区域。
`DomainAddr`：此 IP 地址是您的 AD 服务的 DNS 地址之一。
`PasswordSecretArn`：包含 `DomainReadOnlyUser` 密码的密钥的 Amazon 资源名称 (ARN)。
`BucketName`：保存引导脚本的存储桶的名称。
`AdditionalPolicies`/`Policy`：读取域名认证政策的亚马逊资源名称 (ARN)。 ReadCertExample
`CustomActions`/`OnNodeConfigured`/`Args`：保存域名认证策略的密钥的 Amazon 资源名称 (ARN)。
为了提高安全性，我们建议使用 `HeadNode`/`Ssh`/`AllowedIps` 配置来限制对头节点的 SSH 访问。  
请注意，中指定的证书`LdapTlsCaCert`必须可供所有群集节点访问。

**硬性要求**  
中指定的证书`LdapTlsCaCert`必须可供所有群集节点访问。  
无法访问证书的节点将无法解析目录中的用户。

```
Region: region-id
Image:
  Os: alinux2
HeadNode: 
  InstanceType: t2.micro
  Networking:
    SubnetId: subnet-abcdef01234567890
  Ssh:
    KeyName: keypair
  Iam:
    AdditionalIamPolicies:
      - Policy: arn:aws:iam::123456789012:policy/ReadCertExample
    S3Access:
      - BucketName: amzn-s3-demo-bucket
        EnableWriteAccess: false
        KeyName: bootstrap/active-directory/active-directory.head.post.sh
  CustomActions:
    OnNodeConfigured:
      Script: s3://amzn-s3-demo-bucket/bootstrap/active-directory/active-directory.head.post.sh
      Args:
        - arn:aws:secretsmanager:region-id:123456789012:secret:example-cert-123abc
        - /opt/parallelcluster/shared/directory_service/domain-certificate.crt
Scheduling:
  Scheduler: slurm
  SlurmQueues:
    - Name: queue0
      ComputeResources:
        - Name: queue0-t2-micro
          InstanceType: t2.micro
          MinCount: 1
          MaxCount: 10         
      Networking:
        SubnetIds:
          - subnet-abcdef01234567890
DirectoryService:
  DomainName: corp.example.com
  DomainAddr: ldaps://corp.example.com
  PasswordSecretArn: arn:aws:secretsmanager:region-id:123456789012:secret:ADSecretPassword-1234
  DomainReadOnlyUser: cn=ReadOnlyUser,ou=Users,ou=CORP,dc=corp,dc=example,dc=com
  LdapTlsCaCert: /opt/parallelcluster/shared/directory_service/domain-certificate.crt
  LdapTlsReqCert: hard
```

**引导脚本**

创建引导程序文件后，在将其上传到 S3 存储桶之前，请运行`chmod +x active-directory.head.post.sh`以授予 AWS ParallelCluster 运行权限。

```
#!/bin/bash
set -e

CERTIFICATE_SECRET_ARN="$1"
CERTIFICATE_PATH="$2"

[[ -z $CERTIFICATE_SECRET_ARN ]] && echo "[ERROR] Missing CERTIFICATE_SECRET_ARN" && exit 1
[[ -z $CERTIFICATE_PATH ]] && echo "[ERROR] Missing CERTIFICATE_PATH" && exit 1

source /etc/parallelcluster/cfnconfig
REGION="${cfn_region:?}"

mkdir -p $(dirname $CERTIFICATE_PATH)
aws secretsmanager get-secret-value --region $REGION --secret-id $CERTIFICATE_SECRET_ARN --query SecretString --output text > $CERTIFICATE_PATH
```

## 没有证书验证功能的 LDAPS 配置
<a name="tutorials_05_multi-user-ad-step3-ldaps-no-cert"></a>

**注意**  
`KeyName`：您的一个 Amazon EC2 密钥对。
`SubnetId / SubnetIds`： CloudFormation 快速创建堆栈（自动教程）或 python 脚本（手动教程）输出中的子网 IDs 之一。
`Region`：您在其中创建 AD 基础架构的区域。
`DomainAddr`：此 IP 地址是您的 AD 服务的 DNS 地址之一。
`PasswordSecretArn`：包含 `DomainReadOnlyUser` 密码的密钥的 Amazon 资源名称 (ARN)。
为了更好的安全状况，我们建议使用 HeadNode /Ssh/ AllowedIps 配置来限制对头节点的 SSH 访问。

```
Region: region-id
Image:
  Os: alinux2
HeadNode: 
  InstanceType: t2.micro
  Networking:
    SubnetId: subnet-abcdef01234567890
  Ssh:
    KeyName: keypair
Scheduling:
  Scheduler: slurm
  SlurmQueues:
    - Name: queue0
      ComputeResources:
        - Name: queue0-t2-micro
          InstanceType: t2.micro
          MinCount: 1
          MaxCount: 10         
      Networking:
        SubnetIds:
          - subnet-abcdef01234567890
DirectoryService:
  DomainName: corp.example.com
  DomainAddr: ldaps://corp.example.com
  PasswordSecretArn: arn:aws:secretsmanager:region-id:123456789012:secret:ADSecretPassword-1234
  DomainReadOnlyUser: cn=ReadOnlyUser,ou=Users,ou=CORP,dc=corp,dc=example,dc=com
  LdapTlsReqCert: never
```

## LDAP 配置
<a name="tutorials_05_multi-user-ad-step3-ldap"></a>

**注意**  
`KeyName`：您的一个 Amazon EC2 密钥对。
`SubnetId / SubnetIds`： CloudFormation 快速创建堆栈（自动教程）或 python 脚本（手动教程）输出中 IDs 提供的子网之一。
`Region`：您在其中创建 AD 基础架构的区域。
`DomainAddr`：此 IP 地址是您的 AD 服务的 DNS 地址之一。
`PasswordSecretArn`：包含 `DomainReadOnlyUser` 密码的密钥的 Amazon 资源名称 (ARN)。
为了更好的安全状况，我们建议使用 HeadNode /Ssh/ AllowedIps 配置来限制对头节点的 SSH 访问。

```
Region: region-id
Image:
  Os: alinux2
HeadNode: 
  InstanceType: t2.micro
  Networking:
    SubnetId: subnet-abcdef01234567890
  Ssh:
    KeyName: keypair
Scheduling:
  Scheduler: slurm
  SlurmQueues:
    - Name: queue0
      ComputeResources:
        - Name: queue0-t2-micro
          InstanceType: t2.micro
          MinCount: 1
          MaxCount: 10         
      Networking:
        SubnetIds:
          - subnet-abcdef01234567890
DirectoryService:
  DomainName: dc=corp,dc=example,dc=com
  DomainAddr: ldap://192.0.2.254,ldap://203.0.113.237
  PasswordSecretArn: arn:aws:secretsmanager:region-id:123456789012:secret:ADSecretPassword-1234
  DomainReadOnlyUser: cn=ReadOnlyUser,ou=Users,ou=CORP,dc=corp,dc=example,dc=com
  AdditionalSssdConfigs:
    ldap_auth_disable_tls_never_use_in_production: True
```

使用以下命令创建集群。

```
$ pcluster create-cluster --cluster-name "ad-cluster" --cluster-configuration "./ldaps_config.yaml"
{
  "cluster": {
    "clusterName": "pcluster",
    "cloudformationStackStatus": "CREATE_IN_PROGRESS",
    "cloudformationStackArn": "arn:aws:cloudformation:region-id:123456789012:stack/ad-cluster/1234567-abcd-0123-def0-abcdef0123456",
    "region": "region-id",
    "version": 3.15.0,
    "clusterStatus": "CREATE_IN_PROGRESS"
  }
}
```