集成 Active - Amazon ParallelCluster
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

集成 Active

在本教程中,您将创建一个多用户环境。此环境包括Amazon ParallelCluster它集成了Amazon Managed Microsoft AD(活动目录)位于corp.pcluster.com. 它配置了一个Admin用户来管理目录,一个ReadOnly用户读取目录,还有user000用户登录到群集。您可以使用自动路径或手动路径来创建网络资源、Active Directory (AD) 和用于配置 AD 的 EC2 实例。无论路径如何,您创建的基础架构都已预先配置为集成Amazon ParallelCluster使用以下任何方法:

  • 带证书验证的 LDAPS(推荐作为最安全的选项)

  • 没有证书验证的 LDAPS

  • LDAP

LDAP 本身没有提供加密。为确保潜在敏感信息的安全传输,我们强烈建议您在与 AD 集成的集群中使用 LDAPS(基于 TLS/SSL 的 LDAP)。有关更多信息,请参阅使用启用服务器端 LDAPSAmazon Managed Microsoft AD在里面Amazon Directory Service 管理指南.

创建这些资源后,您可以继续配置和创建与 AD 集成的集群。创建集群后,您以创建的用户身份登录。有关您在本教程中创建的配置的更多信息,请参阅多用户访问集群还有DirectoryService配置部分。

本教程的重点是如何创建支持多用户访问集群的环境。本教程不重点介绍如何创建和使用Amazon Directory Service广告本身。你为设置而采取的步骤Amazon Managed Microsoft AD本教程中提供的仅用于测试目的。他们不是用于替换官方文档和最佳实践,你可以在以下网址找到Amazon Managed Microsoft ADSimple AD在里面Amazon Directory Service管理指南.

先决条件

在学习本教程时,请替换inputs highlighted in red,例如region-idd-abcdef01234567890,以及您的姓名和 ID 值。将 0123456789012 替换为您的 Amazon 账号。

选择自动化选项卡以创建 Active Directory (AD) 基础架构Amazon CloudFormation快速创建模板。

选择手动选项卡手动创建 AD 基础架构。

  1. 登录Amazon Web Services Management Console

  2. 打开链接,CloudFormation 快速创建(区域 us-east-1),以在中创建以下资源 CloudFormation 控制台:

    • 具有两个子网和公有访问路由的 VPC(如果未指定 VPC)。

    • 一个 Amazon Managed Microsoft AD。

    • 已加入 AD 的 EC2 实例,可用于管理目录。

  3. 快速创建堆栈参数部分,输入以下参数的密码:

    • AdminPassword

    • ReadOnlyPassword

    • UserPassword

    对于Kekep,输入 EC2 key pair 的名称。

    请记下此密码。您将在后面的教程中用到它们。

  4. 选中复选框,确认页面底部的每项访问权限。

  5. 选择 Create stack(创建堆栈)。

  6. 之后 CloudFormation 堆栈已达到CREATE_COMPLETE州,选择输出堆栈的选项卡。记下输出资源名称和 ID,因为您需要在后续步骤中使用它们。输出提供了创建集群所需的信息:

    
         该图显示了创建的堆栈输出Amazon Web Services Management Console.
  7. 完成练习(可选)步骤 2:管理 AD 用户和群组,你需要目录 ID。选择资源然后向下滚动以记下目录 ID。

  8. 从继续(可选)步骤 2:管理 AD 用户和群组要么第 3 步:创建集群.

为目录服务创建一个 VPC,其中两个子网位于不同的可用区,并且Amazon Managed Microsoft AD.

注意
  • 目录和域名是corp.pcluster.com. 简称是CORP.

  • 更改Admin脚本中的密码。

  • 创建广告至少需要 15 分钟。

使用以下 Python 脚本在您的本地创建 VPC、子网和 AD 资源Amazon Web Services 区域. 将此文件另存为ad.py然后运行它。

