Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Intégration d'Active Directory
Dans ce didacticiel, vous allez créer un environnement multi-utilisateurs. Cet environnement inclut un AWS ParallelCluster qui est intégré à un AWS Managed Microsoft AD (Active Directory) àcorp.example.com
. Vous configurez un Admin
utilisateur pour gérer le répertoire, un ReadOnly
utilisateur pour lire le répertoire et un user000
utilisateur pour se connecter au cluster. Vous pouvez utiliser le chemin automatique ou le chemin manuel pour créer les ressources réseau, un Active Directory (AD) et l'instance EC2 que vous utilisez pour configurer l'AD. Quel que soit le chemin, l'infrastructure que vous créez est préconfigurée pour s'intégrer à AWS ParallelCluster l'aide de l'une des méthodes suivantes :
-
LDAPS avec vérification des certificats (recommandé comme option la plus sûre)
-
LDAPS sans vérification du certificat
-
LDAP
Le protocole LDAP en lui-même ne fournit pas de chiffrement. Pour garantir la transmission sécurisée d'informations potentiellement sensibles, nous vous recommandons vivement d'utiliser LDAPS (LDAP over TLS/SSL) pour les clusters intégrés à ADs. Pour plus d'informations, voir Activer le protocole LDAPS côté serveur à l'aide du AWS Directory Service guide d'AWS Managed Microsoft ADadministration.
Après avoir créé ces ressources, configurez et créez votre cluster intégré à votre Active Directory (AD). Une fois le cluster créé, connectez-vous en tant qu'utilisateur que vous avez créé. Pour plus d'informations sur la configuration que vous créez dans ce didacticiel, consultez Accès de plusieurs utilisateurs aux clusters la section relative à la DirectoryServiceconfiguration.
Ce didacticiel explique comment créer un environnement prenant en charge l'accès de plusieurs utilisateurs aux clusters. Ce didacticiel n'explique pas comment créer et utiliser un AWS Directory Service AD. Les étapes que vous suivez pour configurer un AWS Managed Microsoft AD dans ce didacticiel sont fournies à des fins de test uniquement. Ils ne sont pas fournis pour remplacer la documentation officielle et les meilleures pratiques que vous pouvez trouver sur AWS Managed Microsoft ADSimple AD dans le Guide d'AWS Directory Serviceadministration.
Note
Les mots de passe des utilisateurs de l'annuaire expirent conformément aux définitions des propriétés de la politique de mot de passe d'annuaire. Pour plus d'informations, consultez la section Paramètres de stratégie pris en charge. Pour réinitialiser les mots de passe des annuaires avecAWS ParallelCluster, voirComment réinitialiser le mot de passe d'un utilisateur et les mots de passe expirés.
Note
Les adresses IP du contrôleur de domaine de l'annuaire peuvent changer en raison des modifications du contrôleur de domaine et de la maintenance de l'annuaire. Si vous avez choisi la méthode de création rapide automatisée pour créer l'infrastructure d'annuaire, vous devez aligner manuellement l'équilibreur de charge devant les contrôleurs d'annuaire lorsque les adresses IP des répertoires changent. Si vous utilisez la méthode de création rapide, les adresses IP du répertoire ne sont pas automatiquement alignées avec les équilibreurs de charge.
Lorsque vous utilisez l'interface de ligne de AWS ParallelCluster commande (CLI) ou l'API, vous ne payez que pour les AWS ressources créées lorsque vous créez ou mettez à jour AWS ParallelCluster des images et des clusters. Pour en savoir plus, consultez AWSservices utilisés par AWS ParallelCluster.
L'AWS ParallelClusterinterface utilisateur repose sur une architecture sans serveur et vous pouvez l'utiliser dans la catégorie AWS Free Tier dans la plupart des cas. Pour en savoir plus, consultez AWS ParallelClusterCoûts d'interface utilisateur.
Prérequis
-
AWS ParallelClusterest installé.
-
Le AWS CLI est installé et configuré.
-
Vous possédez une paire de clés EC2.
-
Vous disposez d'un rôle IAM doté des autorisations requises pour exécuter la pcluster CLI.
Au cours du didacticiel, remplacez
, par exemple inputs highlighted in red
etregion-id
, par vos propres noms et identifiants. Remplacez d-abcdef01234567890
par votre Compte AWS numéro.0123456789012
Choisissez l'onglet Automatisé pour créer l'infrastructure Active Directory (AD) à l'aide d'un modèle de création AWS CloudFormation rapide.
Choisissez l'onglet Manuel pour créer manuellement l'infrastructure AD.
-
Connectez-vous à la AWS Management Console.
-
Ouvrez CloudFormation Quick Create (region us-east-1)
pour créer les ressources suivantes dans la console : CloudFormation -
Un VPC avec deux sous-réseaux et un routage pour un accès public, si aucun VPC n'est spécifié.
-
Un AWS Managed Microsoft AD.
-
Une instance EC2 jointe à l'AD que vous pouvez utiliser pour gérer le répertoire.
-
-
Dans la section Paramètres de la page de création rapide d'une pile, entrez des mots de passe pour les paramètres suivants :
-
AdminPassword
-
ReadOnlyPassword
-
UserPassword
Prenez note des mots de passe. Vous les utiliserez ultérieurement dans ce didacticiel.
-
-
Pour DomainName, entrez
corp.example.com
. -
Pour Keypair, entrez le nom d'une paire de clés EC2.
-
Cochez les cases correspondant à chacune des fonctionnalités d'accès au bas de la page.
-
Sélectionnez Créer la pile.
-
Une fois que la CloudFormation pile a atteint son
CREATE_COMPLETE
état, choisissez l'onglet Sorties de la pile. Notez les noms et les identifiants des ressources de sortie, car vous devrez les utiliser ultérieurement. Les sorties fournissent les informations nécessaires à la création du cluster. -
Pour terminer les exercices(Facultatif) Étape 2 : Gérer les utilisateurs et les groupes AD, vous avez besoin de l'ID du répertoire. Choisissez Ressources et faites défiler l'écran vers le bas pour prendre note de l'ID du répertoire.
-
Continuez sur (Facultatif) Étape 2 : Gérer les utilisateurs et les groupes AD ouÉtape 3 : Création du cluster.
Créez un VPC pour le service d'annuaire avec deux sous-réseaux dans différentes zones de disponibilité et un. AWS Managed Microsoft AD
Note
-
Le répertoire et le nom de domaine sont
corp.example.com
. Le nom abrégé estCORP
. -
Modifiez le
Admin
mot de passe dans le script. -
La création de l'Active Directory (AD) prend au moins 15 minutes.
Utilisez le script Python suivant pour créer le VPC, les sous-réseaux et les ressources AD dans votre environnement local. Région AWS Enregistrez ce fichier sous ad.py
et exécutez-le.
import boto3 import time from pprint import pprint vpc_name = "PclusterVPC" ad_domain = "corp.example.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})
Voici un exemple de sortie du script 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" }
Notez les noms et les identifiants des ressources de sortie. Vous les utiliserez ultérieurement.
Une fois le script terminé, passez à l'étape suivante.
-
Connectez-vous à votre instance et rejoignez le domaine AD en tant que
admin
.Exécutez les commandes suivantes pour vous connecter à l'instance.
$
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 -
Installez le logiciel nécessaire et rejoignez le royaume.
$
sudo yum -y install sssd realmd oddjob oddjob-mkhomedir adcli samba-common samba-common-tools krb5-workstation openldap-clients policycoreutils-python
-
Remplacez le mot de passe administrateur par votre
admin
mot de passe.$
ADMIN_PW=
"asdfASDF1234"
$
echo $ADMIN_PW | sudo realm join -U Admin
corp.example.com
Password for Admin:
Si la procédure précédente a réussi, vous êtes rattaché au royaume et pouvez passer à l'étape suivante.
-
Créez le ReadOnlyUser et un utilisateur supplémentaire.
Dans cette étape, vous utilisez les outils adcli
et openldap-clients que vous avez installés lors d'une étape précédente. $
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
-
Vérifiez que les utilisateurs sont créés :
Les adresses IP DNS du répertoire sont des sorties du script 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
"Par défaut, lorsque vous créez un utilisateur avec le
ad-cli
, l'utilisateur est désactivé. -
Réinitialisez et activez les mots de passe utilisateur depuis votre ordinateur local :
Déconnectez-vous de votre instance EC2.
Note
-
ro-p@ssw0rd
est le mot de passe deReadOnlyUser
, extrait deAWS Secrets Manager. -
user-p@ssw0rd
est le mot de passe d'un utilisateur du cluster fourni lorsque vous vous connectez (ssh
) au cluster.
directory-id
Il s'agit d'une sortie du script 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"
-
-
Ajoutez le mot de passe à un secret du Gestionnaire de Secrets.
Maintenant que vous avez créé
ReadOnlyUser
et défini le mot de passe, stockez-le dans un secret qui AWS ParallelCluster servira à valider les connexions.Utilisez Secrets Manager pour créer un nouveau secret contenant le mot de passe correspondant
ReadOnlyUser
à la valeur. Le format de la valeur secrète doit être uniquement en texte brut (pas au format JSON). Prenez note de l'ARN secret pour les étapes futures.$
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
Notez les identifiants des ressources. Vous les utiliserez par étapes ultérieures.
-
Générez un certificat de domaine, localement.
$
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 -
Stockez le certificat dans Secrets Manager pour qu'il puisse être récupéré ultérieurement dans le cluster.
$
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" }
-
Ajoutez la politique suivante au rôle IAM que vous avez créé pour joindre l'instance EC2 au domaine AD.
PutDomainCertificateSecrets
{ "Statement": [ { "Action": [ "secretsmanager:PutSecretValue" ], "Resource": [ "arn:aws:secretsmanager:
region-id
:123456789012
:secret:example-cert-123abc
", ], "Effect": "Allow" } ] } -
Importez le certificat dans 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" }
-
Créez et l'équilibreur de charge placé devant les points de terminaison Active Directory.
$
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" } ] }
-
Créez le groupe cible qui cible les points de terminaison Active Directory.
$
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" } ] }
-
Enregistrez les points de terminaison Active Directory (AD) dans le groupe cible.
$
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
-
Créez l'écouteur LB avec le certificat.
$
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" } ] } } ] } ] }
-
Créez la zone hébergée pour rendre le domaine détectable dans le VPC du cluster.
$
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" } }
-
Créez un fichier nommé
recordset-change.json
avec le contenu suivant.HostedZoneId
est l'ID de zone hébergée canonique de l'équilibreur de charge.{ "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 } } } ] } -
Soumettez la modification du jeu d'enregistrements à la zone hébergée, cette fois en utilisant l'ID de zone hébergée.
$
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" } }
-
Créez un document de politique
policy.json
avec le contenu suivant.{ "Version": "2012-10-17", "Statement": [ { "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:
region-id
:123456789012
:secret:example-cert-abc123
" ], "Effect": "Allow" } ] } -
Créez un document de politique nommé
policy.json
avec le contenu suivant.$
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" } }
-
Continuez à suivre les étapes indiquées dans (Facultatif) Étape 2 : Gérer les utilisateurs et les groupes AD ouÉtape 3 : Création du cluster.
Au cours de cette étape, vous gérez les utilisateurs et les groupes à partir d'une instance Amazon Linux 2 EC2 jointe au domaine Active Delivery (AD).
Si vous avez suivi le chemin automatique, redémarrez et connectez-vous à l'instance jointe à AD créée dans le cadre de l'automatisation.
Si vous avez suivi le chemin manuel, redémarrez et connectez-vous à l'instance que vous avez créée et jointe à AD lors des étapes précédentes.
Au cours de ces étapes, vous utilisez les outils adcli
Connectez-vous à une instance EC2 jointe au domaine AD
-
Dans la console EC2, sélectionnez l'instance EC2 sans titre créée lors des étapes précédentes. L'état de l'instance est peut-être Arrêté.
-
Si l'état de l'instance est Arrêté, choisissez État de l'instance, puis Démarrer l'instance.
-
Une fois les vérifications d'état terminées, sélectionnez l'instance, puis choisissez Connect and SSH in to the instance.
Gérez les utilisateurs et les groupes lorsque vous êtes connecté à une instance Amazon Linux 2 EC2 qui a rejoint l'AD
Lorsque vous exécutez les adcli
commandes avec l' -U "Admin"
option, vous êtes invité à saisir le mot de Admin
passe AD. Vous incluez le Admin
mot de passe AD dans les ldapsearch
commandes.
-
Créez un utilisateur.
$
adcli create-user
"clusteruser"
--domain"corp.example.com"
-U "Admin" -
Définissez un mot de passe utilisateur.
$
aws --region
"region-id"
ds reset-user-password --directory-id"d-abcdef01234567890"
--user-name"clusteruser"
--new-password"new-p@ssw0rd"
-
Créez un groupe.
$
adcli create-group
"clusterteam"
--domain"corp.example.com"
-U "Admin" -
Ajoutez un utilisateur à un groupe.
$
adcli add-member
"clusterteam"
"clusteruser"
--domain"corp.example.com"
-U "Admin" -
Décrivez les utilisateurs et les groupes.
Décrivez tous les utilisateurs.
$
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"
Décrivez un utilisateur spécifique.
$
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"
Décrivez tous les utilisateurs avec un modèle de nom.
$
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"
Décrivez tous les utilisateurs qui font partie d'un groupe spécifique.
$
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"
Décrire tous les groupes
$
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"
Décrire un groupe spécifique
$
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"
-
Supprimer un utilisateur d'un groupe.
$
adcli remove-member
"clusterteam"
"clusteruser"
--domain"corp.
-U "Admin"example
.com" -
Supprime un utilisateur.
$
adcli delete-user
"clusteruser"
--domain"corp.
-U "Admin"example
.com" -
Supprimez un groupe.
$
adcli delete-group
"clusterteam"
--domain"corp.
-U "Admin"example
.com"
Si vous n'avez pas quitté l'instance EC2, faites-le maintenant.
L'environnement est configuré pour créer un cluster capable d'authentifier les utilisateurs auprès d'Active Directory (AD).
Créez une configuration de cluster simple et fournissez les paramètres nécessaires à la connexion à l'AD. Pour plus d’informations, consultez la section DirectoryService.
Choisissez l'une des configurations de cluster suivantes et copiez-la dans un fichier nommé ldaps_config.yaml
ldaps_nocert_config.yaml
, ouldap_config.yaml
.
Nous vous recommandons de choisir la configuration LDAPS avec vérification des certificats. Si vous choisissez cette configuration, vous devez également copier le script bootstrap dans un fichier nomméactive-directory.head.post.sh
. Vous devez également le stocker dans un compartiment Amazon S3 comme indiqué dans le fichier de configuration.
Note
Les composants suivants doivent être modifiés.
-
KeyName
: L'une de vos paires de clés EC2. -
SubnetId / SubnetIds
: l'un des identifiants de sous-réseau fournis dans la sortie de la pile de création CloudFormation rapide (didacticiel automatisé) ou du script python (didacticiel manuel). -
Region
: Région dans laquelle vous avez créé l'infrastructure AD. -
DomainAddr
: Cette adresse IP est l'une des adresses DNS de votre service AD. -
PasswordSecretArn
: le nom de ressource Amazon (ARN) du secret qui contient le mot de passe duDomainReadOnlyUser
. -
BucketName
: nom du compartiment contenant le script bootstrap. -
AdditionalPolicies
/Policy
: Le nom de ressource Amazon (ARN) de la politique de certification du domaine lu ReadCertExample. -
CustomActions
/OnNodeConfigured
/Args
: Nom de ressource Amazon (ARN) du secret contenant la politique de certification du domaine.
Pour une meilleure sécurité, nous vous suggérons d'utiliser la AllowedIps
configuration HeadNode
Ssh
//pour limiter l'accès SSH au nœud principal.
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
Script Bootstrap
Après avoir créé le fichier bootstrap et avant de le télécharger dans votre compartiment S3, exécutez-le chmod +x active-directory.head.post.sh
pour donner l'autorisation d'AWS ParallelClusterexécution.
#!/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
Note
Les composants suivants doivent être modifiés.
-
KeyName
: L'une de vos paires de clés EC2. -
SubnetId / SubnetIds
: l'un des identifiants de sous-réseau figurant dans la sortie de la pile de création CloudFormation rapide (didacticiel automatisé) ou du script python (didacticiel manuel). -
Region
: Région dans laquelle vous avez créé l'infrastructure AD. -
DomainAddr
: Cette adresse IP est l'une des adresses DNS de votre service AD. -
PasswordSecretArn
: le nom de ressource Amazon (ARN) du secret qui contient le mot de passe duDomainReadOnlyUser
.
Pour une meilleure sécurité, nous vous suggérons d'utiliser la AllowedIps configuration HeadNode /Ssh/ pour limiter l'accès SSH au nœud principal.
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
Note
Les composants suivants doivent être modifiés.
-
KeyName
: L'une de vos paires de clés EC2. -
SubnetId / SubnetIds
: l'un des identifiants de sous-réseau fournis dans la sortie de la pile de création CloudFormation rapide (didacticiel automatisé) ou du script python (didacticiel manuel). -
Region
: Région dans laquelle vous avez créé l'infrastructure AD. -
DomainAddr
: Cette adresse IP est l'une des adresses DNS de votre service AD. -
PasswordSecretArn
: le nom de ressource Amazon (ARN) du secret qui contient le mot de passe duDomainReadOnlyUser
.
Pour une meilleure sécurité, nous vous suggérons d'utiliser la AllowedIps configuration HeadNode /Ssh/ pour limiter l'accès SSH au nœud principal.
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
Créez votre cluster à l'aide de la commande suivante.
$
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" } }
Vous pouvez déterminer l'état du cluster à l'aide des commandes suivantes.
$
pcluster describe-cluster -n
ad-cluster
--region"region-id"
--query "clusterStatus"
La sortie est la suivante.
"CREATE_IN_PROGRESS" / "CREATE_COMPLETE"
Lorsque le statut atteint"CREATE_COMPLETE"
, connectez-vous avec le nom d'utilisateur et le mot de passe créés.
$
HEAD_NODE_IP=$(pcluster describe-cluster -n
"ad-cluster"
--region"region-id"
--query headNode.publicIpAddress | xargs echo)
$
ssh
user000
@$HEAD_NODE_IP
Vous pouvez vous connecter sans mot de passe en fournissant la SSH clé créée pour le nouvel utilisateur sur/home/user000@HEAD_NODE_IP/.ssh/id_rsa
.
Si la ssh
commande a réussi, vous vous êtes connecté avec succès au cluster en tant qu'utilisateur authentifié pour utiliser Active Directory (AD).
-
Depuis votre ordinateur local, supprimez le cluster.
$
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" } }
-
Vérifiez la progression du cluster en cours de suppression.
$
pcluster describe-cluster --cluster-name
"ad-cluster"
--region"region-id"
--query "clusterStatus""DELETE_IN_PROGRESS"
Une fois le cluster supprimé avec succès, passez à l'étape suivante.
Supprimer les ressources Active Directory
-
Dans le volet de navigation, choisissez Stack (Piles).
-
Dans la liste des piles, choisissez la pile AD (par exemple,
pcluster-ad
). -
Sélectionnez Delete (Supprimer).
-
Supprimez l'instance EC2.
-
Sur https://console.aws.amazon.com/ec2/
, sélectionnez Instances dans le volet de navigation. -
Dans la liste des instances, choisissez l'instance que vous avez créée pour ajouter des utilisateurs à l'annuaire.
-
Choisissez État de l'instance, puis Terminate instance.
-
-
Supprimez la zone hébergée.
-
Créez un
recordset-delete.json
avec le contenu suivant. Dans cet exemple, HostedZoneId il s'agit de l'ID de zone hébergée canonique de l'équilibreur de charge.{ "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 } } } ] } -
Soumettez la modification du jeu d'enregistrements à la zone hébergée à l'aide de l'ID de zone hébergée.
$
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" } }
-
Supprimez la zone hébergée.
$
aws route53 delete-hosted-zone --idZ09020002B5MZQNXMSJUB
{ "ChangeInfo": { "Id": "/change/C0468051QFABTVHMDEG9", "Status": "PENDING", "SubmittedAt": "2022-05-05T14:26:13.814000+00:00" } }
-
-
Supprimez l'écouteur LB.
$
aws elbv2 delete-listener \ --listener-arn arn:aws:elasticloadbalancing:region-id
:123456789012
:listener/net/CorpExampleCom-NLB/3afe296bf4ba80d4/a8f9d97318743d4b
--regionregion-id
-
Supprimez le groupe cible.
$
aws elbv2 delete-target-group \ --target-group-arn arn:aws:elasticloadbalancing:region-id
:123456789012
:targetgroup/CorpExampleCom-Targets/44577c583b695e81
--regionregion-id
-
Supprimez l'équilibreur de charge.
$
aws elbv2 delete-load-balancer \ --load-balancer-arn arn:aws:elasticloadbalancing:region-id
:123456789012
:loadbalancer/net/CorpExampleCom-NLB/3afe296bf4ba80d4
--regionregion-id
-
Supprimez la politique utilisée par le cluster pour lire le certificat depuis Secrets Manager.
$
aws iam delete-policy --policy-arn arn:aws:iam::123456789012
:policy/ReadCertExample -
Supprimez le secret qui contient le certificat de domaine.
$
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" }
-
Supprimez le certificat d'ACM.
$
aws acm delete-certificate \ --certificate-arn arn:aws:acm:region-id
:123456789012
:certificate/343db133-490f-4077-b8d4-3da5bfd89e72
--regionregion-id
-
Supprimez les ressources Active Directory (AD).
-
Obtenez les identifiants de ressources suivants à partir de la sortie du script python
ad.py
:-
IDENTIFIANT DE L'ANNONCE
-
ID de sous-réseau AD
-
AJOUTER UN IDENTIFIANT VPC
-
-
Supprimez le répertoire en exécutant la commande suivante.
$
aws ds delete-directory --directory-idd-abcdef0123456789
--regionregion-id
{ "DirectoryId": "d-abcdef0123456789" }
-
Répertoriez les groupes de sécurité du VPC.
$
aws ec2 describe-security-groups --filters '[{"Name":"vpc-id","Values":["vpc-07614ade95ebad1bc"]}]' --regionregion-id
-
Supprimez le groupe de sécurité personnalisé.
$
aws ec2 delete-security-group --group-idsg-021345abcdef6789
--regionregion-id
-
Supprimer les sous-réseaux.
$
aws ec2 delete-subnet --subnet-idsubnet-1234567890abcdef
--regionregion-id
$
aws ec2 delete-subnet --subnet-idsubnet-021345abcdef6789
--regionregion-id
-
Décrivez la passerelle Internet.
$
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": [] } ] }
-
Détachez la passerelle Internet.
$
aws ec2 detach-internet-gateway \ --internet-gateway-idigw-1234567890abcdef
\ --vpc-idvpc-021345abcdef6789
\ --regionregion-id
-
Supprimez la passerelle Internet.
$
aws ec2 delete-internet-gateway \ --internet-gateway-idigw-1234567890abcdef
\ --regionregion-id
-
Supprimer le VPC.
$
aws ec2 delete-vpc \ --vpc-idvpc-021345abcdef6789
\ --regionregion-id
-
Supprimez le secret qui contient le
ReadOnlyUser
mot de passe.$
aws secretsmanager delete-secret \ --secret-id arn:aws:secretsmanager:region-id
:123456789012
:secret:ADSecretPassword-1234
" \ --regionregion-id
-