整合作用中目錄 - AWS ParallelCluster

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

整合作用中目錄

在本自學課程中,您將建立多重使用者環境。此環境包括一 AWS ParallelCluster 個與 AWS Managed Microsoft AD (活動目錄)在集成的corp.example.com。您可以設定Admin使用者來管理目錄、讀取目錄的ReadOnly使user000用者,以及登入叢集的使用者。您可以使用自動化路徑或手動路徑來建立聯網資源、作用中目錄 (AD) 和用於設定 AD 的 Amazon EC2 執行個體。無論路徑為何,您建立的基礎結構都會預先設定為 AWS ParallelCluster 使用下列其中一種方法進行整合:

  • 具有證書驗證的 LDAPS(建議作為最安全的選項)

  • 無需驗證憑證的 LDAPS

  • LDAP

LDAP 本身提供加密。為了確保可能敏感資訊的安全傳輸,我們強烈建議您針對與 AD 整合的叢集使用 LDAPS (透過 TLS/SSL 的 LDAP)。如需詳細資訊,請參閱《 AWS Directory Service 管理指南》 AWS Managed Microsoft AD中的使用啟用伺服器端 LDAPS

建立這些資源之後,請繼續設定並建立與您的 Active Directory (AD) 整合的叢集。建立叢集之後,請以您建立的使用者身分登入。若要取得有關在此自學課程中建立之規劃的更多資訊,請參閱多個使用者存取叢集DirectoryService規劃〉一節。

本教學課程介紹如何建立支援多個使用者存取叢集的環境。本教學課程不涵蓋如何建立和使用 AWS Directory Service AD。您 AWS Managed Microsoft AD 在本自學課程中設置所採取的步驟僅用於測試目的。它們不是為了取代官方文檔和最佳實踐,您可以在AWS Directory Service 管理指南AWS Managed Microsoft AD和 S imple AD 中找到。

注意

目錄使用者密碼會根據目錄密碼原則內容定義而過期。有關詳情,請參閱支援的策略設定。若要使用重設目錄密碼 AWS ParallelCluster,請參閱如何重置用戶密碼和過期的密碼

注意

目錄網域控制站 IP 位址可能會因為網域控制站變更和目錄維護而變更。如果您選擇自動化的快速建立方法來建立目錄基礎結構,則必須在目錄 IP 位址變更時,手動對齊目錄控制器前面的負載平衡器。如果您使用快速建立方法,目錄 IP 位址不會自動與負載平衡器對齊。

使用命 AWS ParallelCluster 令列介面 (CLI) 或 API 時,您只需為建立或更新 AWS ParallelCluster 映像和叢集時建立的 AWS 資源付費。如需詳細資訊,請參閱 AWS 使用的服務 AWS ParallelCluster

AWS ParallelCluster UI 建立在無伺服器架構上,在大多數情況下,您可以在 AWS 免費方案類別中使用它。如需詳細資訊,請參閱 AWS ParallelClusterUI 成本

必要條件

當您瀏覽本教學課程時,請以您自己的名稱region-id和 ID 取代 inputs highlighted in redd-abcdef01234567890,例如和。0123456789012用您的 AWS 帳戶 號碼替換。

選擇 [自動化] 索引標籤以建立具有 AWS CloudFormation 快速建立範本的 Active Directory (AD) 基礎結構。

選擇 [動] 索引標籤以手動建立 AD 基礎結構。

  1. 登入 AWS Management Console。

  2. 開啟「CloudFormation 快速建立」(區域 us-east-1),在主控台中建立下列資源: CloudFormation

    • 具有兩個子網路的 VPC 並路由供公用存取 (如果未指定 VPC)。

    • 一個 AWS Managed Microsoft AD.

    • 加入 AD 的 Amazon EC2 執行個體,您可以用來管理目錄。

  3. 快速建立堆疊頁面「參數」段落中,輸入下列參數的密碼:

    • AdminPassword

    • ReadOnlyPassword

    • UserPassword

    記下密碼。您稍後在本自學課程中使用它們。

  4. 針對 DomainName,請輸入 corp.example.com

  5. key pair 中,輸入 Amazon EC2 金鑰配對的名稱。

  6. 核取方塊以確認頁面底部的每個存取功能。

  7. 選擇建立堆疊

  8. CloudFormation 堆疊到達CREATE_COMPLETE狀態後,選擇堆疊的「輸出」索引標籤。記下輸出資源名稱和 ID,因為您需要在後面的步驟中使用它們。輸出提供建立叢集所需的資訊。

    顯示在中建立的堆疊輸出的圖 AWS Management Console。
  9. 若要完成練習(選擇性) 步驟 2:管理 AD 使用者和群組,您需要目錄 ID。選擇資源並向下捲動以記下目錄 ID。

  10. (選擇性) 步驟 2:管理 AD 使用者和群組或繼續步驟 3:建立叢集