import boto3 import time from pprint import pprint vpc_name = "PclusterVPC" ad_domain = "corp.pcluster.com" admin_password = "asdfASDF1234" ec2 = boto3.client("ec2") ds = boto3.client("ds") region = boto3.Session().region_name # Create the VPC, Subnets, IGW, Routes vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16")["Vpc"] vpc_id = vpc["VpcId"] time.sleep(30) ec2.create_tags(Resources=[vpc_id], Tags=[{"Key": "Name", "Value": vpc_name}]) subnet1 = ec2.create_subnet(VpcId=vpc_id, CidrBlock="10.0.0.0/17", AvailabilityZone=f"{region}a")["Subnet"] subnet1_id = subnet1["SubnetId"] time.sleep(30) ec2.create_tags(Resources=[subnet1_id], Tags=[{"Key": "Name", "Value": f"{vpc_name}/subnet1"}]) ec2.modify_subnet_attribute(SubnetId=subnet1_id, MapPublicIpOnLaunch={"Value": True}) subnet2 = ec2.create_subnet(VpcId=vpc_id, CidrBlock="10.0.128.0/17", AvailabilityZone=f"{region}b")["Subnet"] subnet2_id = subnet2["SubnetId"] time.sleep(30) ec2.create_tags(Resources=[subnet2_id], Tags=[{"Key": "Name", "Value": f"{vpc_name}/subnet2"}]) ec2.modify_subnet_attribute(SubnetId=subnet2_id, MapPublicIpOnLaunch={"Value": True}) igw = ec2.create_internet_gateway()["InternetGateway"] ec2.attach_internet_gateway(InternetGatewayId=igw["InternetGatewayId"], VpcId=vpc_id) route_table = ec2.describe_route_tables(Filters=[{"Name": "vpc-id", "Values": [vpc_id]}])["RouteTables"][0] ec2.create_route(RouteTableId=route_table["RouteTableId"], DestinationCidrBlock="0.0.0.0/0", GatewayId=igw["InternetGatewayId"]) ec2.modify_vpc_attribute(VpcId=vpc_id, EnableDnsSupport={"Value": True}) ec2.modify_vpc_attribute(VpcId=vpc_id, EnableDnsHostnames={"Value": True}) # Create the Active Directory ad = ds.create_microsoft_ad( Name=ad_domain, Password=admin_password, Description="ParallelCluster AD", VpcSettings={"VpcId": vpc_id, "SubnetIds": [subnet1_id, subnet2_id]}, Edition="Standard", ) directory_id = ad["DirectoryId"] # Wait for completion print("Waiting for the directory to be created...") directories = ds.describe_directories(DirectoryIds=[directory_id])["DirectoryDescriptions"] directory = directories[0] while directory["Stage"] in {"Requested", "Creating"}: time.sleep(3) directories = ds.describe_directories(DirectoryIds=[directory_id])["DirectoryDescriptions"] directory = directories[0] dns_ip_addrs = directory["DnsIpAddrs"] pprint({"directory_id": directory_id, "vpc_id": vpc_id, "subnet1_id": subnet1_id, "subnet2_id": subnet2_id, "dns_ip_addrs": dns_ip_addrs})

以下是 python 脚本的示例输出。

{ "directory_id": "d-abcdef01234567890", "dns_ip_addrs": ["192.0.2.254", "203.0.113.237"], "subnet1_id": "subnet-021345abcdef6789", "subnet2_id": "subnet-1234567890abcdef0", "vpc_id": "vpc-021345abcdef6789" }

请记下输出资源名称和 ID。您将在后面的步骤中用到它们。

脚本完成后,继续执行下一步。

New EC2 console
  1. 登录到 Amazon Web Services Management Console。

  2. 如果您没有附加步骤 4 中列出的策略的角色,请打开 IAM 控制台https://console.aws.amazon.com/iam/. 否则,请跳至步骤 5。

  3. 创建ResetUserPassword政策,将红色突出显示的内容替换为你的Amazon区域 ID、账户 ID 和您在创建 AD 时运行的脚本输出中的目录 ID。

    ResetUserPassword

    { "Statement": [ { "Action": [ "ds:ResetUserPassword" ], "Resource": "arn:aws:ds:region-id:123456789012:directory/d-abcdef01234567890", "Effect": "Allow" } ] }
  4. 创建附加了以下策略的 IAM 角色。

  5. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  6. EC2 Dashboard,选择启动实例.

  7. 应用程序和操作系统映像,请选择最近的Amazon Linux 2 AMI。

  8. 对于实例类型,选择 t2.micro。

  9. 对于密钥对,选择key pair。

  10. 对于网络设置,选择编辑.

  11. 对于VPC,请选择目录 VPC。

  12. 向下滚动并选择高级详细信息.

  13. 高级详细信息,域名加入目录,选择corp.pcluster.com.

  14. 对于IAM 实例配置文件,选择您在步骤 1 中创建的角色或附加了步骤 4 中列出的策略的角色。

  15. 摘要选择启动实例.

  16. 记下实例 ID(例如 i-1234567890abcdef0),然后等待实例完成启动。

  17. 在实例启动后,继续执行下一步。

