Active Directory für VMs für den automatischen Domainbeitritt konfigurieren


In dieser Anleitung 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.

Diese Anleitung richtet sich an Systemadministratoren und setzt voraus, dass Sie mit Active Directory und Google Cloud Networking vertraut sind.

Die Konfiguration, die Sie in dieser Anleitung erstellen, kann die Grundlage für zusätzliche Arbeiten auf Windows-Servern in Google Cloud bilden. Wenn Sie diese Anleitung abgeschlossen haben, können Sie 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 über die automatische Domainbeitrittsfunktion zusammenführen. 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. Neuen Google Cloud-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

Hinweis

In dieser Anleitung 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 diese Anleitung 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:

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 in unattend.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 in unattend.xml verwenden, müssen Sie diese Anmeldedaten als Klartext in unattend.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 dieser Anleitung 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.

Prozess, der durch das Skriptlet "Sysprep Specialize" gestartet wird

Der Prozess funktioniert so:

  1. 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.
  2. Windows ruft das heruntergeladene PowerShell-Skript auf.
  3. Das PowerShell-Skript ruft den Metadatenserver auf, um ein ID-Token zu erhalten, mit dem die VM-Instanz sicher identifiziert werden kann.
  4. Das Skript ruft die Anwendung register-computer noch einmal auf und übergibt das ID-Token für die Authentifizierung.
  5. Die Anwendung validiert das ID-Token und extrahiert den Namen, die Zone und die Google Cloud-Projekt-ID der VM-Instanz.
  6. 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.
  7. 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.
  8. 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.
  9. Mit dem Kerberos-Passwortfestlegungsprotokoll weist die Anwendung dem Computerkonto ein zufälliges Passwort zu.
  10. Der Computername und das Passwort werden über einen TLS-gesicherten Kanal an die Windows-Instanz zurückgegeben.
  11. Mit dem zu Testzwecken erstellten Computerkonto lässt das PowerShell-Skript den Computer der Domain beitreten.
  12. 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:

  1. Verwenden Sie einen RDP-Client, um sich auf einem Computer anzumelden, der Administratorzugriff auf Ihre Active Directory-Domain hat.
  2. Öffnen Sie die Gruppenrichtlinien-Verwaltungskonsole (Group Policy Management Console, GPMC).
  3. Gehen Sie zu Gesamtstruktur > Domains > domain-name > Gruppenrichtlinienobjekte, wobei domain-name der Name Ihrer Active Directory-Domain ist.
  4. Klicken Sie mit der rechten Maustaste auf Standarddomaincontrollerrichtlinie und dann auf Bearbeiten.
  5. Wechseln Sie in der Konsole des Gruppenrichtlinienverwaltungs-Editors zu Computerkonfiguration > Richtlinien > Windows-Einstellungen > Sicherheitseinstellungen > Lokale Richtlinien > Zuweisen von Nutzerrechten.
  6. Doppelklicken Sie auf Hinzufügen von Arbeitsstationen zur Domain.
  7. Entfernen Sie unter Eigenschaften die Option Authentifizierte Nutzer aus der Liste.
  8. 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.
  9. 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:

  1. Verwenden Sie einen RDP-Client, um sich auf einem Computer anzumelden, der Administratorzugriff auf Ihre Active Directory-Domain hat.
  2. Öffnen Sie eine PowerShell-Sitzung mit erweiterten Rechten.
  3. 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:

  1. Erstellen Sie ein Active Directory-Nutzerkonto namens register-computer, weisen Sie ihm ein zufälliges Passwort zu und legen Sie es in der Organisationseinheit Projects 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
    
  2. Erteilen Sie dem Konto register-computer die Mindestberechtigungen, die zum Verwalten von Computerkonten und Gruppen in der Organisationseinheit Projects 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.

  3. Zeigen Sie den OE-Pfad Projects und das generierte Passwort des Active Directory-Nutzerkontos register-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 von serverlosem VPC-Zugriff, damit Cloud Run auf Active Directory zugreifen kann.
  • 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

  1. Öffnen Sie Cloud Shell in der Google Cloud Console.

    Cloud Shell öffnen

  2. Starten Sie PowerShell:

    pwsh
    
  3. Initialisieren Sie die folgende Variable und ersetzen Sie domain-project-id durch die ID Ihres Domain-Projekts:

    $DomainProjectId = "domain-project-id"
    
  4. Legen Sie das Domainprojekt als Standardprojekt fest:

    & gcloud config set project $DomainProjectId
    
  5. Aktivieren Sie die Secret Manager API:

    & gcloud services enable secretmanager.googleapis.com
    
  6. 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
    