為目錄服務建立 VPC,其中包含兩個子網路位於不同可用區域和. AWS Managed Microsoft AD

注意
  • 目錄和網域名稱為corp.example.com。簡短名稱是CORP

  • 變更指令Admin碼中的密碼。

  • 活動目錄(AD)至少需要 15 分鐘才能創建。

使用下列 Python 指令碼在本機中建立 VPC、子網路和 AD 資源。 AWS 區域將此文件另存為ad.py並運行它。

import boto3 import time from pprint import pprint vpc_name = "PclusterVPC" ad_domain = "corp.example.com" admin_password = "asdfASDF1234" Amazon 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 Amazon EC2 console
  1. 登入 AWS Management Console。

  2. 如果您沒有附加步驟 4 中列出的政策的角色,請在 https://console.aws.amazon.com/iam/ 開啟 IAM 主控台。否則,請跳至步驟 5。

  3. 建立ResetUserPassword政策,將紅色反白顯示的內容取代為您的 AWS 區域 ID、帳戶 ID 和您執行建立 AD 之指令碼輸出的目錄 ID。

    ResetUserPassword

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

    • AWS 亞馬遜管理策略 ManagedInstanceCore

    • AWS 亞馬遜管理策略 DirectoryServiceAccess

    • ResetUserPassword 政策

  5. 前往 https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

  6. Amazon EC2 儀表板中,選擇啟動執行個體

  7. 應用程式和作業系統映像中,選取最近使用的 Amazon Linux 2 AMI。

  8. 在「執行個體類型」中,選擇「t2.micro」。

  9. key pair 中,選擇金鑰配對。

  10. 針對網路設定,選擇編輯

  11. 對於 VPC,請選取目錄 VPC。

  12. 向下滾動並選擇高級詳細信息

  13. 在 [進階詳細資料] 中,選擇 [corp.example.com網域加入目錄]

  14. 對於 IAM 執行個體設定檔,請選擇您在步驟 1 中建立的角色,或選擇附加步驟 4 中列出政策的角色。

  15. 摘要中選擇啟動實例

  16. 記下執行個體識別碼 (例如 i-1234567890abcdef0),然後等待執行個體完成啟動。

  17. 執行個體啟動後,請繼續進行下一個步驟。