Old EC2 console
  1. 登录到 Amazon Web Services Management Console。

  2. 如果您没有附加步骤 4 中列出的策略的角色,请打开 IAM 控制台https://console.aws.amazon.com/iam/. 否则,请跳至步骤 5。

  3. 创建ResetUserPassword政策,将红色突出显示的内容替换为你的Amazon区域 ID、账户 ID 和您在创建 AD 时运行的脚本输出中的目录 ID。

    ResetUserPassword

    { "Statement": [ { "Action": [ "ds:ResetUserPassword" ], "Resource": "arn:aws:ds:region-id:123456789012:directory/d-abcdef01234567890", "Effect": "Allow" } ] }
  4. 创建附加了以下策略的 IAM 角色。

  5. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  6. EC2 Dashboard,选择启动实例.

  7. 选择 AMI,Select最近的Amazon Linux 2 AMI。

  8. 对于实例类型,选择t2.micro.

  9. 选择 Next:。配置实例详细信息.

  10. 对于Network,请选择 VPC。

  11. 对于域名加入目录,选择目录。

  12. 对于IAM 角色,选择您在步骤 1 中创建的角色或附加了步骤 4 中列出的策略的角色。

  13. 选择核和启动,启动.

  14. 选择key pair。

  15. 选择 Launch Instances

  16. 记下实例 ID(例如 i-1234567890abcdef0),然后等待实例完成启动。

  17. 在实例启动后,继续执行下一步。

  1. Connect 您的实例并以身份加入 AD 领域admin

    运行以下命令以连接到实例:

    $ INSTANCE_ID="i-1234567890abcdef0"
    $ PUBLIC_IP=$(aws ec2 describe-instances \ --instance-ids $INSTANCE_ID \ --query "Reservations[0].Instances[0].PublicIpAddress" \ --output text)
    $ ssh -i ~/.ssh/keys/keypair.pem ec2-user@$PUBLIC_IP
  2. 安装必要的软件并加入这个领域。

    $ sudo yum -y install sssd realmd oddjob oddjob-mkhomedir adcli samba-common samba-common-tools krb5-workstation openldap-clients policycoreutils-python
  3. 将管理员密码替换为你的admin密码:

    $ ADMIN_PW="asdfASDF1234"
    $ echo $ADMIN_PW | sudo realm join -U Admin corp.pcluster.com Password for Admin:

    如果上述操作成功,则您将加入到领域,可以继续执行下一步。

  1. 创建 ReadOnlyUser 还有一个用户。

    在此步骤中,您将使用adcliopenLDAP 客户端您在前面的步骤中安装的工具。

    $ echo $ADMIN_PW | adcli create-user -x -U Admin --domain=corp.pcluster.com --display-name=ReadOnlyUser ReadOnlyUser
    $ echo $ADMIN_PW | adcli create-user -x -U Admin --domain=corp.pcluster.com --display-name=user000 user000
  2. 验证用户是否已创建:

    目录 DNS IP 地址是 python 脚本的输出。

    $ DIRECTORY_IP="192.0.2.254"
    $ ldapsearch -x -h $DIRECTORY_IP -D Admin -w $ADMIN_PW -b "cn=ReadOnlyUser,ou=Users,ou=CORP,dc=corp,dc=pcluster,dc=com"
    $ ldapsearch -x -h $DIRECTORY_IP -D Admin -w $ADMIN_PW -b "cn=user000,ou=Users,ou=CORP,dc=corp,dc=pcluster,dc=com"

    当您使用创建用户时ad-cli,默认情况下禁用用户。

  3. 在本地计算机上重置并激活用户密码:

    注销您的 EC2 实例。

    注意
    • ro-p@ssw0rd以下是的密码ReadOnlyUser,通过密钥管理器检索(详见下文)。

    • user-p@ssw0rd是集群用户的密码,在您连接时提供 (ssh) 到集群。

    这些区域有:directory-id是 python 脚本的输出。

    $ DIRECTORY_ID="d-abcdef01234567890"
    $ aws ds reset-user-password \ --directory-id $DIRECTORY_ID \ --user-name "ReadOnlyUser" \ --new-password "ro-p@ssw0rd" \ --region "region-id"
    $ aws ds reset-user-password \ --directory-id $DIRECTORY_ID \ --user-name "user000" \ --new-password "user-p@ssw0rd" \ --region "region-id"
  4. 将此密码添加到 Secrets Manager 密钥中。

    现在你已经创建了一个ReadOnlyUser然后设置密码,将其存储在密钥中Amazon ParallelCluster用于验证登录。

    使用 Secrets Manager 创建一个新密钥来保存密钥的密码ReadOnlyUser作为值。密钥值格式只能是文本,不能是 JSON。记下秘密 ARN 以供future 步骤使用。

    $ aws secretsmanager create-secret --name "ADSecretPassword" \ --region region_id \ --secret-string "ro-p@ssw0rd" \ --query ARN \ --output text arn:aws:secretsmanager:region-id:123456789012:secret:ADSecretPassword-1234