Serverlosen VPC-Zugriff bereitstellen

Die Anwendung register-computer muss mit Ihren Active Directory-Domaincontrollern kommunizieren. Damit Cloud Run auf Ressourcen in einer VPC zugreifen kann, konfigurieren Sie jetzt den serverlosen VPC-Zugriff:

  1. Initialisieren Sie die folgenden Variablen:

    $VpcName = "vpc-name"
    $ServerlessRegion = "serverless-region"
    $ServerlessIpRange = "serverless-ip-range"
    

    Dabei gilt:

    • vpc-name: Der Name des VPC-Netzwerks, das Ihre Active Directory-Domaincontroller enthält.
    • serverless-region: ist die Region, in der die Cloud Run-Funktion bereitgestellt werden soll. Wählen Sie eine Region aus, die sowohl Cloud Run als auch den serverlosen VPC-Zugriff unterstützt. Die Region muss nicht mit der Region übereinstimmen, in der Sie VM-Instanzen bereitstellen möchten.

    • serverless-ip-range: Wird vom serverlosen VPC-Zugriff verwendet, um die Kommunikation zwischen Cloud Run und Ressourcen in Ihrer VPC zu ermöglichen. Stellen Sie einen nicht reservierten CIDR /28-IP-Bereich ein. Er darf sich nicht mit vorhandenen Subnetzen in Ihrem VPC-Netzwerk überschneiden.

  2. Aktivieren Sie die APIs für serverlosen VPC-Zugriff:

    & gcloud services enable vpcaccess.googleapis.com
    
  3. Stellen Sie serverlosen VPC-Zugriff bereit:

    & gcloud compute networks vpc-access connectors create serverless-connector `
        --network $VpcName `
        --region $ServerlessRegion `
        --range $ServerlessIpRange
    

Zugriff auf Kerberos und LDAP gewähren

Obwohl der serverlose VPC-Zugriff Cloud Run den Zugriff auf Ressourcen in Ihrer VPC ermöglicht, unterliegt die Verbindung zu den Kerberos- und LDAP-Endpunkten Ihrer Domaincontroller weiterhin Firewallregeln.

Sie müssen eine Firewallregel erstellen, die serverlosen Ressourcen den Zugriff auf Ihre Domaincontroller über die folgenden Protokolle ermöglicht: LDAP (TCP/389), LDAPS (TCP/636), Kerberos (UDP/88, TCP/88) oder Kerberos-Passwortänderung (UDP/464, TCP/464). Sie können die Regel anhand eines Netzwerktags anwenden, das Sie Ihren Domaincontrollern zugewiesen haben. Sie können sie auch mithilfe eines Dienstkontos anwenden.

  • Führen Sie einen der folgenden Befehle in Cloud Shell aus, um die Firewallregel anzuwenden:

    Nach Netzwerktag

    & 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 Netzwerktag, 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:

  1. 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
    
  2. Initialisieren Sie die folgenden Variablen:

    $AdDomain = "dns-domain-name"
    $AdNetbiosDomain = "netbios-domain-name"
    $ProjectsOrgUnitPath = "projects-ou-distinguished-name"
    

    Ersetzen Sie Folgendes:

    • 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 Organisationseinheit Projects.
  3. Aktivieren Sie die Cloud Run und Cloud Build APIs.

    & gcloud services enable run.googleapis.com cloudbuild.googleapis.com
    
  4. 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"
    
  5. 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"
    
  6. 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:$DomainProjectNumber@cloudbuild.gserviceaccount.com" `
      --role "roles/iam.serviceAccountUser"
    
    & gcloud projects add-iam-policy-binding $DomainProjectId `
      --member "serviceAccount:$DomainProjectNumber@cloudbuild.gserviceaccount.com" `
      --role roles/run.admin
    
  7. 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 | Set-Content .\cloudbuild.hydrated.yaml
    
  8. 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)
    

    Die Bereitstellung kann einige Minuten dauern.

  9. 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.

  10. 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:

  1. Melden Sie sich mit einem RDP-Client auf einem Computer an, der Administratorzugriff auf Ihre Active Directory-Domain hat.
  2. Wechseln Sie im MMC-Snap-in "Active Directory-Nutzer und -Computer" zur Organisationseinheit Projects.
  3. Klicken Sie mit der rechten Maustaste auf die Organisationseinheit und wählen Sie Neu > Organisationseinheit aus.
  4. Geben Sie im Dialogfeld Neues Objekt die ID für das Google Cloud-Projekt ein, in dem Ihre VMs bereitgestellt werden sollen.
  5. Klicken Sie auf OK.

