本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
整合作用中目錄
在本自學課程中,您將建立多重使用者環境。此環境包括一 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 成本。
必要條件
-
AWS ParallelCluster 已安裝。
-
AWS CLI 已安裝並設定。
-
你有一個 Amazon EC2 key pair。
當您瀏覽本教學課程時,請以您自己的名稱
和 ID 取代 region-id
inputs highlighted in red
,例如和。d-abcdef01234567890
用您的 AWS 帳戶 號碼替換。0123456789012
選擇 [自動化] 索引標籤以建立具有 AWS CloudFormation 快速建立範本的 Active Directory (AD) 基礎結構。
選擇 [手動] 索引標籤以手動建立 AD 基礎結構。
-
登入 AWS Management Console。
-
開啟「CloudFormation 快速建立」(區域 us-east-1)
,在主控台中建立下列資源: CloudFormation -
具有兩個子網路的 VPC 並路由供公用存取 (如果未指定 VPC)。
-
一個 AWS Managed Microsoft AD.
-
加入 AD 的 Amazon EC2 執行個體,您可以用來管理目錄。
-
-
在快速建立堆疊頁面「參數」段落中,輸入下列參數的密碼:
-
AdminPassword
-
ReadOnlyPassword
-
UserPassword
記下密碼。您稍後在本自學課程中使用它們。
-
-
針對 DomainName,請輸入
corp.example.com
-
在 key pair 中,輸入 Amazon EC2 金鑰配對的名稱。
-
核取方塊以確認頁面底部的每個存取功能。
-
選擇建立堆疊。
-
CloudFormation 堆疊到達
CREATE_COMPLETE
狀態後,選擇堆疊的「輸出」索引標籤。記下輸出資源名稱和 ID,因為您需要在後面的步驟中使用它們。輸出提供建立叢集所需的資訊。 -
若要完成練習(選擇性) 步驟 2:管理 AD 使用者和群組,您需要目錄 ID。選擇資源並向下捲動以記下目錄 ID。
為目錄服務建立 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。您可以在稍後的步驟中使用它們。
指令碼完成後,請繼續執行下一個步驟。
-
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 -
安裝必要的軟件並加入領域。
$
sudo yum -y install sssd realmd oddjob oddjob-mkhomedir adcli samba-common samba-common-tools krb5-workstation openldap-clients policycoreutils-python
-
使用您的密碼取代管理員
admin
密碼。$
ADMIN_PW=
"asdfASDF1234"
$
echo $ADMIN_PW | sudo realm join -U Admin
corp.example.com
Password for Admin:
如果上述項目已成功,表示您已加入範圍,並且可以繼續進行下一個步驟。
-
建立 ReadOnlyUser 和其他使用者。
在此步驟中,您可以使用在上一個步驟中安裝的 adcli
和 openldapm 用戶端 工具。 $
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
-
確認已建立使用者:
目錄 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
,會停用該使用者。 -
從本機電腦重設並啟用使用者密碼:
登出您的亞馬遜 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"
-
-
將密碼新增至密碼 Secrets Manager 密碼。
現在您已建立
ReadOnlyUser
並設定密碼,請將密碼儲存在 AWS ParallelCluster 用於驗證登入的密碼中。使用 Secrets Manager 建立新密碼,以保留
ReadOnlyUser
作為值的密碼。密碼值格式必須僅為純文字 (非 JSON 格式)。記下秘密 ARN 以便 future 採取的步驟。$
aws secretsmanager create-secret --name
"ADSecretPassword"
\ --regionregion_id
\ --secret-string"ro-p@ssw0rd"
\ --query ARN \ --output textarn:aws:secretsmanager:region-id:123456789012:secret:ADSecretPassword-1234
記下資源 ID。您可以在稍後的步驟中使用它們。
-
在本機產生網域憑證。
$
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 -
將憑證儲存至 Secrets Manager,以便稍後從叢集內擷取憑證。
$
aws secretsmanager create-secret --name example-cert \ --secret-string file://$CERTIFICATE \ --regionregion-id
{ "ARN": "arn:aws:secretsmanager:region-id:123456789012:secret:example-cert-123abc", "Name": "example-cert", "VersionId": "14866070-092a-4d5a-bcdd-9219d0566b9c" }
-
將下列政策新增至您為將 Amazon EC2 執行個體加入 AD 網域而建立的 IAM 角色。
PutDomainCertificateSecrets
{ "Statement": [ { "Action": [ "secretsmanager:PutSecretValue" ], "Resource": [ "arn:aws:secretsmanager:
region-id
:123456789012
:secret:example-cert-123abc
", ], "Effect": "Allow" } ] } -
將憑證匯入至 AWS Certificate Manager (ACM)。
$
aws acm import-certificate --certificate fileb://$CERTIFICATE \ --private-key fileb://$PRIVATE_KEY \ --regionregion-id
{ "CertificateArn": "arn:aws:acm:region-id:123456789012:certificate/343db133-490f-4077-b8d4-3da5bfd89e72" }
-
建立和放在作用中目錄端點前面的負載平衡器。
$
aws elbv2 create-load-balancer --name CorpExampleCom-NLB \ --type network \ --scheme internal \ --subnetssubnet-1234567890abcdef0 subnet-021345abcdef6789
\ --regionregion-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" } ] }
-
建立以作用中目錄端點為目標的目標群組。
$
aws elbv2 create-target-group --name CorpExampleCom-Targets --protocol TCP \ --port 389 \ --target-type ip \ --vpc-idvpc-021345abcdef6789
\ --regionregion-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" } ] }
-
將作用中目錄 (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 \ --regionregion-id
-
使用憑證建立 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
\ --regionregion-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" } ] } } ] } ] }
-
建立託管區域,使網域在叢集 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" } }
-
建立以下列內容命名
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 } } } ] } -
這次使用託管區域 ID,將資料集變更提交至託管區域。
$
aws route53 change-resource-record-sets --hosted-zone-idZ09020002B5MZQNXMSJUB
\ --change-batch file://recordset-change.json{ "ChangeInfo": { "Id": "/change/C0137926I56R3GC7XW2Y", "Status": "PENDING", "SubmittedAt": "2022-05-05T13:40:36.553000+00:00" } }
-
policy.json
使用下列內容建立政策文件。{ "Version": "2012-10-17", "Statement": [ { "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:
region-id
:123456789012
:secret:example-cert-abc123
" ], "Effect": "Allow" } ] } -
建立以下列內容命名
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" } }
-
繼續執行(選擇性) 步驟 2:管理 AD 使用者和群組或中的步驟步驟 3:建立叢集。
在此步驟中,您可以從已加入作用中交付 (AD) 網域的 Amazon EC2 Amazon Linux 2 執行個體管理使用者和群組。
如果您遵循自動化路徑,請重新啟動並登入做為自動化操作一部分建立的 AD 加入執行個體。
如果您遵循手動路徑,請在上述步驟中重新啟動並登入您建立並加入 AD 的執行個體。
在這些步驟中,您可以使用安裝在執行個體中的 adcli
登入已加入 AD 網域的 Amazon EC2 執行個體
-
在 Amazon EC2 主控台中,選取在先前步驟中建立的無標題 Amazon EC2 執行個體。執行個體狀態可能為 [已停止]。
-
如果執行個體狀態為 [已停止],請選擇 [執行個體狀態],然後選擇
-
通過狀態檢查之後,請選取執行個體,然後選擇 [Connect],然後SSH在執行個體中選擇。
在登入已加入 AD 的 Amazon EC2 Linux 2 執行個體時管理使用者和群組
當您使用 -U "Admin"
選項執行adcli
命令時,系統會提示您輸入 AD Admin
密碼。您可以將 AD Admin
密碼納入命ldapsearch
令中。
-
建立使用者。
$
adcli create-user
"clusteruser"
--domain"corp.example.com"
-U "Admin" -
設定使用者密碼。
$
aws --region
"region-id"
ds reset-user-password --directory-id"d-abcdef01234567890"
--user-name"clusteruser"
--new-password"new-p@ssw0rd"
-
建立群組。
$
adcli create-group
"clusterteam"
--domain"corp.example.com"
-U "Admin" -
將使用者新增至群組。
$
adcli add-member
"clusterteam"
"clusteruser"
--domain"corp.example.com"
-U "Admin" -
描述使用者和群組。
描述所有使用者。
$
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"
-
從群組中移除使用者。
$
adcli remove-member
"clusterteam"
"clusteruser"
--domain"corp.
-U "Admin"example
.com" -
刪除使用者。
$
adcli delete-user
"clusteruser"
--domain"corp.
-U "Admin"example
.com" -
刪除群組。
$
adcli delete-group
"clusterteam"
--domain"corp.
-U "Admin"example
.com"
如果您尚未結束 Amazon EC2 執行個體,請立即執行。
此環境設定為建立可以根據使用中目錄 (AD) 驗證使用者的叢集。
建立簡單的叢集配置,並提供與連線至 AD 相關的設定。如需詳細資訊,請參閱 DirectoryService 一節。
選擇下列其中一個叢集配置,並將其複製到名為ldaps_config.yaml
ldaps_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)。
為了獲得更好的安全狀態,我們建議使用 HeadNode
Ssh
//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) 的使用者身分。
-
從本機電腦刪除叢集。
$
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" } }
-
檢查要刪除的叢集進度。
$
pcluster describe-cluster --cluster-name
"ad-cluster"
--region"region-id"
--query "clusterStatus""DELETE_IN_PROGRESS"
成功刪除叢集之後,請繼續執行下一個步驟。
刪除活動目錄資源
-
在導覽窗格中,選擇 Stacks (堆疊)。
-
從堆疊清單中選擇 AD 堆疊 (例如
pcluster-ad
)。 -
選擇刪除。
-
刪除 Amazon EC2 實例。
-
在 https://console.aws.amazon.com/ec2/
中,選擇導覽窗格中的 [執行個體]。 -
從執行個體清單中,選擇您建立的執行個體,以將使用者新增至目錄。
-
選擇實例狀態,然後選擇終止實例。
-
-
刪除託管區域。
-
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 } } } ] } -
使用託管區域 ID 將資料集變更提交至託管區域。
$
aws route53 change-resource-record-sets --hosted-zone-idZ09020002B5MZQNXMSJUB
\ --change-batch file://recordset-delete.json{ "ChangeInfo": { "Id": "/change/C04853642A0TH2TJ5NLNI", "Status": "PENDING", "SubmittedAt": "2022-05-05T14:25:51.046000+00:00" } }
-
刪除託管區域。
$
aws route53 delete-hosted-zone --idZ09020002B5MZQNXMSJUB
{ "ChangeInfo": { "Id": "/change/C0468051QFABTVHMDEG9", "Status": "PENDING", "SubmittedAt": "2022-05-05T14:26:13.814000+00:00" } }
-
-
刪除 LB 監聽器。
$
aws elbv2 delete-listener \ --listener-arn arn:aws:elasticloadbalancing:region-id
:123456789012
:listener/net/CorpExampleCom-NLB/3afe296bf4ba80d4/a8f9d97318743d4b
--regionregion-id
-
刪除目標群組。
$
aws elbv2 delete-target-group \ --target-group-arn arn:aws:elasticloadbalancing:region-id
:123456789012
:targetgroup/CorpExampleCom-Targets/44577c583b695e81
--regionregion-id
-
刪除負載平衡器。
$
aws elbv2 delete-load-balancer \ --load-balancer-arn arn:aws:elasticloadbalancing:region-id
:123456789012
:loadbalancer/net/CorpExampleCom-NLB/3afe296bf4ba80d4
--regionregion-id
-
刪除叢集用來從 Secrets Manager 讀取憑證的原則。
$
aws iam delete-policy --policy-arn arn:aws:iam::123456789012
:policy/ReadCertExample -
刪除包含網域憑證的密碼。
$
aws secretsmanager delete-secret \ --secret-id arn:aws:secretsmanager:region-id
:123456789012
:secret:example-cert-123abc
\ --regionregion-id
{ "ARN": "arn:aws:secretsmanager:region-id:123456789012:secret:example-cert-123abc", "Name": "example-cert", "DeletionDate": "2022-06-04T16:27:36.183000+02:00" }
-
從 ACM 刪除憑證。
$
aws acm delete-certificate \ --certificate-arn arn:aws:acm:region-id
:123456789012
:certificate/343db133-490f-4077-b8d4-3da5bfd89e72
--regionregion-id
-
刪除活動目錄(AD)資源。
-
從 python 腳本的輸出中獲取以下資源 ID
ad.py
:-
廣告識別碼
-
AD 子網路識別碼
-
廣告 VPC ID
-
-
執行下列命令刪除目錄。
$
aws ds delete-directory --directory-idd-abcdef0123456789
--regionregion-id
{ "DirectoryId": "d-abcdef0123456789" }
-
列出 VPC 中的安全群組。
$
aws ec2 describe-security-groups --filters '[{"Name":"vpc-id","Values":["vpc-07614ade95ebad1bc"]}]' --regionregion-id
-
刪除自訂安全性群組。
$
aws ec2 delete-security-group --group-idsg-021345abcdef6789
--regionregion-id
-
刪除子網路。
$
aws ec2 delete-subnet --subnet-idsubnet-1234567890abcdef
--regionregion-id
$
aws ec2 delete-subnet --subnet-idsubnet-021345abcdef6789
--regionregion-id
-
描述網際網路閘道。
$
aws ec2 describe-internet-gateways \ --filters Name=attachment.vpc-id,Values=vpc-021345abcdef6789
\ --regionregion-id
{ "InternetGateways": [ { "Attachments": [ { "State": "available", "VpcId": "vpc-021345abcdef6789" } ], "InternetGatewayId": "igw-1234567890abcdef", "OwnerId": "123456789012", "Tags": [] } ] }
-
卸離網際網路閘道。
$
aws ec2 detach-internet-gateway \ --internet-gateway-idigw-1234567890abcdef
\ --vpc-idvpc-021345abcdef6789
\ --regionregion-id
-
刪除網際網路閘道。
$
aws ec2 delete-internet-gateway \ --internet-gateway-idigw-1234567890abcdef
\ --regionregion-id
-
刪除 VPC。
$
aws ec2 delete-vpc \ --vpc-idvpc-021345abcdef6789
\ --regionregion-id
-
刪除包含密
ReadOnlyUser
碼的密碼。$
aws secretsmanager delete-secret \ --secret-id arn:aws:secretsmanager:region-id
:123456789012
:secret:ADSecretPassword-1234
" \ --regionregion-id
-