请记下资源 ID。您将在后面的步骤中用到它们。

  1. 在本地生成域证书:

    $ PRIVATE_KEY="corp-pcluster-com.key" CERTIFICATE="corp-pcluster-com.crt" printf ".\n.\n.\n.\n.\ncorp.pcluster.com\n.\n" | openssl req -x509 -sha256 -nodes -newkey rsa:2048 -keyout $PRIVATE_KEY -days 365 -out $CERTIFICATE
  2. 将证书存储到 Secrets Manager,以便稍后可以从集群中检索证书:

    $ aws secretsmanager create-secret --name pcluster-cert \ --secret-string file://$CERTIFICATE \ --region region-id { "ARN": "arn:aws:secretsmanager:region-id:123456789012:secret:plcuster-cert-123abc", "Name": "pcluster-cert", "VersionId": "14866070-092a-4d5a-bcdd-9219d0566b9c" }
  3. 将以下策略添加到您创建的 IAM 角色中,以便将 EC2 实例加入 AD 域。

    PutDomainCertificateSecrets

    { "Statement": [ { "Action": [ "secretsmanager:PutSecretValue" ], "Resource": [ "arn:aws:secretsmanager:region-id:123456789012:secret:plcuster-cert-123abc", ], "Effect": "Allow" } ] }
  4. 将证书导入 ACM:

    $ aws acm import-certificate --certificate fileb://$CERTIFICATE \ --private-key fileb://$PRIVATE_KEY \ --region region-id { "CertificateArn": "arn:aws:acm:region-id:123456789012:certificate/343db133-490f-4077-b8d4-3da5bfd89e72" }
  5. 创建并将放在 Active Directory 端点前面的Load Balancer:

    $ aws elbv2 create-load-balancer --name CorpPclusterCom-NLB \ --type network \ --scheme internal \ --subnets subnet-1234567890abcdef0 subnet-021345abcdef6789 \ --region region-id { "LoadBalancers": [ { "LoadBalancerArn": "arn:aws:elasticloadbalancing:region-id:123456789012:loadbalancer/net/CorpPclusterCom-NLB/3afe296bf4ba80d4", "DNSName": "CorpPclusterCom-NLB-3afe296bf4ba80d4.elb.region-id.amazonaws.com", "CanonicalHostedZoneId": "Z2IFOLAFXWLO4F", "CreatedTime": "2022-05-05T12:56:55.988000+00:00", "LoadBalancerName": "CorpPclusterCom-NLB", "Scheme": "internal", "VpcId": "vpc-021345abcdef6789", "State": { "Code": "provisioning" }, "Type": "network", "AvailabilityZones": [ { "ZoneName": "region-idb", "SubnetId": "subnet-021345abcdef6789", "LoadBalancerAddresses": [] }, { "ZoneName": "region-ida", "SubnetId": "subnet-1234567890abcdef0", "LoadBalancerAddresses": [] } ], "IpAddressType": "ipv4" } ] }
  6. 创建针对 Active Directory 端点的目标组:

    $ aws elbv2 create-target-group --name CorpPclusterCom-Targets --protocol TCP \ --port 389 \ --target-type ip \ --vpc-id vpc-021345abcdef6789 \ --region region-id { "TargetGroups": [ { "TargetGroupArn": "arn:aws:elasticloadbalancing:region-id:123456789012:targetgroup/CorpPclusterCom-Targets/44577c583b695e81", "TargetGroupName": "CorpPclusterCom-Targets", "Protocol": "TCP", "Port": 389, "VpcId": "vpc-021345abcdef6789", "HealthCheckProtocol": "TCP", "HealthCheckPort": "traffic-port", "HealthCheckEnabled": true, "HealthCheckIntervalSeconds": 30, "HealthCheckTimeoutSeconds": 10, "HealthyThresholdCount": 3, "UnhealthyThresholdCount": 3, "TargetType": "ip", "IpAddressType": "ipv4" } ] }
  7. 将 Active Directory 端点注册到目标组中:

    $ aws elbv2 register-targets --target-group-arn arn:aws:elasticloadbalancing:region-id:123456789012:targetgroup/CorpPclusterCom-Targets/44577c583b695e81 \ --targets Id=192.0.2.254,Port=389 Id=203.0.113.237,Port=389 \ --region region-id
  8. 使用证书创建 LB 监听器:

    $ aws elbv2 create-listener --load-balancer-arn arn:aws:elasticloadbalancing:region-id:123456789012:loadbalancer/net/CorpPclusterCom-NLB/3afe296bf4ba80d4 \ --protocol TLS \ --port 636 \ --default-actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:region-id:123456789012:targetgroup/CorpPclusterCom-Targets/44577c583b695e81 \ --ssl-policy ELBSecurityPolicy-TLS-1-2-2017-01 \ --certificates CertificateArn=arn:aws:acm:region-id:123456789012:certificate/343db133-490f-4077-b8d4-3da5bfd89e72 \ --region region-id "Listeners": [ { "ListenerArn": "arn:aws:elasticloadbalancing:region-id:123456789012:listener/net/CorpPclusterCom-NLB/3afe296bf4ba80d4/a8f9d97318743d4b", "LoadBalancerArn": "arn:aws:elasticloadbalancing:region-id:123456789012:loadbalancer/net/CorpPclusterCom-NLB/3afe296bf4ba80d4", "Port": 636, "Protocol": "TLS", "Certificates": [ { "CertificateArn": "arn:aws:acm:region-id:123456789012:certificate/343db133-490f-4077-b8d4-3da5bfd89e72" } ], "SslPolicy": "ELBSecurityPolicy-TLS-1-2-2017-01", "DefaultActions": [ { "Type": "forward", "TargetGroupArn": "arn:aws:elasticloadbalancing:region-id:123456789012:targetgroup/CorpPclusterCom-Targets/44577c583b695e81", "ForwardConfig": { "TargetGroups": [ { "TargetGroupArn": "arn:aws:elasticloadbalancing:region-id:123456789012:targetgroup/CorpPclusterCom-Targets/44577c583b695e81" } ] } } ] } ] }
  9. 创建托管区域以使该域可在集群 VPC 中被发现:

    $ aws route53 create-hosted-zone --name corp.pcluster.com \ --vpc VPCRegion=region-id,VPCId=vpc-021345abcdef6789 \ --caller-reference "ParallelCluster AD Tutorial" { "Location": "https://route53.amazonaws.com/2013-04-01/hostedzone/Z09020002B5MZQNXMSJUB", "HostedZone": { "Id": "/hostedzone/Z09020002B5MZQNXMSJUB", "Name": "corp.pcluster.com.", "CallerReference": "ParallelCluster AD Tutorial", "Config": { "PrivateZone": true }, "ResourceRecordSetCount": 2 }, "ChangeInfo": { "Id": "/change/C05533343BF3IKSORW1TQ", "Status": "PENDING", "SubmittedAt": "2022-05-05T13:21:53.863000+00:00" }, "VPC": { "VPCRegion": "region-id", "VPCId": "vpc-021345abcdef6789" } }
  10. 创建一个名为的文件recordset-change.json使用以下内容(请注意此HostedZoneId是Load Balancer 规范托管区域 ID):

    { "Changes": [ { "Action": "CREATE", "ResourceRecordSet": { "Name": "corp.pcluster.com", "Type": "A", "Region": "region-id", "SetIdentifier": "pcluster-active-directory", "AliasTarget": { "HostedZoneId": "Z2IFOLAFXWLO4F", "DNSName": "CorpPclusterCom-NLB-3afe296bf4ba80d4.elb.region-id.amazonaws.com", "EvaluateTargetHealth": true } } } ] }
  11. 将记录集更改提交到托管区域,这次使用托管区域 ID:

    $ aws route53 change-resource-record-sets --hosted-zone-id Z09020002B5MZQNXMSJUB \ --change-batch file://recordset-change.json { "ChangeInfo": { "Id": "/change/C0137926I56R3GC7XW2Y", "Status": "PENDING", "SubmittedAt": "2022-05-05T13:40:36.553000+00:00" } }
  12. 创建策略文档policy.json内容如下:

    { "Version": "2012-10-17", "Statement": [ { "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:region-id:123456789012:secret:pcluster-cert-abc123" ], "Effect": "Allow" } ] }
  13. 创建名为的策略文档policy.json内容如下:

    $ aws iam create-policy --policy-name ReadCertPcluster \ --policy-document file://policy.json { "Policy": { "PolicyName": "ReadCertPcluster", "PolicyId": "ANPAUUXUVBC42VZSI4LDY", "Arn": "arn:aws:iam::123456789012:policy/ReadCertPcluster-efg456", "Path": "/", "DefaultVersionId": "v1", "AttachmentCount": 0, "PermissionsBoundaryUsageCount": 0, "IsAttachable": true, "CreateDate": "2022-05-05T13:42:18+00:00", "UpdateDate": "2022-05-05T13:42:18+00:00" } }
  14. 从继续(可选)步骤 2:管理 AD 用户和群组要么第 3 步:创建集群.

