集群的多用户访问 - Amazon ParallelCluster
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

集群的多用户访问

了解如何实施和管理单个集群的多用户访问。

在本主题中,Amazon ParallelCluster 用户是指计算实例的系统用户。例如 Amazon EC2 实例的 ec2-user

目前可以使用 Amazon ParallelCluster 的所有 Amazon Web Services 区域均支持 Amazon ParallelCluster 多用户访问。它与其他 Amazon Web Services结合使用,包括适用于 Lustre 的 Amazon FSxAmazon Elastic File System

您可以使用 Amazon Directory Service for Microsoft Active DirectorySimple AD 来管理集群访问权限。请确保检查这些服务的 Amazon Web Services 区域可用性。要设置集群,请指定Amazon ParallelCluster DirectoryService配置。 Amazon Directory Service目录可以连接到多个集群。这样可以对多种环境中的身份进行集中管理,并提供统一的登录体验。

当您对 Amazon ParallelCluster 多用户访问使用 Amazon Directory Service 时,您可以使用目录中定义的用户凭证登录到集群。这些凭证包含用户名和密码。首次登录到集群后,会自动生成用户 SSH 密钥。您可以使用该密钥登录,而无需使用密码。

部署目录服务后,您可以创建、删除和修改集群的用户或组。使用 Amazon Directory Service,您可以在 Amazon Web Services Management Console中或使用 Active Directory 用户和计算机 工具执行这些操作。可从已加入 Active Directory 的任何 EC2 实例访问该工具。有关更多信息,请参阅安装 Active Directory 管理工具

如果您计划在没有互联网访问权限的单个子网中使用 Amazon ParallelCluster,请参阅无互联网访问权限的单个子网中的 Amazon ParallelCluster 以了解更多要求。

创建 Active Directory

请确保在创建集群之前创建 Active Directory (AD)。有关如何为集群选择 Active Directory 类型的信息,请参阅 Amazon Directory Service Administration Guide 中的 Which to choose

如果目录为空,请使用用户名和密码添加用户。有关更多信息,请参阅特定于 Amazon Directory Service for Microsoft Active DirectorySimple AD 的文档。

注意

Amazon ParallelCluster 要求每个 Active Directory 用户目录都位于 /home/$user 目录中。

使用 AD 域创建集群

警告

本介绍性部分介绍如何Amazon ParallelCluster通过轻型目录访问协议 (LDAP) 设置托管活动目录 (AD) 服务器。LDAP 是一种不安全的协议。对于生产系统,我们强烈建议使用 TLS 证书 (LDAPS),如下文中的基于 LDAP(S) 的 Amazon Managed Microsoft AD 集群配置示例一节所述。

通过在集群配置文件的 DirectoryService 部分指定相关信息,将您的集群配置为与目录集成。有关更多信息,请参阅 DirectoryService 配置部分。

您可以按照下面的这个示例将您的集群与基于轻型目录访问协议 (LDAP) 的 Amazon Managed Microsoft AD 集成。

基于 LDAP 的 Amazon Managed Microsoft AD 配置所需的特定定义:

获取 Amazon Managed Microsoft AD 配置数据:

$ aws ds describe-directories --directory-id "d-abcdef01234567890"
{ "DirectoryDescriptions": [ { "DirectoryId": "d-abcdef01234567890", "Name": "corp.example.com", "DnsIpAddrs": [ "203.0.113.225", "192.0.2.254" ], "VpcSettings": { "VpcId": "vpc-021345abcdef6789", "SubnetIds": [ "subnet-1234567890abcdef0", "subnet-abcdef01234567890" ], "AvailabilityZones": [ "region-idb", "region-idd" ] } } ] }

Amazon Managed Microsoft AD 的集群配置:

Region: region-id Image: Os: alinux2 HeadNode: InstanceType: t2.micro Networking: SubnetId: subnet-1234567890abcdef0 Ssh: KeyName: pcluster Scheduling: Scheduler: slurm SlurmQueues: - Name: queue1 ComputeResources: - Name: t2micro InstanceType: t2.micro MinCount: 1 MaxCount: 10 Networking: SubnetIds: - subnet-abcdef01234567890 DirectoryService: DomainName: dc=corp,dc=example,dc=com DomainAddr: ldap://203.0.113.225,ldap://192.0.2.254 PasswordSecretArn: arn:aws:secretsmanager:region-id:123456789012:secret:MicrosoftAD.Admin.Password-1234 DomainReadOnlyUser: cn=ReadOnly,ou=Users,ou=CORP,dc=corp,dc=example,dc=com AdditionalSssdConfigs: ldap_auth_disable_tls_never_use_in_production: True

要对 Simple AD 使用此配置,请在 DirectoryService 部分更改 DomainReadOnlyUser 属性值:

