本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
集群的多用户访问
了解如何实施和管理单个集群的多用户访问。
在本主题中,Amazon ParallelCluster 用户是指计算实例的系统用户。例如 Amazon EC2 实例的 ec2-user
。
目前可以使用 Amazon ParallelCluster 的所有 Amazon Web Services 区域均支持 Amazon ParallelCluster 多用户访问。它与其他 Amazon Web Services结合使用,包括适用于 Lustre 的 Amazon FSx 和 Amazon Elastic File System。
您可以使用 Amazon Directory Service for Microsoft Active Directory 或 Simple 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 Directory 或 Simple 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 配置所需的特定定义:
-
必须在 DirectoryService/AdditionalSssdConfigs 下面将
ldap_auth_disable_tls_never_use_in_production
参数设置为True
。 -
您可以为 DirectoryService/DomainAddr 指定控制器主机名或 IP 地址。
-
DirectoryService/DomainReadOnlyUser 语法必须如下所示:
cn=ReadOnly,ou=Users,ou=CORP,dc=
corp
,dc=example
,dc=com
获取 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 文档
例如,通过 IntelMPI 官方文档I_MPI_HYDRA_BOOTSTRAP=slurm
,将 Slurm 设置为进程编排工具。
注意
已知问题
如果您的 MPI 应用程序依赖于 SSH 作为生成 MPI 作业的机制,则 Slurm 中的已知错误
请将您的应用程序配置为使用 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,必须将 DirectoryService/LdapTlsReqCert 设置为
hard
(默认值)。 -
DirectoryService/LdapTlsCaCert 必须指定您的证书颁发机构 (CA) 证书的路径。
CA 证书是一个证书捆绑包,其中包含为 AD 域控制器颁发证书的整个 CA 链的证书。
您的 CA 证书必须安装在集群节点上。
-
必须为 DirectoryService/DomainAddr 指定控制器主机名,而不是 IP 地址。
-
DirectoryService/DomainReadOnlyUser 语法必须如下所示:
cn=ReadOnly,ou=Users,ou=CORP,dc=
corp
,dc=example
,dc=com
使用基于 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 配置的特定定义:
-
必须将 DirectoryService/LdapTlsReqCert 设置为
never
。 -
可以为 DirectoryService/DomainAddr 指定控制器主机名或 IP 地址。
-
DirectoryService/DomainReadOnlyUser 语法必须如下所示:
cn=ReadOnly,ou=Users,ou=CORP,dc=
corp
,dc=example
,dc=com
使用基于 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