在此步骤中,您将管理加入 AD 域的 EC2 Amazon Linux 2 实例中的用户和群组。

如果你关注了自动化的路径,重新启动并登录到作为自动化的一部分而创建的 AD 加入实例。

如果你关注了手册路径,重新启动并登录到您在前面的步骤中创建并加入 AD 的实例。

在这些步骤中,您可以使用adcliopenLDAP 客户端作为先前步骤的一部分安装在实例中的工具。

登录已加入 AD 域的 EC2 实例

  1. 从 EC2 控制台中,选择在前面的步骤中创建的无标题的 EC2 实例。实例状态可能是Stopped (已停止).

  2. 如果实例的状态为Stopped (已停止),选择实例状态然后启动实例.

  3. 状态检查通过后,选择实例并选择连接然后 ssh 进入实例。

登录已加入 AD 的 EC2 Amazon Linux 2 实例时管理用户和群组

这些区域有:adcli命令带有 -U "Admin"选项要求你输入 ADAdmin密码。你包括了广告Admin密码作为ldapsearch命令。

  1. 创建用户。

    $ adcli create-user "clusteruser" --domain "corp.pcluster.com" -U "Admin"
  2. 设置用户密码

    $ aws --region "region-id" ds reset-user-password --directory-id "d-abcdef01234567890" --user-name "clusteruser" --new-password "new-p@ssw0rd"
  3. 创建组。

    $ adcli create-group "clusterteam" --domain "corp.pcluster.com" -U "Admin"
  4. 将用户添加到组。

    $ adcli add-member "clusterteam" "clusteruser" --domain "corp.pcluster.com" -U "Admin"
  5. 描述用户和群组

    描述所有用户。

    $ ldapsearch "(&(objectClass=user))" -x -h "192.0.2.254" -b "DC=corp,DC=pcluster,DC=com" -D "CN=Admin,OU=Users,OU=CORP,DC=corp,DC=pcluster,DC=com" -w "p@ssw0rd"

    描述特定的用户。

    $ ldapsearch "(&(objectClass=user)(cn=clusteruser))" -x -h "192.0.2.254" -b "DC=corp,DC=pcluster,DC=com" -D "CN=Admin,OU=Users,OU=CORP,DC=corp,DC=pcluster,DC=com" -w "p@ssw0rd"

    使用命名模式描述所有用户。

    $ ldapsearch "(&(objectClass=user)(cn=user*))" -x -h "192.0.2.254" -b "DC=corp,DC=pcluster,DC=com" -D "CN=Admin,OU=Users,OU=CORP,DC=corp,DC=pcluster,DC=com" -w "p@ssw0rd"

    描述属于特定群组的所有用户。

    $ ldapsearch "(&(objectClass=user)(memberOf=CN=clusterteam,OU=Users,OU=CORP,DC=corp,DC=pcluster,DC=com))" -x -h "192.0.2.254" -b "DC=corp,DC=pcluster,DC=com" -D "CN=Admin,OU=Users,OU=CORP,DC=corp,DC=pcluster,DC=com" -w "p@ssw0rd"

    描述所有组

    $ ldapsearch "objectClass=group" -x -h "192.0.2.254" -b "DC=corp,DC=pcluster,DC=com" -D "CN=Admin,OU=Users,OU=CORP,DC=corp,DC=pcluster,DC=com" -w "p@ssw0rd"

    描述特定组

    $ ldapsearch "(&(objectClass=group)(cn=clusterteam))" -x -h "192.0.2.254" -b "DC=corp,DC=pcluster,DC=com" -D "CN=Admin,OU=Users,OU=CORP,DC=corp,DC=pcluster,DC=com" -w "p@ssw0rd"
  6. 从组中删除用户。

    $ adcli remove-member "clusterteam" "clusteruser" --domain "corp.pcluster.com" -U "Admin"
  7. 删除用户

    $ adcli delete-user "clusteruser" --domain "corp.pcluster.com" -U "Admin"
  8. 删除组。

    $ adcli delete-group "clusterteam" --domain "corp.pcluster.com" -U "Admin"

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