DirectoryService: DomainName: dc=corp,dc=example,dc=com DomainAddr: ldap://203.0.113.225,ldap://192.0.2.254 PasswordSecretArn: arn:aws:secretsmanager:region-id:123456789012:secret:SimpleAD.Admin.Password-1234 DomainReadOnlyUser: cn=ReadOnlyUser,cn=Users,dc=corp,dc=example,dc=com AdditionalSssdConfigs: ldap_auth_disable_tls_never_use_in_production: True
注意事项:
  • 我们建议您使用基于 TLS/SSL 的 LDAP(或 LDAPS)而不是单独使用 LDAP。TLS/SSL 可确保对连接加密。

  • DirectoryService/DomainAddr 属性值与 describe-directories 输出的 DnsIpAddrs 列表中的条目相匹配。

  • 我们建议集群使用的子网位于 DirectoryService/DomainAddr 指向的同一可用区内。如果您使用推荐用于目录 VPC 的自定义动态主机配置协议 (DHCP) 配置,并且您的子网DirectoryService/DomainAddr 可用区内,则可用区之间可能会出现跨区流量。使用多用户 AD 集成功能 需要使用自定义 DHCP 配置。

  • DirectoryService/DomainReadOnlyUser 属性值指定必须在目录中创建的用户。默认情况下 创建此用户。我们建议您不要 向此用户授予修改目录数据的权限。

  • DirectoryService/PasswordSecretArn 属性值指向一个 Amazon Secrets Manager 密钥,该密钥包含您为 DirectoryService/DomainReadOnlyUser 属性指定的用户的密码。如果此用户的密码发生更改,请更新密钥值并更新集群。要针对新密钥值更新集群,必须使用 pcluster update-compute-fleet 命令停止计算实例集。如果您将集群配置为使用 LoginNodes,请停止 LoginNodes/Pools 并在将 LoginNodes/Pools/Count 设置为 0 后更新集群。然后在集群头节点内运行以下命令。

    sudo /opt/parallelcluster/scripts/directory_service/update_directory_service_password.sh

有关其他示例,另请参阅集成 Active Directory

登录到与 AD 域集成的集群

如果您启用了 Active Directory (AD) 域集成功能,则会在集群头节点上启用密码身份验证。用户首次登录到头节点或 sudo-user 在头节点上首次切换到 AD 用户时,将会创建 AD 用户的主目录。

不会为集群计算节点启用密码身份验证。AD 用户必须使用 SSH 密钥登录计算节点。

默认情况下,首次 SSH 登录到头节点时,会在 AD 用户 /${HOME}/.ssh 目录中设置 SSH 密钥。通过在集群配置中将 DirectoryService/GenerateSshKeysForUsers 布尔属性设置为 false,可以禁用此行为。默认情况下,DirectoryService/GenerateSshKeysForUsers 设置为 true

如果 Amazon ParallelCluster 应用程序需要在集群节点之间使用无密码 SSH,请确保在用户的主目录中正确设置 SSH 密钥。

Amazon Managed Microsoft AD 密码会在 42 天后过期。有关更多信息,请参阅 Amazon Directory Service Administration Guide 中的 Manage password policies for Amazon Managed Microsoft AD。如果您的密码过期,则必须重置密码才能恢复集群访问权限。有关更多信息,请参阅如何重置用户密码和过期的密码

注意

如果 AD 集成功能无法正常运行,则 SSSD 日志可为问题排查提供有用的诊断信息。这些日志位于集群节点上的 /var/log/sssd 目录中。默认情况下,它们还存储在集群的 Amazon CloudWatch 日志组中。

有关更多信息,请参阅排查与 Active Directory 的多用户集成问题

运行 MPI 作业

请按照 SchedMD 中的建议,使用 Slurm 作为 MPI 引导方法来引导 MPI 作业。有关更多信息,请参阅官方 Slurm 文档或 MPI 库的官方文档。

例如,通过 IntelMPI 官方文档,您可知道在运行 StarCCM 作业时,必须通过导出环境变量 I_MPI_HYDRA_BOOTSTRAP=slurm,将 Slurm 设置为进程编排工具。

注意

已知问题

如果您的 MPI 应用程序依赖于 SSH 作为生成 MPI 作业的机制,则 Slurm 中的已知错误可能会导致将目录用户名错误地解析为“nobody”。

请将您的应用程序配置为使用 Slurm 作为 MPI 引导方法,或者参阅“问题排查”一节中的用户名解析的已知问题以了解更多详细信息以及可能的解决方法。

基于 LDAP(S) 的 Amazon Managed Microsoft AD 集群配置示例

Amazon ParallelCluster 通过与基于轻型目录访问协议 (LDAP) 或基于 TLS/SSL 上的 LDAP (LDAPS) 的 Amazon Directory Service 集成来支持多用户访问。

