In diesem Dokument erfahren Sie, wie Sie Active Directory und Compute Engine so konfigurieren, dass Windows-VM-Instanzen automatisch einer Active Directory-Domain beitreten können.
Die Automatisierung von Windows-VMs mit Active Directory vereinfacht die Bereitstellung von Windows-Servern. Mit diesem Ansatz können Sie auch das Autoscaling nutzen, ohne auf die Vorteile von Active Directory beim Verwalten von Zugriff und Konfiguration verzichten zu müssen.
Dieses Dokument richtet sich an Systemadministratoren und setzt voraus, dass Sie mit Active Directory und Google Cloud Networking vertraut sind.
Die Konfiguration, die Sie anhand der Anleitung in diesem Dokument erstellen, kann die Grundlage für zusätzliche Arbeiten auf Windows-Servern in Google Cloud bilden. Wenn Sie diesen Vorgang abgeschlossen haben, können Sie beispielsweise ASP.NET-Anwendungen mit Windows-Authentifizierung in Windows-Containern bereitstellen.
Wenn Sie Managed Microsoft AD verwenden und keine automatische Bereinigung veralteter Computerkonten benötigen, können Sie die Windows-VMs mit der Funktion für den automatischen Domainbeitritt verknüpfen. Weitere Informationen finden Sie unter Windows-VM automatisch mit einer Domain verbinden.
Lernziele
- Stellen Sie eine Cloud Run-Anwendung bereit, mit der VM-Instanzen aus ausgewählten Projekten automatisch Ihre Active Directory-Domain hinzufügen können.
- Erstellen Sie einen Cloud Scheduler-Job, der Ihre Active Directory-Domain regelmäßig auf veraltete Computerkonten scannt und entfernt.
- Testen Sie die Einrichtung, indem Sie eine automatisch skalierte verwaltete Instanzgruppe (Managed Instance Group, MIG) von Domain-VM-Instanzen erstellen.
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
Die Anleitungen in diesem Dokument wurden so gestaltet, dass Ihre Ressourcennutzung innerhalb der Limits der Stufe Immer kostenlos von Google Cloud bleibt.
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Nach Abschluss dieses Dokuments können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.
Hinweise
In diesem Dokument wird davon ausgegangen, dass Sie Active Directory bereits in Google Cloud bereitgestellt haben. Dazu verwenden Sie Managed Service for Microsoft Active Directory (Managed Microsoft AD) oder stellen selbstverwaltete Domain-Controller in Google Cloud bereit.
Für die Durchführung der Verfahren benötigen Sie Folgendes:
- Administratorzugriff auf Ihre Active Directory-Domain, einschließlich der Möglichkeit, Nutzer, Gruppen und Organisationseinheiten (OE) zu erstellen.
- Einen nicht verwendeten /28 CIDR-IP-Bereich in der VPC, in der Ihre Active Directory-Domaincontroller bereitgestellt werden. Mit diesem IP-Bereich konfigurieren Sie den serverlosen VPC-Zugriff.
- Ein Subnetz, in dem Sie Windows-Instanzen bereitstellen. Das Subnetz muss für die Verwendung des privaten Google-Zugriffs konfiguriert sein.
Wenn Sie einen selbstverwalteten Domaincontroller verwenden, benötigen Sie außerdem Folgendes:
- Eine private DNS-Weiterleitungszone, die DNS-Abfragen an Ihre Active Directory-Domaincontroller weiterleitet.
Ansatz implementieren
In einer lokalen Umgebung können Sie Antwortdateien (unattend.xml
) und die JoinDomain
-Anpassung verwenden, um neue Computer automatisch einer Domain beitreten zu lassen. Obwohl Sie den gleichen Prozess in Google Cloud verwenden können, hat dieser Ansatz einige Einschränkungen:
- Für die Verwendung einer benutzerdefinierten
unattend.xml
-Datei ist ein benutzerdefiniertes Compute Engine-Image erforderlich. Wenn Sie ein benutzerdefiniertes Image mithilfe von Windows Updates auf dem neuesten Stand halten möchten, ist entweder eine laufende Wartung oder eine Vorarbeit zur Einrichtung der Automatisierung erforderlich. Sofern Sie kein benutzerdefiniertes Image aus anderen Gründen verwalten müssen, ist dieser zusätzliche Aufwand möglicherweise nicht gerechtfertigt. - Mit der Anpassung
JoinDomain
wird ein Image mit einer einzelnen Active Directory-Domain verknüpft, da der Domainname inunattend.xml
angegeben werden muss. Wenn Sie mehrere Active Directory-Domains oder Gesamtstrukturen verwalten (z. B. für separate Test- und Produktionsumgebungen), müssen Sie möglicherweise mehrere benutzerdefinierte Images für jede Domain verwalten. - Damit ein Windows-Computer einer Domain beitritt, sind Nutzeranmeldedaten erforderlich, die berechtigt sind, ein Computerobjekt im Verzeichnis zu erstellen. Wenn Sie die
JoinDomain
-Anpassung inunattend.xml
verwenden, müssen Sie diese Anmeldedaten als Klartext inunattend.xml
einbetten. Diese eingebetteten Anmeldedaten können das Image zu einem potenziellen Ziel für Angreifer machen. Sie können zwar den Zugriff auf das Image steuern, indem Sie die entsprechenden IAM-Berechtigungen (Identity and Access Management) festlegen. Die Verwaltung des Zugriffs auf ein benutzerdefiniertes Image erhöht jedoch unnötigerweise die Komplexität.
Bei dem Ansatz, der diesem Dokument zugrunde liegt, werden keine Antwortdateien verwendet; er erfordert deshalb auch keine speziell vorbereiteten Images. Verwenden Sie stattdessen beim Erstellen einer VM-Instanz das folgende sysprep-Spezialisierungsskript:
iex((New-Object System.Net.WebClient).DownloadString('https://DOMAIN'))
Mit diesem Skriptlet „Sysprep Specialize” wird ein Prozess gestartet, der im folgenden Diagramm dargestellt ist.
Der Prozess funktioniert so:
- Nachdem eine VM-Instanz erstellt wurde, wird Windows zum ersten Mal gestartet. Als Teil des Spezialisierungskonfigurationen führt Windows das sysprep-Spezialisierungsskript aus. Das Spezialisierungsskript ruft die Cloud Run-Anwendung
register-computer
auf und lädt ein PowerShell-Skript herunter, das den Domain-Join-Prozess steuert. - Windows ruft das heruntergeladene PowerShell-Skript auf.
- Das PowerShell-Skript ruft den Metadatenserver auf, um ein ID-Token zu erhalten, mit dem die VM-Instanz sicher identifiziert werden kann.
- Das Skript ruft die Anwendung
register-computer
noch einmal auf und übergibt das ID-Token für die Authentifizierung. - Die Anwendung validiert das ID-Token und extrahiert den Namen, die Zone und die Google Cloud-Projekt-ID der VM-Instanz.
- Die Anwendung prüft, ob die Active Directory-Domain so konfiguriert ist, dass VM-Instanzen aus dem angegebenen Projekt der Domain beitreten können. Die Anwendung sucht nach einem Active Directory-Domaincontroller und stellt eine Verbindung zu diesem her, um diese Überprüfung abzuschließen. Sie sucht nach einer Organisationseinheit (OE), deren Name der Google Cloud-Projekt-ID aus dem ID-Token entspricht. Wenn eine übereinstimmende Organisationseinheit gefunden wird, sind die VM-Instanzen des Projekts berechtigt, der Active Directory-Domain in der angegebenen Organisationseinheit beizutreten.
- Die Anwendung prüft, ob das Google Cloud-Projekt so konfiguriert ist, dass VM-Instanzen Active Directory beitreten können. Abschließend prüft die Anwendung mithilfe der Compute Engine API, ob sie auf die VM-Instanz zugreifen kann.
- Wenn alle Prüfungen erfolgreich sind, erstellt die Anwendung eine Computerkonto zu Testzwecken in Active Directory. Die Anwendung speichert den Namen, die Zone und die ID der VM-Instanz als Attribute im Computerkontoobjekt, damit es der VM-Instanz zugeordnet werden kann.
- Mit dem Kerberos-Passwortfestlegungsprotokoll weist die Anwendung dem Computerkonto ein zufälliges Passwort zu.
- Der Computername und das Passwort werden über einen TLS-gesicherten Kanal an die Windows-Instanz zurückgegeben.
- Mit dem zu Testzwecken erstellten Computerkonto lässt das PowerShell-Skript den Computer der Domain beitreten.
- Nach Abschluss der specialize-Konfigurationsphase wird der Computer neu gestartet.
Im weiteren Verlauf dieser Anleitung werden Sie durch die Schritte geführt, die zum Einrichten des automatischen Domainbeitritts erforderlich sind.
Active Directory-Domain vorbereiten
Zuerst müssen Sie Ihre Active Directory-Domain vorbereiten. Für diesen Schritt benötigen Sie einen Computer mit Administratorzugriff auf Ihre Active Directory-Domain.
Optional: Einschränken, wer Computer der Domain beitreten lassen kann
Sie können einschränken, wer Computer dafür konfigurieren kann, dass sie der Domain beitreten. Standardmäßig gewährt die Konfiguration des Gruppenrichtlinienobjekts (GPO) für die Standard-Domaincontrollerrichtlinie allen authentifizierten Nutzern das Nutzerrecht Add workstations to domain
.
Jeder Nutzer mit diesem Nutzerrecht kann Computer der Domain beitreten lassen. Da Sie den Beitritt von Computern in Ihre Active Directory-Domain automatisieren, stellt die universelle Gewährung dieser Zugriffsebene ein unnötiges Sicherheitsrisiko dar.
Ändern Sie die Standardkonfiguration des Standarddomaincontrollerrichtlinie-GPO so, dass die Gruppe der Nutzer beschränkt wird, die den automatischen Beitritt von Computern zu Ihrer Active Directory-Domain einrichten können:
- Melden Sie sich mit einem RDP-Client auf einem Computer an, der Administratorzugriff auf Ihre Active Directory-Domain hat.
- Öffnen Sie die Gruppenrichtlinien-Verwaltungskonsole (Group Policy Management Console, GPMC).
- Gehen Sie zu Gesamtstruktur > Domains > domain-name > Gruppenrichtlinienobjekte, wobei domain-name der Name Ihrer Active Directory-Domain ist.
- Klicken Sie mit der rechten Maustaste auf Standarddomaincontrollerrichtlinie und dann auf Bearbeiten.
- Wechseln Sie in der Konsole des Gruppenrichtlinienverwaltungs-Editors zu Computerkonfiguration > Richtlinien > Windows-Einstellungen > Sicherheitseinstellungen > Lokale Richtlinien > Zuweisen von Nutzerrechten.
- Doppelklicken Sie auf Hinzufügen von Arbeitsstationen zur Domain.
- Entfernen Sie unter Eigenschaften die Option Authentifizierte Nutzer aus der Liste.
- Wenn Administratoren der Domain manuell beitreten möchten (optional), klicken Sie auf Nutzer oder Gruppe hinzufügen und fügen Sie der Liste eine administrative Gruppe hinzu.
- Klicken Sie auf OK.
Sie können jetzt die Konsole des Gruppenrichtlinienverwaltungs-Editors und GPMC schließen.
Verzeichnisstruktur initialisieren
Sie erstellen jetzt eine Organisationseinheit, die als Container für alle projektspezifischen Organisationseinheiten dient:
- Melden Sie sich mit einem RDP-Client auf einem Computer an, der Administratorzugriff auf Ihre Active Directory-Domain hat.
- Öffnen Sie eine PowerShell-Sitzung mit erweiterten Rechten.
Erstellen Sie eine neue Organisationseinheit:
$ParentOrgUnitPath = (Get-ADDomain).ComputersContainer $ProjectsOrgUnitPath = New-ADOrganizationalUnit ` -Name 'Projects' ` -Path $ParentOrgUnitPath ` -PassThru
Active Directory-Nutzerkonto erstellen
Für den Zugriff auf Active Directory und zu Testzwecken erstellten Computerkonten benötigt die register-computer
-Anwendung ein Active Directory-Nutzerkonto:
Erstellen Sie ein Active Directory-Nutzerkonto namens
register-computer
, weisen Sie ihm ein zufälliges Passwort zu und legen Sie es in der OrganisationseinheitProjects
ab:# Generate a random password $Password = [Guid]::NewGuid().ToString()+"-"+[Guid]::NewGuid().ToString() # Create user $UpnSuffix = (Get-ADDomain).DNSRoot $RegisterComputerUser = New-ADUser ` -Name "register-computer Cloud Run app" ` -GivenName "Register" ` -Surname "Computer" ` -Path $ProjectsOrgUnitPath ` -SamAccountName "register-computer" ` -UserPrincipalName "register-computer@$UpnSuffix" ` -AccountPassword (ConvertTo-SecureString "$Password" -AsPlainText -Force) ` -PasswordNeverExpires $True ` -Enabled $True ` -PassThru
Erteilen Sie dem Konto
register-computer
die Mindestberechtigungen, die zum Verwalten von Computerkonten und Gruppen in der OrganisationseinheitProjects
und den untergeordneten Organisationseinheiten erforderlich sind:$AcesForContainerAndDescendents = @( "CCDC;Computer", # Create/delete computers "CCDC;Group" # Create/delete users ) $AcesForDescendents = @( "LC;;Computer" , # List child objects "RC;;Computer" , # Read security information "WD;;Computer" , # Change security information "WP;;Computer" , # Write properties "RP;;Computer" , # Read properties "CA;Reset Password;Computer", # ... "CA;Change Password;Computer", # ... "WS;Validated write to service principal name;Computer", "WS;Validated write to DNS host name;Computer", "LC;;Group", # List child objects "RC;;Group", # Read security information "WD;;Group", # Change security information "WP;;Group", # Write properties "RP;;Group" # Read properties ) $AcesForContainerAndDescendents | % { dsacls.exe $ProjectsOrgUnitPath /G "${RegisterComputerUser}:${_}" /I:T | Out-Null } $AcesForDescendents | % { dsacls.exe $ProjectsOrgUnitPath /G "${RegisterComputerUser}:${_}" /I:S | Out-Null }
Die Verarbeitung des Befehls kann einige Minuten dauern.
Gewähren Sie dem Konto
register-computer
die Berechtigung zum Löschen von DNS-Einträgen:Verwaltetes Microsoft Active Directory
Add-ADGroupMember -Identity "Cloud Service DNS Administrators" -Members ${RegisterComputerUser}
Selbstverwaltete Domain
$DnsPartition=(Get-ADDomain).SubordinateReferences | Where-Object {$_.StartsWith('DC=DomainDnsZones')} $DnsContainer="DC=$((Get-ADDomain).DNSRoot),CN=MicrosoftDNS,$DnsPartition" dsacls $DnsContainer /G "${RegisterComputerUser}:SD" /I:S
Zeigen Sie den OE-Pfad
Projects
und das generierte Passwort des Active Directory-Nutzerkontosregister-computer
. Notieren Sie sich die Werte, da Sie diese später benötigen.Write-Host "Password: $Password" Write-Host "Projects OU: $ProjectsOrgUnitPath"
Google Cloud-Projekt vorbereiten
Konfigurieren Sie jetzt Ihr Domainprojekt:
- Wenn Sie Managed Microsoft AD verwenden, ist Ihr Domainprojekt das Projekt, in dem Sie Managed Microsoft AD bereitgestellt haben.
- Wenn Sie selbstverwaltetes Active Directory verwenden, ist Ihr Domainprojekt das Projekt, das Ihre Active Directory-Domaincontroller ausführt. Im Fall einer freigegebenen VPC muss dieses Projekt mit dem VPC-Hostprojekt identisch sein.
Sie verwenden dieses Domainprojekt für Folgendes:
- Erstellen eines Secret Manager-Secrets, das das Passwort des Active Directory-Nutzerkontos
register-computer
enthält. - Bereitstellen der Anwendung
register-computer
. - Konfigurieren von Cloud Scheduler dafür, dass die Bereinigung veralteter Computerkonten ausgelöst wird.
Wir empfehlen, den Zugriff auf das Domainprojekt auf der Grundlage der geringsten Berechtigung zu gewähren.
Secret Manager-Secret erstellen
Öffnen Sie Cloud Shell in der Google Cloud Console.
Starten Sie PowerShell:
pwsh
Initialisieren Sie die folgende Variable und ersetzen Sie
domain-project-id
durch die ID Ihres Domain-Projekts:$DomainProjectId = "
domain-project-id
"Legen Sie das Domainprojekt als Standardprojekt fest:
& gcloud config set project $DomainProjectId
Aktivieren Sie die Secret Manager API:
& gcloud services enable secretmanager.googleapis.com
Geben Sie das Passwort des Active Directory-Nutzerkontos
register-computer
ein und speichern Sie es in einem Secret Manager-Secret:$RegisterComputerCredential = (Get-Credential -Credential 'register-computer') $TempFile = New-TemporaryFile Set-Content $TempFile $($RegisterComputerCredential.GetNetworkCredential().Password) -NoNewLine & gcloud secrets create ad-password --data-file $TempFile Remove-Item $TempFile
Zugriff auf Kerberos und LDAP gewähren
Um Domainverknüpfungen zu verwalten, greift die register-computer
App mithilfe der folgenden Protokolle auf Ihre Domaincontroller zu:
- LDAP (TCP/389) oder LDAPS (TCP/636)
- Kerberos (UDP/88, TCP/88)
Kerberos-Passwortänderung (UDP/464, TCP/464)
Verwaltetes Microsoft Active Directory
Sie müssen keine Firewallregeln konfigurieren.
Selbstverwaltete Domain
Erstellen Sie eine Firewallregel, die den Zugriff auf Ihre Domaincontroller zulässt.
Sie können die Regel anhand eines Netzwerktags anwenden, das Sie Ihren Domaincontrollern zugewiesen haben. Sie können sie auch mithilfe eines Dienstkontos anwenden.
Nach Netzwerk-Tag
& gcloud compute firewall-rules create allow-adkrb-from-serverless-to-dc ` --direction INGRESS ` --action allow ` --rules udp:88,tcp:88,tcp:389,tcp:636,udp:464,tcp:464 ` --source-ranges $ServerlessIpRange ` --target-tags dc-tag ` --network $VpcName ` --project vpc-project-id ` --priority 10000
Ersetzen Sie Folgendes:
dc-tag
: Das Netzwerk-Tag, das Ihren Domaincontroller-VMs zugewiesen ist.vpc-project-id
: Die ID des Projekts, in dem die VPC definiert ist. Wenn Sie eine freigegebene VPC verwenden, verwenden Sie das VPC-Hostprojekt. Verwenden Sie andernfalls die ID des Domainprojekts.
Nach Dienstkonto
& gcloud compute firewall-rules create allow-adkrb-from-serverless-to-dc ` --direction INGRESS ` --action allow ` --rules udp:88,tcp:88,tcp:389,tcp:636,udp:464,tcp:464 ` --source-ranges $ServerlessIpRange ` --target-service-accounts dc-sa ` --network $VpcName ` --project vpc-project-id ` --priority 10000
Ersetzen Sie Folgendes:
dc-sa
: Die E-Mail-Adresse des Dienstkontos, das Ihre Domaincontroller-VMs verwenden.vpc-project-id
: Die ID des Projekts, in dem die VPC definiert ist. Wenn Sie eine freigegebene VPC verwenden, verwenden Sie das VPC-Hostprojekt. Verwenden Sie andernfalls die ID des Domainprojekts.
Cloud Run-Anwendung bereitstellen
Sie haben nun Cloud Build eingerichtet, um die Anwendung register-computer
in Cloud Run bereitzustellen:
Klonen Sie in Cloud Shell das GitHub-Repository:
& git clone https://github.com/GoogleCloudPlatform/gce-automated-ad-join.git cd gce-automated-ad-join/ad-joining
Initialisieren Sie die folgenden Variablen:
$ServerlessRegion = "
serverless-region
" $VpcName = "vpc-name
" $VpcSubnet = "subnet-name
" $AdDomain = "dns-domain-name
" $AdNetbiosDomain = "netbios-domain-name
" $ProjectsOrgUnitPath = "projects-ou-distinguished-name
"Ersetzen Sie Folgendes:
serverless-region
: Die Region, in der dieregister-computer
-App bereitgestellt werden soll. Die Region muss nicht mit der Region übereinstimmen, in der Sie VM-Instanzen bereitstellen möchten.vpc-name
: Der Name des VPC-Netzwerks, das Ihre Active Directory-Domaincontroller enthält.subnet-name
: Das Subnetz vonvpc-name
, das für den direkten VPC-Zugriff verwendet werden soll. Das Subnetz muss sich in derselben Region wieserverless-region
befinden.dns-domain-name
: Der DNS-Domainname Ihrer Active Directory-Domain.netbios-domain-name
: Der NetBIOS-Name Ihrer Active Directory-Domain.projects-ou-distinguished-name
: Der Distinguished Name Ihrer OrganisationseinheitProjects
.
Aktivieren Sie die Cloud Run und Cloud Build APIs.
& gcloud services enable run.googleapis.com cloudbuild.googleapis.com
Erstellen Sie ein Dienstkonto
register-computer-app
für die Cloud Run-Anwendung:& gcloud iam service-accounts create register-computer-app ` --display-name="register computer Cloud Run app"
Erstellen Sie ein Dienstkonto
build-service
zum Ausführen von Cloud Build-Triggern:& gcloud iam service-accounts create build-service ` --display-name="Cloud Build build agent"
Erlauben Sie dem Cloud Run-Dienstkonto, das Secret zu lesen, das das Active Directory-Passwort enthält:
& gcloud secrets add-iam-policy-binding ad-password ` --member "serviceAccount:register-computer-app@$DomainProjectId.iam.gserviceaccount.com" ` --role "roles/secretmanager.secretAccessor"
Gewähren Sie Cloud Build die erforderlichen Berechtigungen für die Bereitstellung in Cloud Run:
$DomainProjectNumber = (gcloud projects describe $DomainProjectId --format='value(projectNumber)') & gcloud iam service-accounts add-iam-policy-binding register-computer-app@$DomainProjectId.iam.gserviceaccount.com ` --member "serviceAccount:build-service@$DomainProjectId.iam.gserviceaccount.com" ` --role "roles/iam.serviceAccountUser" & gcloud projects add-iam-policy-binding $DomainProjectId ` --member "serviceAccount:build-service@$DomainProjectId.iam.gserviceaccount.com" ` --role roles/cloudbuild.builds.builder & gcloud projects add-iam-policy-binding $DomainProjectId ` --member "serviceAccount:build-service@$DomainProjectId.iam.gserviceaccount.com" ` --role roles/run.admin
Verwenden Sie die Datei
cloudbuild.yaml
als Vorlage, um eine benutzerdefinierte Cloud Run-Build-Konfiguration zu erstellen, die Ihrer Umgebung entspricht:$Build = (Get-Content cloudbuild.yaml) $Build = $Build.Replace('__SERVERLESS_REGION__', "$ServerlessRegion") $Build = $Build.Replace('__PROJECTS_DN__', "$ProjectsOrgUnitPath") $Build = $Build.Replace('__AD_DOMAIN__', "$AdDomain") $Build = $Build.Replace('__AD_NETBIOS_DOMAIN__', "$AdNetbiosDomain") $Build = $Build.Replace('__SERVICE_ACCOUNT_EMAIL__', "register-computer-app@$DomainProjectId.iam.gserviceaccount.com") $Build = $Build.Replace('__SERVERLESS_NETWORK__', "$VpcName") $Build = $Build.Replace('__SERVERLESS_SUBNET__', "$VpcSubnet") $Build | Set-Content .\cloudbuild.hydrated.yaml
Erstellen Sie die Anwendung und stellen Sie sie in Cloud Run bereit:
& gcloud builds submit . ` --config cloudbuild.hydrated.yaml ` --substitutions _IMAGE_TAG=$(git rev-parse --short HEAD) ` --service-account "projects/$DomainProjectId/serviceAccounts/build-service@$DomainProjectId.iam.gserviceaccount.com" ` --default-buckets-behavior regional-user-owned-bucket
Die Bereitstellung kann einige Minuten dauern.
Ermitteln Sie die URL der Cloud Run-Anwendung:
$RegisterUrl = (gcloud run services describe register-computer ` --platform managed ` --region $ServerlessRegion ` --format=value`(status.url`)) Write-Host $RegisterUrl
Notieren Sie sich die URL. Sie benötigen sie, wenn Sie eine VM-Instanz erstellen, die Active Directory verknüpfen soll.
Rufen Sie die Cloud Run-Anwendung auf, um zu prüfen, ob die Bereitstellung funktioniert hat:
Invoke-RestMethod $RegisterUrl
Ein PowerShell-Skript wird angezeigt. Die VM führt dieses Skript während der specialize-Phase aus, durch die es der Domain beitritt.
Aktivieren eines Projekts für den automatischen Domänenbeitritt
Mit der Anwendung register-computer
können VM-Instanzen nur dann einer Active Directory-Domain beitreten, wenn das Projekt der VM für den automatischen Domainbeitritt aktiviert ist. Diese Sicherheitsmaßnahme verhindert, dass VMs, die mit nicht autorisierten Projekten verbunden sind, auf Ihre Domain zugreifen.
So aktivieren Sie ein Projekt für den automatischen Domainbeitritt:
- Erstellen Sie in Active Directory eine Organisationseinheit, deren Name mit Ihrer Google Cloud-Projekt-ID übereinstimmt.
- Gewähren Sie der Anwendung
register-computer
Zugriff auf das Google Cloud-Projekt.
Erstellen Sie zuerst die Organisationseinheit:
- Melden Sie sich mit einem RDP-Client auf einem Computer an, der Administratorzugriff auf Ihre Active Directory-Domain hat.
- Wechseln Sie im MMC-Snap-in "Active Directory-Nutzer und -Computer" zur Organisationseinheit
Projects
. - Klicken Sie mit der rechten Maustaste auf die Organisationseinheit und wählen Sie Neu > Organisationseinheit aus.
- Geben Sie im Dialogfeld Neues Objekt die ID für das Google Cloud-Projekt ein, in dem Ihre VMs bereitgestellt werden sollen.
- Klicken Sie auf OK.
Gewähren Sie als Nächstes der Anwendung register-computer
Zugriff auf das Google Cloud-Projekt:
Starten Sie PowerShell in Cloud Shell:
pwsh
Initialisieren Sie die folgenden Variablen:
$ProjectId = "
project-id
" $DomainProjectId = "domain-project-id
"Ersetzen Sie
project-id
durch die ID des Google Cloud-Projekts, um Ihre VMs bereitzustellendomain-project-id
durch die ID Ihres Domain-Projekts
Weisen Sie dem Dienstkonto
register-computer-app
die RolleCompute Viewer
für das Projekt zu:& gcloud projects add-iam-policy-binding $ProjectId ` --member "serviceAccount:register-computer-app@$DomainProjectId.iam.gserviceaccount.com" ` --role "roles/compute.viewer"
Ihr Projekt ist jetzt für die Unterstützung des automatischen Domainbeitritts bereit.
Domainbeitritt testen
So können Sie prüfen, ob die Einrichtung ordnungsgemäß funktioniert:
- Einzelne VM-Instanz erstellen, die die Active Directory-Domain automatisch verbindet
- Verwaltete Instanzgruppe von VM-Instanzen erstellen, die der Active Directory-Domain automatisch hinzugefügt werden
VM-Instanz erstellen und beitreten
Erstellen Sie eine VM-Instanz, die der Active Directory-Domain automatisch hinzugefügt wird:
Kehren Sie zur PowerShell-Sitzung in Cloud Shell zurück und initialisieren Sie die folgenden Variablen:
$Region = "vpc-region-to-deploy-vm" $Zone = "zone-to-deploy-vm" $Subnet = "vpc-subnet-to-deploy-vm" $ServerlessRegion = "
serverless-region
"Dabei gilt:
vpc-region-to-deploy-vm
: Die Region, in der die VM-Instanz bereitgestellt wird.vpc-subnet-to-deploy-vm
: Das Subnetz, in dem die VM-Instanz bereitgestellt wird.zone-to-deploy-vm
: Die Zone, in der die VM-Instanz bereitgestellt wird.serverless-region
: Die Region, in der Sie die Cloud Run-Anwendung bereitgestellt haben.
Legen Sie das Standardprojekt und die -zone fest:
& gcloud config set project $ProjectId & gcloud config set compute/zone $Zone
Suchen Sie noch einmal die URL der Cloud Run-Anwendung:
$RegisterUrl = (gcloud run services describe register-computer ` --platform managed ` --region $ServerlessRegion ` --format value`(status.url`) ` --project $DomainProjectId)
Erstellen Sie eine Instanz, indem Sie das specialize-Skriptlet übergeben, das die VM zum Beitritt zur Domain veranlasst:
Shared VPC
$VpchostProjectId = (gcloud compute shared-vpc get-host-project $ProjectId --format=value`(name`)) & gcloud compute instances create join-01 ` --image-family windows-2019-core ` --image-project windows-cloud ` --machine-type n1-standard-2 ` --no-address ` --subnet projects/$VpchostProjectId/regions/$Region/subnetworks/$Subnet ` --metadata "sysprep-specialize-script-ps1=iex((New-Object System.Net.WebClient).DownloadString('$RegisterUrl'))"
Eigenständige VPC
& gcloud compute instances create join-01 ` --image-family=windows-2019-core ` --image-project=windows-cloud ` --machine-type=n1-standard-2 ` --no-address ` --subnet $Subnet ` --metadata "sysprep-specialize-script-ps1=iex((New-Object System.Net.WebClient).DownloadString('$RegisterUrl'))"
Wenn Sie einen benutzerdefinierten Hostnamen verwenden möchten, fügen Sie dem Befehl den Parameter
--hostname
hinzu.Wenn Sie eine Windows Server-Version vor Windows Server 2019 verwenden, ist TLS 1.2 möglicherweise standardmäßig deaktiviert. Dies kann dazu führen, dass das Spezialisierungsskript fehlschlägt. Zum Aktivieren von TLS 1.2 verwenden Sie stattdessen das folgende Skript:
[Net.ServicePointManager]::SecurityProtocol=[Net.SecurityProtocolType]::Tls12;iex((New-Object System.Net.WebClient).DownloadString('$RegisterUrl'))
Überwachen Sie den Bootvorgang:
& gcloud compute instances tail-serial-port-output join-01
Nach etwa einer Minute tritt der Computer Ihrer Active Directory-Domain bei. Die Ausgabe sieht etwa so aus:
Domain : corp.example.com DomainController : dc-01.corp.example.com. OrgUnitPath : OU=test-project-123,OU=Projects,DC=corp,DC=example,DC=com WARNING: The changes will take effect after you restart the computer Computer successfully joined to domain
Wenn Sie den Bootvorgang nicht mehr beobachten möchten, drücken Sie
CTRL+C
.
Beitritt der VM zu Active Directory prüfen
- Melden Sie sich mit einem RDP-Client auf einem Computer an, der Administratorzugriff auf Ihre Active Directory-Domain hat.
- Öffnen Sie das MMC-Snap-in "Active Directory-Nutzer und -Computer".
- Im Menü muss Ansicht > Erweiterte Funktionen aktiviert sein.
- Wechseln Sie zu der Organisationseinheit, die nach der Google Cloud-Projekt-ID benannt ist, in der Sie eine VM-Instanz erstellt haben.
- Doppelklicken Sie auf das Konto
join-01
. Klicken Sie im Dialogfeld Eigenschaften auf den Tab Attribut-Editor.
Das Computerkonto wird mit zusätzlichen LDAP-Attributen versehen. Mit diesen Attributen können Sie die Verknüpfung zwischen dem Computerobjekt und der Compute Engine-Instanz verfolgen.
Prüfen Sie, ob die Liste die folgenden LDAP-Attribute und -Werte enthält.
LDAP-Attribut Wert msDS-cloudExtensionAttribute1
Google Cloud-Projekt-ID msDS-cloudExtensionAttribute2
Compute Engine-Zone msDS-cloudExtensionAttribute3
Name der Compute Engine-Instanz Die
msDS-cloudExtensionAttribute
-Attribute sind Allzweckattribute und werden nicht von Active Directory selbst verwendet.
Fehlerdiagnose
Wenn Ihre VM-Instanz nicht der Domain beitreten konnte, prüfen Sie das Log der register-computer
-Anwendung:
Rufen Sie in der Google Cloud Console Cloud Run auf.
Klicken Sie auf die Anwendung
register-computer
.Klicken Sie im Menü auf Logs.
Instanz löschen
Nachdem Sie geprüft haben, ob die VM-Instanz der Active Directory-Domain beigetreten ist, löschen Sie die Instanz.
Löschen Sie die Instanz:
& gcloud compute instances delete join-01 --quiet
Verwaltete Instanzgruppe erstellen und beitreten lassen
Sie können auch prüfen, ob Instanzen einer MIG automatisch Ihrer Domain beitreten können.
Erstellen Sie eine Instanzvorlage, indem Sie das specialize-Skript übergeben, das die VM zum Beitritt zur Domain veranlasst:
Shared VPC
$VpchostProjectId = (gcloud compute shared-vpc get-host-project $ProjectId --format=value`(name`)) & gcloud compute instance-templates create ad-2019core-n1-std-2 ` --image-family windows-2019-core ` --image-project windows-cloud ` --no-address ` --machine-type n1-standard-2 ` --subnet projects/$VpchostProjectId/regions/$Region/subnetworks/$Subnet ` --metadata "sysprep-specialize-script-ps1=iex((New-Object System.Net.WebClient).DownloadString('$RegisterUrl'))"
Eigenständige VPC
& gcloud compute instance-templates create ad-2019core-n1-std-2 ` --image-family windows-2019-core ` --image-project windows-cloud ` --no-address ` --machine-type n1-standard-2 ` --subnet projects/$ProjectId/regions/$Region/subnetworks/$Subnet ` --metadata "sysprep-specialize-script-ps1=iex((New-Object System.Net.WebClient).DownloadString('$RegisterUrl'))"
Erstellen Sie eine verwaltete Instanzgruppe, die die Instanzvorlage verwendet:
& gcloud compute instance-groups managed create group-01 ` --template ad-2019core-n1-std-2 ` --size=3
Warten Sie einige Minuten und prüfen Sie dann mithilfe der Active Directory-Nutzer und des Computer-MCC-Snap-ins, ob vier neue Objekte in Active Directory erstellt wurden:
- Drei Computerkonten, die den drei VM-Instanzen der verwalteten Instanzgruppe entsprechen.
- Eine Gruppe namens
group-01
, die die drei Computerkonten enthält. Wenn Sie gruppenverwaltete Dienstkonten verwenden möchten, können Sie mit dieser Gruppe den Zugriff darauf gewähren.
Nachdem Sie geprüft haben, dass die VM-Instanzen aus den MIGs Ihrer Active Directory-Domain beitreten können, können Sie die verwaltete Gruppe und die Instanzvorlage so löschen:
Löschen Sie in Cloud Shell die Instanzgruppe:
& gcloud compute instance-groups managed delete group-01 --quiet
Löschen Sie die Instanzvorlage:
& gcloud compute instance-templates delete ad-2019core-n1-std-2 --quiet
Bereinigung veralteter Computerkonten planen
Die Automatisierung des Beitritts von Computern in die Domain reduziert den Aufwand beim Einrichten neuer Server und ermöglicht die Verwendung von Servern, die Teil einer Domain sind, in verwalteten Instanzgruppen. Im Laufe der Zeit können sich jedoch veraltete Computerkonten in der Domain ansammeln.
Um diese Ansammlung zu vermeiden, sollten Sie die Anwendung register-computer
so einrichten, dass Ihre Active Directory-Domain regelmäßig auf veraltete Konten und die zugehörigen DNS-Einträge geprüft wird und diese automatisch entfernt werden.
Die Anwendung register-computer
kann mithilfe der msDS-cloudExtensionAttribute
-Attribute von Computerkonten feststellen, welche Computerkonten veraltet sind. Diese Attribute enthalten den Projekt-, Zonen- und Instanznamen der entsprechenden VM-Instanz in Compute Engine. Für jedes Computerkonto kann die Anwendung prüfen, ob die entsprechende VM-Instanz noch verfügbar ist. Ist dies nicht der Fall, gilt das Computerkonto als veraltet und wird entfernt.
Für das Auslösen eines Computerkontos rufen Sie den Endpunkt /cleanup
der Cloud Run-Anwendung auf. Wenn Sie verhindern möchten, dass nicht autorisierte Nutzer eine Bereinigung auslösen, muss diese Anfrage mithilfe des Dienstkontos register-computer-app
authentifiziert werden.
Cloud Scheduler konfigurieren
Die folgenden Schritte zeigen, wie Sie Cloud Scheduler in Verbindung mit Pub/Sub so einrichten, dass automatisch alle 24 Stunden eine Bereinigung ausgelöst wird:
Aktivieren Sie in Cloud Shell die Cloud Scheduler API in Ihrem Domainprojekt:
& gcloud services enable cloudscheduler.googleapis.com
Legen Sie für
AppEngineLocation
einen gültigen App Engine-Speicherort fest, an dem Cloud Scheduler bereitgestellt werden soll:$AppEngineLocation = "
location
"Ersetzen Sie
location
durch die App Engine-Region, die Sie für Ihre VPC-Ressourcen ausgewählt haben, z. B.us-central
. Wenn diese Region nicht als App Engine-Standort verfügbar ist, wählen Sie einen Standort in Ihrer Nähe aus. Weitere Informationen finden Sie unter Regionen und Zonen.Initialisieren Sie App Engine:
& gcloud app create --region $AppEngineLocation --project $DomainProjectId
Cloud Scheduler-Job erstellen:
& gcloud scheduler jobs create http cleanup-computer-accounts ` --schedule "every 24 hours" ` --uri "$RegisterUrl/cleanup" ` --oidc-service-account-email register-computer-app@$DomainProjectId.iam.gserviceaccount.com ` --oidc-token-audience "$RegisterUrl/" ` --project $DomainProjectId
Dieser Job ruft die Anwendung
register-computer
einmal alle 24 Stunden auf und verwendet das Dienstkontoregister-computer-app
zur Authentifizierung.
Bereinigung auslösen
Sie können den Cloud Scheduler-Job manuell auslösen, um Ihre Konfiguration auf Bereinigung veralteter Computerkonten zu prüfen.
Rufen Sie in der Google Cloud Console Cloud Scheduler auf.
Klicken Sie für den von Ihnen erstellten
cleanup-computer-accounts
-Job auf Jetzt ausführen.Nach einigen Sekunden wird in der Spalte Ergebnis Erfolgreich angezeigt. Dies bedeutet, dass die Bereinigung erfolgreich abgeschlossen wurde. Wenn die Ergebnisspalte nicht innerhalb weniger Sekunden automatisch aktualisiert wird, klicken Sie auf die Schaltfläche Aktualisieren.
Weitere Details dazu, welche Konten entfernt wurden, finden Sie in den Logs der Anwendung register-computer
.
Rufen Sie in der Google Cloud Console Cloud Run auf.
Klicken Sie auf die Anwendung
register-computer
.Klicken Sie im Menü auf Logs.
Logeinträge geben an, dass die Computerkonten der VM-Instanzen, die Sie zum Testen des Domainbeitritts verwendet haben, als veraltet eingestuft und entfernt wurden.
Bereinigen
Wenn Sie dieses Dokument als Referenz für andere Referenzarchitekturen und Bereitstellungen verwenden, lesen Sie die anderen Dokumente zum Ausführen der Bereinigungsschritte.
Wenn Sie die in diesem Dokument verwendete Google Cloud-Einrichtung nicht beibehalten möchten, können Sie diese Einrichtung so rückgängig machen:
Löschen Sie in Cloud Shell den Cloud Scheduler-Job:
& gcloud scheduler jobs delete cleanup-computer-accounts ` --project $DomainProjectId
Löschen Sie die Cloud Run-Anwendung:
& gcloud run services delete register-computer ` --platform managed ` --project $DomainProjectId ` --region $ServerlessRegion
Löschen Sie das Secret Manager-Secret:
gcloud secrets delete ad-password --project $DomainProjectId
Löschen Sie die Firewallregel für den LDAP- und Kerberos-Zugriff:
gcloud compute firewall-rules delete allow-adkrb-from-serverless-to-dc --project=
vpc-project-id
Ersetzen Sie
vpc-project-id
durch die ID des Projekts, in dem die VPC definiert ist. Wenn Sie eine freigegebene VPC verwenden, verwenden Sie das VPC-Hostprojekt. Verwenden Sie andernfalls die ID des Domainprojekts.
Active Directory-Änderungen zurücksetzen
- Melden Sie sich mit einem RDP-Client auf einem Computer an, der Administratorzugriff auf Ihre Active Directory-Domain hat.
- Wechseln Sie im MMC-Snap-in "Active Directory-Nutzer und -Computer" zur Organisationseinheit
Projects
. - Löschen Sie das Active Directory-Nutzerkonto
register-computer
. - Löschen Sie die Organisationseinheit, die Sie zum Testen des automatischen Domainbeitritts erstellt haben.
Nächste Schritte
- Informationen zum Verbinden von Windows-VMs mit einer Managed Microsoft AD-Domain mithilfe von automatisiertem Domain-Join finden Sie unter Windows-VM automatisch mit einer Domain verbinden.
- Best Practices für die Bereitstellung einer Active Directory-Ressourcengesamtstruktur in Google Cloud
- Weitere Referenzarchitekturen, Diagramme und Best Practices finden Sie im Cloud-Architekturcenter.