该环境设置为创建一个集群,该群集可以根据 AD 对用户进行身份验证。

创建简单的群集配置并提供与连接到 AD 相关的设置。想要了解更多信息,请参阅 DirectoryService 部分。

选择以下群集配置之一并将其复制到名为的文件中ldaps_config.yaml,ldaps_nocert_config.yaml,以及ldap_config.yaml分别地。

如果您选择带证书验证的 LDAPS 配置(推荐),则还必须将引导脚本复制到名为的文件中active-directory.head.post.sh然后按照配置文件中的指示将其放在 Amazon S3 存储桶中。

注意

必须更改以下组件。

  • KeyName: 您的其中一个 EC2 密钥对。

  • SubnetId / SubnetIds:输出中提供的子网 ID 之一 CloudFormation 快速创建堆栈(自动教程)或 python 脚本(手动教程)。

  • Region:您创建 AD 基础设施的区域。

  • DomainAddr: 此 IP 地址是您的 AD 服务的 DNS 地址之一。

  • PasswordSecretArn:包含密码的密钥的 ARNDomainReadOnlyUser.

  • BucketName:包含引导脚本的存储桶的名称。

  • AdditionalPolicies/Policy:读取域认证策略的 ARN ReadCertPcluster.

  • CustomActions/OnNodeConfigured/Args:保存域认证策略的密钥的 ARN。

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/ReadCertPcluster S3Access: - BucketName: my-bucket EnableWriteAccess: false KeyName: bootstrap/active-directory/active-directory.head.post.sh CustomActions: OnNodeConfigured: Script: s3://my-bucket/bootstrap/active-directory/active-directory.head.post.sh Args: - arn:aws:secretsmanager:region-id:123456789012:secret:pcluster-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.pcluster.com DomainAddr: ldaps://corp.pcluster.com PasswordSecretArn: arn:aws:secretsmanager:region-id:123456789012:secret:ADSecretPassword-1234 DomainReadOnlyUser: cn=ReadOnlyUser,ou=Users,ou=CORP,dc=corp,dc=pcluster,dc=com LdapTlsCaCert: /opt/parallelcluster/shared/directory_service/domain-certificate.crt LdapTlsReqCert: hard

