Ce document explique comment déployer une forêt Active Directory sur Compute Engine de manière à suivre les bonnes pratiques décrites sur la page Bonnes pratiques pour exécuter Active Directory sur Google Cloud.
Ce guide est destiné aux administrateurs et aux ingénieurs en DevOps. Il suppose que vous avez une bonne compréhension d'Active Directory et des connaissances de base sur la mise en réseau et la sécurité Google Cloud.
Architecture
Le déploiement se compose de deux projets:
- Un projet hôte qui contient un réseau VPC partagé, une zone de transfert DNS privée et des règles de pare-feu pour Active Directory.
- Un projet de service contenant deux contrôleurs de domaine déployés dans deux zones.
Cette architecture vous permet d'effectuer les opérations suivantes :
- Déployer des charges de travail Windows supplémentaires dans des projets distincts et de leur faire utiliser le réseau VPC partagé et la forêt Active Directory.
- Intégrer la forêt Active Directory à une forêt sur site existante pour implémenter le modèle de forêt de ressources.
Avant de commencer
Pour suivre les instructions de ce guide, vérifiez que vous disposez des éléments suivants:
Plages CIDR de sous-réseaux pour deux sous-réseaux:
Sous-réseau des contrôleurs de domaine. Ce sous-réseau contient les contrôleurs de domaine. L'utilisation d'un sous-réseau dédié aux contrôleurs de domaine vous aide à distinguer le trafic des contrôleurs de domaine d'un autre trafic de serveur lorsque vous gérez les règles de pare-feu ou analysez les journaux réseau.
Nous vous recommandons d'utiliser une plage CIDR de sous-réseau de taille
/28
ou/29
.Sous-réseau de ressources. Ce sous-réseau contient des serveurs et des postes de travail administratifs. Utilisez une plage CIDR de sous-réseau suffisamment grande pour accueillir tous les serveurs que vous prévoyez de déployer.
Assurez-vous que vos sous-réseaux ne chevauchent aucun sous-réseau local et laissez suffisamment de place pour la croissance.
Un nom de domaine DNS et un nom de domaine NetBIOS pour le domaine racine de la forêt Active Directory. Pour en savoir plus sur le choix d'un nom, consultez les conventions d'attribution de noms Microsoft.
Déployer un réseau partagé
Dans cette section, vous allez créer un projet et l'utiliser pour déployer un réseau VPC partagé. Vous utiliserez ensuite ce réseau pour déployer les contrôleurs de domaine Active Directory.
Créer un projet
Vous allez maintenant créer un projet et l'utiliser pour déployer un réseau VPC partagé.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine and Cloud DNS APIs.
Pour obtenir les autorisations nécessaires pour déployer un réseau partagé, demandez à votre administrateur de vous accorder les rôles IAM suivants sur le projet ou le dossier parent :
-
Administrateur de réseaux Compute (
roles/compute.networkAdmin
) -
Administrateur de sécurité de Compute (
roles/compute.securityAdmin
) -
Administrateur VPC Compute partagé (
roles/compute.xpnAdmin
) -
Administrateur DNS (
roles/dns.admin
)
Pour en savoir plus sur l'attribution de rôles, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations.
Vous pouvez également obtenir les autorisations requises via des rôles personnalisés ou d'autres rôles prédéfinis.
Supprimer le VPC par défaut
Par défaut, Compute Engine crée un réseau par défaut dans chaque nouveau projet que vous créez. Ce réseau est configuré en mode automatique, ce qui signifie qu'un sous-réseau est préalloué pour chaque région et automatiquement affecté à une plage CIDR.
Dans cette section, vous allez remplacer ce réseau VPC par un réseau en mode personnalisé contenant deux sous-réseaux et utilisant des plages CIDR personnalisées.
Dans la console Google Cloud, ouvrez Cloud Shell.
Lancez PowerShell :
pwsh
Configurez gcloud CLI pour utiliser le nouveau projet:
gcloud config set project PROJECT_ID
Remplacez PROJECT_ID par l'ID de votre projet.
Supprimez toutes les règles de pare-feu associées au VPC par défaut:
$ProjectId = gcloud config get-value core/project & gcloud compute firewall-rules list ` --filter "network=default" ` --format "value(name)" | % { gcloud compute firewall-rules delete --quiet $_ --project $ProjectId }
Supprimez le VPC par défaut :
& gcloud compute networks list --format "value(name)" | % { gcloud compute networks delete $_ --quiet }
Créer un réseau VPC en mode personnalisé
Vous allez maintenant créer un réseau VPC en mode personnalisé dans votre projet hôte VPC.
Dans PowerShell, initialisez les variables suivantes:
$VpcName = "VPC_NAME" $Region = "REGION" $SubnetRangeDomainControllers = "DC_CIDR" $SubnetRangeResources = "RESOURCES_CIDR"
Remplacez les éléments suivants :
VPC_NAME
: nom du VPC.REGION
: la région dans laquelle déployer les contrôleurs de domaine Active Directory.DC_CIDR
: plage de sous-réseau à utiliser pour le sous-réseau des contrôleurs de domaine.RESOURCES_CIDR
: plage de sous-réseau à utiliser pour le sous-réseau de ressources.
Exemple :
$VpcName = "ad" $Region = "us-central1" $SubnetRangeDomainControllers = "10.0.0.0/28" $SubnetRangeResources = "10.0.1.0/24"
Créez le VPC et configurez-le pour qu'il soit utilisé en tant que réseau VPC partagé :
$ProjectId = gcloud config get-value core/project & gcloud compute networks create $VpcName --subnet-mode custom & gcloud compute shared-vpc enable $ProjectId
Créez les sous-réseaux et activez l'accès privé à Google afin que Windows puisse l'activer sans accès à Internet.
& gcloud compute networks subnets create domain-controllers ` --network $VpcName ` --range $SubnetRangeDomainControllers ` --region $Region ` --enable-private-ip-google-access & gcloud compute networks subnets create resources ` --network $VpcName ` --range $SubnetRangeResources ` --region $Region ` --enable-private-ip-google-access
Déployer des sous-réseaux et des règles de pare-feu
Vous allez maintenant créer des règles de pare-feu pour autoriser la communication Active Directory dans le VPC.
Autorisez les connexions RDP à toutes les instances de VM via le transfert TCP Cloud IAP:
& gcloud compute firewall-rules create allow-rdp-ingress-from-iap ` --direction INGRESS ` --action allow ` --rules tcp:3389 ` --enable-logging ` --source-ranges 35.235.240.0/20 ` --network $VpcName ` --priority 10000
Autorise les requêtes DNS de Cloud DNS aux contrôleurs de domaine.
& gcloud compute firewall-rules create allow-dns-ingress-from-clouddns ` --direction INGRESS ` --action=allow ` --rules udp:53,tcp:53 ` --enable-logging ` --source-ranges 35.199.192.0/19 ` --target-tags ad-domaincontroller ` --network $VpcName ` --priority 10000
Cette règle de pare-feu est nécessaire au fonctionnement de la zone de transfert DNS privée.
Autorisez la réplication Active Directory entre les contrôleurs de domaine :
& gcloud compute firewall-rules create allow-replication-between-addc ` --direction INGRESS ` --action allow ` --rules "icmp,tcp:53,udp:53,tcp:88,udp:88,udp:123,tcp:135,tcp:389,udp:389,tcp:445,udp:445,tcp:49152-65535" ` --enable-logging ` --source-tags ad-domaincontroller ` --target-tags ad-domaincontroller ` --network $VpcName ` --priority 10000
Autorisez les ouvertures de session Active Directory aux contrôleurs de domaine depuis les VM situées dans le sous-réseau des ressources:
& gcloud compute firewall-rules create allow-logon-ingress-to-addc ` --direction INGRESS ` --action allow ` --rules "icmp,tcp:53,udp:53,tcp:88,udp:88,udp:123,tcp:135,tcp:389,udp:389,tcp:445,udp:445,tcp:464,udp:464,tcp:3268,udp:3268,tcp:9389,tcp:49152-65535" ` --enable-logging ` --source-ranges $SubnetRangeResources ` --target-tags ad-domaincontroller ` --network $VpcName ` --priority 10000
Si vous prévoyez de configurer LDAP sécurisé, autorisez les connexions LDAP sécurisées des VM situées dans le sous-réseau de ressources aux contrôleurs de domaine :
& gcloud compute firewall-rules create allow-ldaps-ingress-to-addc ` --direction INGRESS ` --action allow ` --rules tcp:636 ` --enable-logging ` --source-ranges $SubnetRangeResources ` --target-tags ad-domaincontroller ` --network $VpcName ` --priority 10000
Vous n'avez besoin de cette règle de pare-feu que si vous prévoyez de configurer LDAP sécurisé.
(Facultatif) Créez une règle de pare-feu qui consigne toutes les tentatives d'accès ayant échoué. Les journaux peuvent s'avérer utiles pour diagnostiquer les problèmes de connectivité, mais ils peuvent générer un volume important de données de journalisation.
& gcloud compute firewall-rules create deny-ingress-from-all ` --direction INGRESS ` --action deny ` --rules tcp:0-65535,udp:0-65535 ` --enable-logging ` --source-ranges 0.0.0.0/0 ` --network $VpcName ` --priority 65000
Déployer la forêt Active Directory
Dans cette section, vous allez créer un projet de service et l'associer au projet hôte de VPC partagé que vous avez créé précédemment. Vous utiliserez ensuite le projet de service pour déployer une nouvelle forêt Active Directory avec deux contrôleurs de domaine.
Créer un projet
Vous allez maintenant créer un projet et l'utiliser pour déployer les VM du contrôleur de domaine Active Directory.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine and Secret Manager APIs.
Pour obtenir les autorisations nécessaires pour déployer la forêt Active Directory, demandez à votre administrateur de vous accorder les rôles IAM suivants sur le projet :
-
Administrateur d'instances Compute (v1) (
roles/compute.instanceAdmin.v1
) -
Administrateur de compte de service (
roles/iam.serviceAccountAdmin
) -
Utilisateur du compte de service (
roles/iam.serviceAccountUser
) -
Administrateur Secret Manager (
roles/secretmanager.admin
) -
Utilisateur de tunnels sécurisés par IAP (
roles/iap.tunnelResourceAccessor
)
Pour en savoir plus sur l'attribution de rôles, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations.
Vous pouvez également obtenir les autorisations requises via des rôles personnalisés ou d'autres rôles prédéfinis.
Préparer la configuration
L'étape suivante consiste à préparer la configuration pour le déploiement Active Directory.
Si vous avez déjà fermé la session PowerShell, ouvrez Cloud Shell.
Lancez PowerShell :
pwsh
Configurez gcloud CLI pour utiliser le nouveau projet:
gcloud config set project DC_PROJECT_ID
Remplacez DC_PROJECT_ID par l'ID de votre projet.
Utilisez PowerShell pour créer les variables suivantes:
$AdDnsDomain = "DNS_DOMAIN" $AdNetbiosDomain = "NETBIOS_DOMAIN" $VpcProjectId = "VPCHOST_PROJECT_ID" $VpcName = "VPC_NAME" $Region = "REGION" $Zones = "REGION-a", "REGION-b"
Remplacez les éléments suivants :
DNS_DOMAIN
: nom de domaine racine de la forêt Active Directory, par exemplecloud.example.com
.NETBIOS_DOMAIN
: nom de domaine NetBIOS pour le domaine racine de la forêt, par exempleCLOUD
.VPCHOST_PROJECT_ID
: ID du projet hôte de VPC que vous avez créé précédemment.VPC_NAME
: nom du réseau VPC partagé que vous avez créé précédemment.REGION
: la région dans laquelle déployer les contrôleurs de domaine Active Directory. Notez que les noms des zones sont basés sur les noms de la région que vous spécifiez. Vous pouvez étendre le VPC et votre domaine pour couvrir des régions supplémentaires à tout moment.
Exemple :
$AdDnsDomain = "cloud.example.com" $AdNetbiosDomain = "CLOUD" $VpcProjectId = "vpc-project-123" $VpcName = "ad" $Region = "us-west1" $Zones = "us-west1-a", "us-west1-b"
Créer une zone de transfert DNS privée
Vous réservez maintenant deux adresses IP statiques pour vos contrôleurs de domaine et créez une zone de transfert DNS privée qui transfère toutes les requêtes DNS du domaine Active Directory vers ces adresses IP.
Associez le projet au réseau VPC partagé :
$ProjectId = gcloud config get-value core/project & gcloud compute shared-vpc associated-projects add $ProjectId --host-project $VpcProjectId
Réservez deux adresses IP internes statiques dans le sous-réseau des contrôleurs de domaine :
$AddressOfDc1 = gcloud compute addresses create dc-1 ` --region $Region ` --subnet "projects/$VpcProjectId/regions/$Region/subnetworks/domain-controllers" ` --format value`(address`) $AddressOfDc2 = gcloud compute addresses create dc-2 ` --region $Region ` --subnet "projects/$VpcProjectId/regions/$Region/subnetworks/domain-controllers" ` --format value`(address`)
Créez une zone de transfert privée Cloud DNS dans le projet hôte du VPC et configurez-la pour transférer les requêtes DNS vers les deux adresses IP réservées :
& gcloud dns managed-zones create $AdDnsDomain.Replace(".", "-") ` --project $VpcProjectId ` --dns-name $AdDnsDomain ` --description "Active Directory forwarding zone" ` --networks $VpcName ` --visibility private ` --forwarding-targets "$AddressOfDc1,$AddressOfDc2"
Créer un mot de passe DSRM
Vous allez maintenant définir le mot de passe du mode de restauration du service d'annuaire (DSRM) et le stocker dans Secret Manager. Accordez ensuite aux VM du contrôleur de domaine un accès temporaire à ce secret afin qu'elles puissent l'utiliser pour déployer la forêt Active Directory.
Générez un mot de passe aléatoire et stockez-le dans un secret Secret Manager:
# Generate a random password. $DsrmPassword = [Guid]::NewGuid().ToString()+"-"+[Guid]::NewGuid().ToString() $TempFile = New-TemporaryFile Set-Content $TempFile "$DsrmPassword" -NoNewLine & gcloud secrets create ad-password --data-file $TempFile Remove-Item $TempFile
Créez le compte de service pour les instances de VM du contrôleur de domaine:
$DcServiceAccount = gcloud iam service-accounts create ad-domaincontroller ` --display-name "AD Domain Controller" ` --format "value(email)"
Accordez au compte de service l'autorisation de lire le secret pendant une heure :
$Expiry = [DateTime]::UtcNow.AddHours(1).ToString("o") & gcloud secrets add-iam-policy-binding ad-password ` --member=serviceAccount:$($DcServiceAccount) ` --role=roles/secretmanager.secretAccessor ` --condition="title=Expires after 1h,expression=request.time < timestamp('$Expiry')"
Déployer des contrôleurs de domaine
Vous allez maintenant déployer deux instances de VM et créer une forêt et un domaine Active Directory. Pour réduire le nombre d'étapes manuelles, utilisez des scripts de démarrage.
Dans PowerShell, exécutez la commande suivante pour générer un script de démarrage:
' $ErrorActionPreference = "Stop" # # Only run the script if the VM is not a domain controller already. # if ((Get-CimInstance -ClassName Win32_OperatingSystem).ProductType -eq 2) { exit } # # Read configuration from metadata. # Import-Module "${Env:ProgramFiles}\Google\Compute Engine\sysprep\gce_base.psm1" $ActiveDirectoryDnsDomain = Get-MetaData -Property "attributes/ActiveDirectoryDnsDomain" -instance_only $ActiveDirectoryNetbiosDomain = Get-MetaData -Property "attributes/ActiveDirectoryNetbiosDomain" -instance_only $ActiveDirectoryFirstDc = Get-MetaData -Property "attributes/ActiveDirectoryFirstDc" -instance_only $ProjectId = Get-MetaData -Property "project-id" -project_only $Hostname = Get-MetaData -Property "hostname" -instance_only $AccessToken = (Get-MetaData -Property "service-accounts/default/token" | ConvertFrom-Json).access_token # # Read the DSRM password from secret manager. # $Secret = (Invoke-RestMethod ` -Headers @{ "Metadata-Flavor" = "Google"; "x-goog-user-project" = $ProjectId; "Authorization" = "Bearer $AccessToken"} ` -Uri "https://secretmanager.googleapis.com/v1/projects/$ProjectId/secrets/ad-password/versions/latest:access") $DsrmPassword = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($Secret.payload.data)) $DsrmPassword = ConvertTo-SecureString -AsPlainText $DsrmPassword -force # # Promote. # Write-Host "Setting administrator password..." Set-LocalUser -Name Administrator -Password $DsrmPassword if ($ActiveDirectoryFirstDc -eq $env:COMPUTERNAME) { Write-Host "Creating a new forest $ActiveDirectoryDnsDomain ($ActiveDirectoryNetbiosDomain)..." Install-ADDSForest ` -DomainName $ActiveDirectoryDnsDomain ` -DomainNetbiosName $ActiveDirectoryNetbiosDomain ` -SafeModeAdministratorPassword $DsrmPassword ` -DomainMode Win2008R2 ` -ForestMode Win2008R2 ` -InstallDns ` -CreateDnsDelegation:$False ` -NoRebootOnCompletion:$True ` -Confirm:$false } else { do { Write-Host "Waiting for domain to become available..." Start-Sleep -s 60 & ipconfig /flushdns | Out-Null & nltest /dsgetdc:$ActiveDirectoryDnsDomain | Out-Null } while ($LASTEXITCODE -ne 0) Write-Host "Adding DC to $ActiveDirectoryDnsDomain ($ActiveDirectoryNetbiosDomain)..." Install-ADDSDomainController ` -DomainName $ActiveDirectoryDnsDomain ` -SafeModeAdministratorPassword $DsrmPassword ` -InstallDns ` -Credential (New-Object System.Management.Automation.PSCredential ("Administrator@$ActiveDirectoryDnsDomain", $DsrmPassword)) ` -NoRebootOnCompletion:$true ` -Confirm:$false } # # Configure DNS. # Write-Host "Configuring DNS settings..." Get-Netadapter| Disable-NetAdapterBinding -ComponentID ms_tcpip6 Set-DnsClientServerAddress ` -InterfaceIndex (Get-NetAdapter -Name Ethernet).InterfaceIndex ` -ServerAddresses 127.0.0.1 # # Enable LSA protection. # New-ItemProperty ` -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" ` -Name "RunAsPPL" ` -Value 1 ` -PropertyType DWord Write-Host "Restarting to apply all settings..." Restart-Computer ' | Out-File dc-startup.ps1 -Encoding ASCII
Le script a les effets suivants :
- Lire le mot de passe DSRM depuis Secret Manager
- Définissez la VM comme contrôleur de domaine.
- Configurez les paramètres DNS de sorte que chaque contrôleur de domaine utilise l'adresse de rebouclage en tant que serveur DNS.
- Désactivez IPv6.
- Activez la protection LSA.
Créez une instance de VM pour le premier contrôleur de domaine:
$Subnet = "projects/$VpcProjectId/regions/$Region/subnetworks/domain-controllers" $Metadata = ` "ActiveDirectoryDnsDomain=$AdDnsDomain", "ActiveDirectoryNetbiosDomain=$AdNetbiosDomain", "ActiveDirectoryFirstDc=dc-1", "sysprep-specialize-script-ps1=Install-WindowsFeature AD-Domain-Services; Install-WindowsFeature DNS", "disable-account-manager=true" -join "," & gcloud compute instances create dc-1 ` --image-family windows-2022 ` --image-project windows-cloud ` --machine-type n2-standard-8 ` --tags ad-domaincontroller ` --metadata "$Metadata" ` --metadata-from-file windows-startup-script-ps1=dc-startup.ps1 ` --no-address ` --network-interface "no-address,private-network-ip=$AddressOfDc1,subnet=$Subnet" ` --service-account $DcServiceAccount ` --scopes cloud-platform ` --zone $Zones[0] ` --shielded-integrity-monitoring ` --shielded-secure-boot ` --shielded-vtpm ` --deletion-protection
Cette commande effectue les opérations suivantes :
- Créez une VM Windows Server 2022 protégée :
- Attribuez le compte de service
ad-domaincontroller
à la VM pour qu'elle puisse accéder au mot de passe DSRM. - Configurez l'agent invité pour désactiver le gestionnaire de comptes. Pour en savoir plus sur la configuration de l'agent invité, consultez la section Activer et désactiver les fonctionnalités d'instance Windows.
- Laissez la VM installer les fonctionnalités Windows
AD-Domain-Services
etDNS
pendant la phase "specialize" de sysprep. - Laissez la VM exécuter le script de démarrage que vous avez créé précédemment.
Créez une autre instance de VM pour le deuxième contrôleur de domaine et placez-la dans une autre zone :
& gcloud compute instances create dc-2 ` --image-family windows-2022 ` --image-project windows-cloud ` --machine-type n2-standard-8 ` --tags ad-domaincontroller ` --metadata "$Metadata" ` --metadata-from-file windows-startup-script-ps1=dc-startup.ps1 ` --no-address ` --network-interface "no-address,private-network-ip=$AddressOfDc2,subnet=$Subnet" ` --service-account $DcServiceAccount ` --scopes cloud-platform ` --zone $Zones[1] ` --shielded-integrity-monitoring ` --shielded-secure-boot ` --shielded-vtpm ` --deletion-protection
Surveillez le processus d'initialisation du premier contrôleur de domaine en affichant sa sortie du port série:
& gcloud compute instances tail-serial-port-output dc-1 --zone $Zones[0]
Attendez environ 10 minutes jusqu'à ce que le message
Restarting to apply all settings...
s'affiche, puis appuyez surCtrl+C
.Surveillez le processus d'initialisation du deuxième contrôleur de domaine en consultant la sortie de son port série :
& gcloud compute instances tail-serial-port-output dc-2 --zone $Zones[1]
Attendez environ 10 minutes jusqu'à ce que le message
Restarting to apply all settings...
s'affiche, puis appuyez surCtrl+C
.
La forêt et le domaine Active Directory sont maintenant prêts à l'emploi.
Se connecter à un contrôleur de domaine
Vous pouvez maintenant personnaliser la forêt Active Directory en vous connectant à l'un des contrôleurs de domaine.
Dans PowerShell, accédez au mot de passe de l'utilisateur
Administrator
:gcloud secrets versions access latest --secret ad-password
Connectez-vous à
dc-1
à l'aide de RDP et connectez-vous en tant qu'utilisateurAdministrator
.Comme l'instance de VM ne possède pas d'adresse IP publique, vous devez vous connecter via le transfert TCP Identity-Aware Proxy.
Étapes suivantes
- En savoir plus sur les modèles d'utilisation d'Active Directory dans un environnement hybride.
- Configurez Active Directory pour permettre aux VM de s'associer automatiquement à un domaine.
- En savoir plus sur l'utilisation d'Active Directory via des pare-feu.