Gewähren Sie als Nächstes der Anwendung register-computer Zugriff auf das Google Cloud-Projekt:

  1. Starten Sie PowerShell in Cloud Shell:

    pwsh
    
  2. 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 bereitzustellen
    • domain-project-id durch die ID Ihres Domain-Projekts
  3. Weisen Sie dem Dienstkonto register-computer-app die Rolle Compute 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:

  1. 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.
  2. Legen Sie das Standardprojekt und die -zone fest:

    & gcloud config set project $ProjectId
    & gcloud config set compute/zone $Zone
    
  3. 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)
    
  4. 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'))
    
  5. Ü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

  1. Melden Sie sich mit einem RDP-Client auf einem Computer an, der Administratorzugriff auf Ihre Active Directory-Domain hat.
  2. Öffnen Sie das MMC-Snap-in "Active Directory-Nutzer und -Computer".
  3. Im Menü muss Ansicht > Erweiterte Funktionen aktiviert sein.
  4. Wechseln Sie zu der Organisationseinheit, die nach der Google Cloud-Projekt-ID benannt ist, in der Sie eine VM-Instanz erstellt haben.
  5. Doppelklicken Sie auf das Konto join-01.
  6. 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 allgemeine Attribute 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:

  1. Rufen Sie in der Google Cloud Console Cloud Run auf.

    Öffnen Sie Cloud Run.

  2. Klicken Sie auf die Anwendung register-computer.

  3. 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.

  1. 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'))"
    
  2. 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:

  1. Löschen Sie in Cloud Shell die Instanzgruppe:

    & gcloud compute instance-groups managed delete group-01 --quiet
    
  2. 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 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:

  1. Aktivieren Sie in Cloud Shell die Cloud Scheduler API in Ihrem Domainprojekt:

    & gcloud services enable cloudscheduler.googleapis.com
    
  2. 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.

  3. Initialisieren Sie App Engine:

    & gcloud app create --region $AppEngineLocation --project $DomainProjectId
    
  4. 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 Dienstkonto register-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.

  1. Rufen Sie in der Google Cloud Console Cloud Scheduler auf.

    Zu Cloud Scheduler

  2. 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.

  1. Rufen Sie in der Google Cloud Console Cloud Run auf.

    Öffnen Sie Cloud Run.

  2. Klicken Sie auf die Anwendung register-computer.

  3. 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 diese Anleitung als Referenz für andere Anleitungen verwenden, lesen Sie die anderen Anleitungen zum Ausführen der Bereinigungsschritte in dieser Anleitung.

Wenn Sie die für diese Anleitung verwendete Google Cloud-Einrichtung nicht beibehalten möchten, können Sie diese Einrichtung so rückgängig machen:

  1. Löschen Sie in Cloud Shell den Cloud Scheduler-Job:

    & gcloud scheduler jobs delete cleanup-computer-accounts `
      --project $DomainProjectId
    
  2. Löschen Sie die Cloud Run-Anwendung:

    & gcloud run services delete register-computer `
      --platform managed `
      --project $DomainProjectId `
      --region $ServerlessRegion
    
  3. Löschen Sie das Secret Manager-Secret:

    gcloud secrets delete ad-password --project $DomainProjectId
    
  4. 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.

  5. Löschen Sie den serverlosen VPC-Zugriff:

    gcloud compute networks vpc-access connectors delete serverless-connector --region $ServerlessRegion --quiet
    

Active Directory-Änderungen zurücksetzen

  1. Melden Sie sich mit einem RDP-Client auf einem Computer an, der Administratorzugriff auf Ihre Active Directory-Domain hat.
  2. Wechseln Sie im MMC-Snap-in "Active Directory-Nutzer und -Computer" zur Organisationseinheit Projects.
  3. Löschen Sie das Active Directory-Nutzerkonto register-computer.
  4. Löschen Sie die Organisationseinheit, die Sie zum Testen des automatischen Domainbeitritts erstellt haben.

Nächste Schritte