引导脚本

创建引导文件后,在将其上传到 S3 存储桶之前,运行chmod +x active-directory.head.post.sh为给Amazon 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
注意

必须更改以下组件。

  • KeyName: 您的其中一个 EC2 密钥对。

  • SubnetId / SubnetIds:输出中提供的子网 ID 之一 CloudFormation 快速创建堆栈(自动教程)或 python 脚本(手动教程)。

  • Region:您创建 AD 基础设施的区域。

  • DomainAddr: 此 IP 地址是您的 AD 服务的 DNS 地址之一。

  • PasswordSecretArn:包含密码的密钥的 ARNDomainReadOnlyUser.

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.pcluster.com DomainAddr: ldaps://corp.pcluster.com PasswordSecretArn: arn:aws:secretsmanager:region-id:123456789012:secret:ADSecretPassword-1234 DomainReadOnlyUser: cn=ReadOnlyUser,ou=Users,ou=CORP,dc=corp,dc=pcluster,dc=com LdapTlsReqCert: never
注意

必须更改以下组件。

  • KeyName: 您的其中一个 EC2 密钥对。

  • SubnetId / SubnetIds:输出中提供的子网 ID 之一 CloudFormation 快速创建堆栈(自动教程)或 python 脚本(手动教程)。

  • Region:您创建 AD 基础设施的区域。

  • DomainAddr: 此 IP 地址是您的 AD 服务的 DNS 地址之一。

  • PasswordSecretArn:包含密码的密钥的 ARNDomainReadOnlyUser.

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=pcluster,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=pcluster,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.2.1, "clusterStatus": "CREATE_IN_PROGRESS" } }

您可以使用以下命令确定集群的状态:

$ pcluster describe-cluster -n ad-cluster --region "region-id" --query "clusterStatus"

输出:

"CREATE_IN_PROGRESS" / "CREATE_COMPLETE"

当状态达到时"CREATE_COMPLETE",使用创建的用户名和密码登录:

$ HEAD_NODE_IP=$(pcluster describe-cluster -n "ad-cluster" --region "region-id" --query headNode.publicIpAddress | xargs echo)
$ ssh user000@$HEAD_NODE_IP

通过提供为新用户创建的 SSH 密钥,您可以在没有密码的情况下登录/home/user000@HEAD_NODE_IP/.ssh/id_rsa.

如果ssh命令成功,您已以使用 AD 进行身份验证的用户身份成功连接到集群。

  1. 从您的本地计算机上删除集群。

    $ pcluster delete-cluster --cluster-name "ad-cluster" --region "region-id" { "cluster": { "clusterName": "ad-cluster", "cloudformationStackStatus": "DELETE_IN_PROGRESS", "cloudformationStackArn": "arn:aws:cloudformation:region-id:123456789012:stack/ad-cluster/1234567-abcd-0123-def0-abcdef0123456", "region": "region-id", "version": "3.2.1", "clusterStatus": "DELETE_IN_PROGRESS" } }
  2. 检查集群删除的状态。

    $ pcluster describe-cluster --cluster-name "ad-cluster" --region "region-id" --query "clusterStatus" "DELETE_IN_PROGRESS"

    集群删除完成后,继续执行下一步。