Old Amazon EC2 console
  1. 登入 AWS Management Console。

  2. 如果您沒有附加步驟 4 中列出的政策的角色,請在 https://console.aws.amazon.com/iam/ 開啟 IAM 主控台。否則,請跳至步驟 5。

  3. 建立ResetUserPassword策略。將紅色反白顯示的內容替換為您的 AWS 區域 AWS 帳戶 ID,ID 和目錄 ID,從您運行以創建活動目錄(AD)的腳本的輸出中。

    ResetUserPassword

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

    • AWS 亞馬遜管理策略 ManagedInstanceCore

    • AWS 亞馬遜管理策略 DirectoryServiceAccess

    • ResetUserPassword 政策

  5. 前往 https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

  6. Amazon EC2 儀表板中,選擇啟動執行個體

  7. 應用程式和作業系統映像中,選取最近使用的 Amazon Linux 2 AMI。

  8. 對於 Instance type (執行個體類型),選擇 t2.micro。

  9. key pair 中,選擇金鑰配對。

  10. 網路設定中,選擇編輯

  11. 在 [網路設定] 的 [VPC] 中,選取目錄 VPC。

  12. 向下滾動並選擇高級詳細信息

  13. 在 [進階詳細資料] 中,選擇 [corp.example.com網域加入目錄]

  14. 在 [進階詳細資料] 的 [執行個體] 設定檔中,選擇您在步驟 1 中建立的角色,或選擇附加步驟 4 中所列原則的角色。

  15. 摘要中選擇啟動實例

  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.example.com Password for Admin:

    如果上述項目已成功,表示您已加入範圍,並且可以繼續進行下一個步驟。

  1. 建立 ReadOnlyUser 和其他使用者。

    在此步驟中,您可以使用在上一個步驟中安裝的 adcliopenldapm 用戶端工具。

    $ echo $ADMIN_PW | adcli create-user -x -U Admin --domain=corp.example.com --display-name=ReadOnlyUser ReadOnlyUser
    $ echo $ADMIN_PW | adcli create-user -x -U Admin --domain=corp.example.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=example,dc=com"
    $ ldapsearch -x -h $DIRECTORY_IP -D Admin -w $ADMIN_PW -b "cn=user000,ou=Users,ou=CORP,dc=corp,dc=example,dc=com"

    依預設,當您使用建立使用者時ad-cli,會停用該使用者。

  3. 從本機電腦重設並啟用使用者密碼:

    登出您的亞馬遜 EC2 執行個體。

    注意
    • ro-p@ssw0rd是的密碼ReadOnlyUser,從中擷取 AWS Secrets Manager。

    • user-p@ssw0rd是您 connect (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並設定密碼,請將密碼儲存在 AWS 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-example-com.key" CERTIFICATE="corp-example-com.crt" printf ".\n.\n.\n.\n.\ncorp.example.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 example-cert \ --secret-string file://$CERTIFICATE \ --region region-id { "ARN": "arn:aws:secretsmanager:region-id:123456789012:secret:example-cert-123abc", "Name": "example-cert", "VersionId": "14866070-092a-4d5a-bcdd-9219d0566b9c" }
  3. 將下列政策新增至您為將 Amazon EC2 執行個體加入 AD 網域而建立的 IAM 角色。

    PutDomainCertificateSecrets

    { "Statement": [ { "Action": [ "secretsmanager:PutSecretValue" ], "Resource": [ "arn:aws:secretsmanager:region-id:123456789012:secret:example-cert-123abc", ], "Effect": "Allow" } ] }
  4. 將憑證匯入至 AWS Certificate Manager (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. 建立和放在作用中目錄端點前面的負載平衡器。
    $ aws elbv2 create-load-balancer --name CorpExampleCom-NLB \ --type network \ --scheme internal \ --subnets subnet-1234567890abcdef0 subnet-021345abcdef6789 \ --region region-id { "LoadBalancers": [ { "LoadBalancerArn": "arn:aws:elasticloadbalancing:region-id:123456789012:loadbalancer/net/CorpExampleCom-NLB/3afe296bf4ba80d4", "DNSName": "CorpExampleCom-NLB-3afe296bf4ba80d4.elb.region-id.amazonaws.com", "CanonicalHostedZoneId": "Z2IFOLAFXWLO4F", "CreatedTime": "2022-05-05T12:56:55.988000+00:00", "LoadBalancerName": "CorpExampleCom-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. 建立以作用中目錄端點為目標的目標群組。
    $ aws elbv2 create-target-group --name CorpExampleCom-Targets --protocol TCP \ --port 389 \ --target-type ip \ --vpc-id vpc-021345abcdef6789 \ --region region-id { "TargetGroups": [ { "TargetGroupArn": "arn:aws:elasticloadbalancing:region-id:123456789012:targetgroup/CorpExampleCom-Targets/44577c583b695e81", "TargetGroupName": "CorpExampleCom-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. 將作用中目錄 (AD) 端點註冊到目標群組中。
    $ aws elbv2 register-targets --target-group-arn arn:aws:elasticloadbalancing:region-id:123456789012:targetgroup/CorpExampleCom-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/CorpExampleCom-NLB/3afe296bf4ba80d4 \ --protocol TLS \ --port 636 \ --default-actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:region-id:123456789012:targetgroup/CorpExampleCom-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/CorpExampleCom-NLB/3afe296bf4ba80d4/a8f9d97318743d4b", "LoadBalancerArn": "arn:aws:elasticloadbalancing:region-id:123456789012:loadbalancer/net/CorpExampleCom-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/CorpExampleCom-Targets/44577c583b695e81", "ForwardConfig": { "TargetGroups": [ { "TargetGroupArn": "arn:aws:elasticloadbalancing:region-id:123456789012:targetgroup/CorpExampleCom-Targets/44577c583b695e81" } ] } } ] } ] }
  9. 建立託管區域,使網域在叢集 VPC 中可搜尋。
    $ aws route53 create-hosted-zone --name corp.example.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.example.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是負載平衡器的標準託管區域 ID。
    { "Changes": [ { "Action": "CREATE", "ResourceRecordSet": { "Name": "corp.example.com", "Type": "A", "Region": "region-id", "SetIdentifier": "example-active-directory", "AliasTarget": { "HostedZoneId": "Z2IFOLAFXWLO4F", "DNSName": "CorpExampleCom-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:example-cert-abc123" ], "Effect": "Allow" } ] }
  13. 建立以下列內容命名policy.json的政策文件。
    $ aws iam create-policy --policy-name ReadCertExample \ --policy-document file://policy.json { "Policy": { "PolicyName": "ReadCertExample", "PolicyId": "ANPAUUXUVBC42VZSI4LDY", "Arn": "arn:aws:iam::123456789012:policy/ReadCertExample-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) 網域的 Amazon EC2 Amazon Linux 2 執行個體管理使用者和群組。

如果您遵循自動化路徑,請重新啟動並登入做為自動化操作一部分建立的 AD 加入執行個體。

如果您遵循手動路徑,請在上述步驟中重新啟動並登入您建立並加入 AD 的執行個體。

在這些步驟中,您可以使用安裝在執行個體中的 adcliopenldap-client 用戶端工具做為上述步驟的一部分。

登入已加入 AD 網域的 Amazon EC2 執行個體
  1. 在 Amazon EC2 主控台中,選取在先前步驟中建立的無標題 Amazon EC2 執行個體。執行個體狀態可能為 [已停止]。

  2. 如果執行個體狀態為 [已停止],請選擇 [執行個體狀態],然選擇

  3. 通過狀態檢查之後,請選取執行個體,然後選擇 [Connect],然後SSH在執行個體中選擇。

在登入已加入 AD 的 Amazon EC2 Linux 2 執行個體時管理使用者和群組

當您使用 -U "Admin"選項執行adcli命令時,系統會提示您輸入 AD Admin 密碼。您可以將 AD Admin 密碼納入命ldapsearch令中。

  1. 建立使用者。
    $ adcli create-user "clusteruser" --domain "corp.example.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.example.com" -U "Admin"
  4. 將使用者新增至群組。
    $ adcli add-member "clusterteam" "clusteruser" --domain "corp.example.com" -U "Admin"
  5. 描述使用者和群組。

    描述所有使用者。

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

    描述特定使用者。

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

    使用名稱模式描述所有使用者。

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

    描述屬於特定群組的所有使用者。

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

    描述所有群組

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

    描述特定群組

    $ ldapsearch "(&(objectClass=group)(cn=clusterteam))" -x -h "192.0.2.254" -b "DC=corp,DC=example,DC=com" -D "CN=Admin,OU=Users,OU=CORP,DC=corp,DC=example,DC=com" -w "p@ssw0rd"
  6. 從群組中移除使用者。
    $ adcli remove-member "clusterteam" "clusteruser" --domain "corp.example.com" -U "Admin"
  7. 刪除使用者。
    $ adcli delete-user "clusteruser" --domain "corp.example.com" -U "Admin"
  8. 刪除群組。
    $ adcli delete-group "clusterteam" --domain "corp.example.com" -U "Admin"

如果您尚未結束 Amazon EC2 執行個體,請立即執行。

此環境設定為建立可以根據使用中目錄 (AD) 驗證使用者的叢集。

建立簡單的叢集配置,並提供與連線至 AD 相關的設定。如需詳細資訊,請參閱 DirectoryService 一節。

選擇下列其中一個叢集配置,並將其複製到名為ldaps_config.yamlldaps_nocert_config.yaml、或的檔案中ldap_config.yaml

我們建議您選擇含有憑證驗證的 LDAPS 組態。如果您選擇此組態,您也必須將啟動程序指令碼複製到名為的檔案active-directory.head.post.sh。此外,您必須將其存放在 Amazon S3 儲存貯體中,如組態檔中所示。

注意
必須變更下列元件。
  • KeyName:您的一個 Amazon EC2 密鑰對。

  • SubnetId / SubnetIds: CloudFormation 快速建立堆疊 (自動化教學課程) 或 python 指令碼 (手動教學課程) 輸出中提供的其中一個子網路 ID。

  • Region:您建立 AD 基礎結構的區域。

  • DomainAddr:此 IP 位址是您廣告服務的其中一個 DNS 位址。

  • PasswordSecretArn:包含的密碼的 Amazon 資源名稱(ARN)的密碼。DomainReadOnlyUser

  • BucketName:包含啟動程序指令碼的值區名稱。

  • AdditionalPolicies/Policy:讀取域認證政策 ReadCertExample的 Amazon 資源名稱(ARN)。

  • CustomActions/OnNodeConfigured/Args:保存域認證政策的秘密的 Amazon 資源名稱(ARN)。

為了獲得更好的安全狀態,我們建議使用 HeadNodeSsh//AllowedIps配置來限制對頭節點的 SSH 訪問。

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: 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: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
注意
必須變更下列元件。
  • KeyName:您的一個 Amazon EC2 密鑰對。

  • SubnetId / SubnetIds: CloudFormation 快速建立堆疊 (自動化教學課程) 或 python 指令碼 (手動教學課程) 輸出中的其中一個子網 ID。

  • Region:您建立 AD 基礎結構的區域。

  • DomainAddr:此 IP 位址是您廣告服務的其中一個 DNS 位址。

  • PasswordSecretArn:包含的密碼的 Amazon 資源名稱(ARN)的密碼。DomainReadOnlyUser

為了獲得更好的安全狀態,我們建議使用 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
注意
必須變更下列元件。
  • KeyName:您的一個 Amazon EC2 密鑰對。

  • SubnetId / SubnetIds: CloudFormation 快速建立堆疊 (自動化教學課程) 或 python 指令碼 (手動教學課程) 輸出中提供的其中一個子網路 ID。

  • Region:您建立 AD 基礎結構的區域。

  • DomainAddr:此 IP 位址是您廣告服務的其中一個 DNS 位址。

  • PasswordSecretArn:包含的密碼的 Amazon 資源名稱(ARN)的密碼。DomainReadOnlyUser

為了獲得更好的安全狀態,我們建議使用 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.7.0, "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令成功,表示您已成功連線至叢集,並經過驗證可使用 Active Directory (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.7.0", "clusterStatus": "DELETE_IN_PROGRESS" } }
  2. 檢查要刪除的叢集進度。
    $ pcluster describe-cluster --cluster-name "ad-cluster" --region "region-id" --query "clusterStatus" "DELETE_IN_PROGRESS"

    成功刪除叢集之後,請繼續執行下一個步驟。

刪除活動目錄資源
  1. https://console.aws.amazon.com/cloudformation/.

  2. 在導覽窗格中,選擇 Stacks (堆疊)

  3. 從堆疊清單中選擇 AD 堆疊 (例如pcluster-ad)。

  4. 選擇刪除

  1. 刪除 Amazon EC2 實例。
    1. https://console.aws.amazon.com/ec2/ 中,選擇導覽窗格中的 [執行個體]。

    2. 從執行個體清單中,選擇您建立的執行個體,以將使用者新增至目錄。

    3. 選擇實例狀態,然後選擇終止實例

  2. 刪除託管區域。
    1. recordset-delete.json使用以下內容創建一個。在此範例中, HostedZoneId 是負載平衡器的標準託管區域 ID。

      { "Changes": [ { "Action": "DELETE", "ResourceRecordSet": { "Name": "corp.example.com", "Type": "A", "Region": "region-id", "SetIdentifier": "pcluster-active-directory", "AliasTarget": { "HostedZoneId": "Z2IFOLAFXWLO4F", "DNSName": "CorpExampleCom-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/CorpExampleCom-NLB/3afe296bf4ba80d4/a8f9d97318743d4b --region region-id
  4. 刪除目標群組。
    $ aws elbv2 delete-target-group \ --target-group-arn arn:aws:elasticloadbalancing:region-id:123456789012:targetgroup/CorpExampleCom-Targets/44577c583b695e81 --region region-id
  5. 刪除負載平衡器。
    $ aws elbv2 delete-load-balancer \ --load-balancer-arn arn:aws:elasticloadbalancing:region-id:123456789012:loadbalancer/net/CorpExampleCom-NLB/3afe296bf4ba80d4 --region region-id
  6. 刪除叢集用來從 Secrets Manager 讀取憑證的原則。
    $ aws iam delete-policy --policy-arn arn:aws:iam::123456789012:policy/ReadCertExample
  7. 刪除包含網域憑證的密碼。
    $ aws secretsmanager delete-secret \ --secret-id arn:aws:secretsmanager:region-id:123456789012:secret:example-cert-123abc \ --region region-id { "ARN": "arn:aws:secretsmanager:region-id:123456789012:secret:example-cert-123abc", "Name": "example-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. 刪除活動目錄(AD)資源。
    1. 從 python 腳本的輸出中獲取以下資源 IDad.py

      • 廣告識別碼

      • 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. 描述網際網路閘道。

      $ 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. 卸離網際網路閘道。

      $ aws ec2 detach-internet-gateway \ --internet-gateway-id igw-1234567890abcdef \ --vpc-id vpc-021345abcdef6789 \ --region region-id
    8. 刪除網際網路閘道。

      $ 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