以下示例显示了如何创建集群配置以便与基于 LDAP(S) 的 Amazon Managed Microsoft AD 集成。

您可以使用此示例将您的集群与基于 LDAPS 的具有证书验证功能的 Amazon Managed Microsoft AD 集成。

基于 LDAPS 的具有证书验证功能的 Amazon Managed Microsoft AD 配置的特定定义:

使用基于 LDAPS 的 AD 时的集群配置文件示例:

Region: region-id Image: Os: alinux2 HeadNode: InstanceType: t2.micro Networking: SubnetId: subnet-1234567890abcdef0 Ssh: KeyName: pcluster Iam: AdditionalIamPolicies: - Policy: arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess CustomActions: OnNodeConfigured: Script: s3://aws-parallelcluster/scripts/pcluster-dub-msad-ldaps.post.sh Scheduling: Scheduler: slurm SlurmQueues: - Name: queue1 ComputeResources: - Name: t2micro InstanceType: t2.micro MinCount: 1 MaxCount: 10 Networking: SubnetIds: - subnet-abcdef01234567890 Iam: AdditionalIamPolicies: - Policy: arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess CustomActions: OnNodeConfigured: Script: s3://aws-parallelcluster-pcluster/scripts/pcluster-dub-msad-ldaps.post.sh DirectoryService: DomainName: dc=corp,dc=example,dc=com DomainAddr: ldaps://win-abcdef01234567890.corp.example.com,ldaps://win-abcdef01234567890.corp.example.com PasswordSecretArn: arn:aws:secretsmanager:region-id:123456789012:secret:MicrosoftAD.Admin.Password-1234 DomainReadOnlyUser: cn=ReadOnly,ou=Users,ou=CORP,dc=corp,dc=example,dc=com LdapTlsCaCert: /etc/openldap/cacerts/corp.example.com.bundleca.cer LdapTlsReqCert: hard

在安装后脚本中添加证书并配置域控制器:

*#!/bin/bash* set -e AD_CERTIFICATE_S3_URI="s3://corp.example.com/bundle/corp.example.com.bundleca.cer" AD_CERTIFICATE_LOCAL="/etc/openldap/cacerts/corp.example.com.bundleca.cer" AD_HOSTNAME_1="win-abcdef01234567890.corp.example.com" AD_IP_1="192.0.2.254" AD_HOSTNAME_2="win-abcdef01234567890.corp.example.com" AD_IP_2="203.0.113.225" # Download CA certificate mkdir -p $(dirname "${AD_CERTIFICATE_LOCAL}") aws s3 cp "${AD_CERTIFICATE_S3_URI}" "${AD_CERTIFICATE_LOCAL}" chmod 644 "${AD_CERTIFICATE_LOCAL}" # Configure domain controllers reachability echo "${AD_IP_1} ${AD_HOSTNAME_1}" >> /etc/hosts echo "${AD_IP_2} ${AD_HOSTNAME_2}" >> /etc/hosts

您可以从加入域的实例中检索域控制器主机名,如以下示例所示。

来自 Windows 实例

$ nslookup 192.0.2.254
Server: corp.example.com Address: 192.0.2.254 Name: win-abcdef01234567890.corp.example.com Address: 192.0.2.254

来自 Linux 实例

$ nslookup 192.0.2.254
192.0.2.254.in-addr.arpa name = corp.example.com 192.0.2.254.in-addr.arpa name = win-abcdef01234567890.corp.example.com

您可以使用此示例将您的集群与基于 LDAPS 的没有证书验证功能的 Amazon Managed Microsoft AD 集成。

基于 LDAPS 的没有证书验证功能的 Amazon Managed Microsoft AD 配置的特定定义:

使用基于 LDAPS 的无证书验证功能的 Amazon Managed Microsoft AD 时的集群配置文件示例:

Region: region-id Image: Os: alinux2 HeadNode: InstanceType: t2.micro Networking: SubnetId: subnet-1234567890abcdef0 Ssh: KeyName: pcluster Scheduling: Scheduler: slurm SlurmQueues: - Name: queue1 ComputeResources: - Name: t2micro InstanceType: t2.micro MinCount: 1 MaxCount: 10 Networking: SubnetIds: - subnet-abcdef01234567890 DirectoryService: DomainName: dc=corp,dc=example,dc=com DomainAddr: ldaps://203.0.113.225,ldaps://192.0.2.254 PasswordSecretArn: arn:aws:secretsmanager:region-id:123456789012:secret:MicrosoftAD.Admin.Password-1234 DomainReadOnlyUser: cn=ReadOnly,ou=Users,ou=CORP,dc=corp,dc=example,dc=com LdapTlsReqCert: never