删除活动目录资源

  1. Fromhttps://console.aws.amazon.com/cloudformation/

  2. 选择堆栈在导航窗格中。

  3. 从堆栈列表中,选择 AD 堆栈,例如pcluster-ad.

  4. 选择 Delete(删除)。

  1. 删除 EC2 实例。

    1. Fromhttps://console.aws.amazon.com/ec2/,选择实例在导航窗格中。

    2. 从实例列表中,选择您创建的实例以将用户添加到目录中。

    3. 全新 EC2 控制台

      选择实例状态,那么终止实例.

      旧的 EC2 控制台

      选择操作,实例状态,那么终止.

  2. 删除托管区域。

    1. 创建recordset-delete.json使用以下内容(请注意此 HostedZoneId 是Load Balancer 规范托管区域 ID):

      { "Changes": [ { "Action": "DELETE", "ResourceRecordSet": { "Name": "corp.pcluster.com", "Type": "A", "Region": "region-id", "SetIdentifier": "pcluster-active-directory", "AliasTarget": { "HostedZoneId": "Z2IFOLAFXWLO4F", "DNSName": "CorpPclusterCom-NLB-3afe296bf4ba80d4.elb.region-id.amazonaws.com", "EvaluateTargetHealth": true } } } ] }
    2. 将记录集更改提交到托管区域,这次使用托管区域 ID:

      $ aws route53 change-resource-record-sets --hosted-zone-id Z09020002B5MZQNXMSJUB \ --change-batch file://recordset-delete.json { "ChangeInfo": { "Id": "/change/C04853642A0TH2TJ5NLNI", "Status": "PENDING", "SubmittedAt": "2022-05-05T14:25:51.046000+00:00" } }
    3. 删除托管区域:

      $ aws route53 delete-hosted-zone --id Z09020002B5MZQNXMSJUB { "ChangeInfo": { "Id": "/change/C0468051QFABTVHMDEG9", "Status": "PENDING", "SubmittedAt": "2022-05-05T14:26:13.814000+00:00" } }
  3. 删除 LB 监听器:

    $ aws elbv2 delete-listener \ --listener-arn arn:aws:elasticloadbalancing:region-id:123456789012:listener/net/CorpPclusterCom-NLB/3afe296bf4ba80d4/a8f9d97318743d4b --region region-id
  4. 删除目标组:

    $ aws elbv2 delete-target-group \ --target-group-arn arn:aws:elasticloadbalancing:region-id:123456789012:targetgroup/CorpPclusterCom-Targets/44577c583b695e81 --region region-id
  5. 删除Load Balancer:

    $ aws elbv2 delete-load-balancer \ --load-balancer-arn arn:aws:elasticloadbalancing:region-id:123456789012:loadbalancer/net/CorpPclusterCom-NLB/3afe296bf4ba80d4 --region region-id
  6. 删除集群用来从 Secrets Manager 读取证书的策略:

    $ aws iam delete-policy --policy-arn arn:aws:iam::123456789012:policy/ReadCertPcluster
  7. 删除包含域证书的密钥:

    $ aws secretsmanager delete-secret \ --secret-id arn:aws:secretsmanager:region-id:123456789012:secret:pcluster-cert-123abc \ --region region-id { "ARN": "arn:aws:secretsmanager:region-id:123456789012:secret:pcluster-cert-123abc", "Name": "pcluster-cert", "DeletionDate": "2022-06-04T16:27:36.183000+02:00" }
  8. 从 ACM 中删除证书:

    $ aws acm delete-certificate \ --certificate-arn arn:aws:acm:region-id:123456789012:certificate/343db133-490f-4077-b8d4-3da5bfd89e72 --region region-id
  9. 删除活动目录资源。

    1. 从 python 脚本的输出中获取以下资源 IDad.py

      • 广告编号

      • AD 子网 ID

      • AD VPC ID

    2. 删除目录:

      $ aws ds delete-directory --directory-id d-abcdef0123456789 --region region-id { "DirectoryId": "d-abcdef0123456789" }
    3. 列出 VPC 中的安全组:

      $ aws ec2 describe-security-groups --filters '[{"Name":"vpc-id","Values":["vpc-07614ade95ebad1bc"]}]' --region region-id
    4. 删除非默认安全组:

      $ aws ec2 delete-security-group --group-id sg-021345abcdef6789 --region region-id
    5. 删除子网:

      $ aws ec2 delete-subnet --subnet-id subnet-1234567890abcdef --region region-id
      $ aws ec2 delete-subnet --subnet-id subnet-021345abcdef6789 --region region-id
    6. 描述Internet Gateway:

      $ aws ec2 describe-internet-gateways \ --filters Name=attachment.vpc-id,Values=vpc-021345abcdef6789 \ --region region-id { "InternetGateways": [ { "Attachments": [ { "State": "available", "VpcId": "vpc-021345abcdef6789" } ], "InternetGatewayId": "igw-1234567890abcdef", "OwnerId": "123456789012", "Tags": [] } ] }
    7. 分离Internet Gateway:

      $ aws ec2 detach-internet-gateway \ --internet-gateway-id igw-1234567890abcdef \ --vpc-id vpc-021345abcdef6789 \ --region region-id
    8. 删除Internet Gateway:

      $ aws ec2 delete-internet-gateway \ --internet-gateway-id igw-1234567890abcdef \ --region region-id
    9. 删除 VPC:

      $ aws ec2 delete-vpc \ --vpc-id vpc-021345abcdef6789 \ --region region-id
    10. 删除包含以下内容的密钥 ReadOnlyUser 密码:

      $ aws secretsmanager delete-secret \ --secret-id arn:aws:secretsmanager:region-id:123456789012:secret:ADSecretPassword-1234" \ --region region-id