Men-deploy forest Active Directory di Compute Engine

Last reviewed 2023-05-10 UTC

Dokumen ini menjelaskan cara men-deploy forest Active Directory di Compute Engine dengan cara yang mengikuti praktik terbaik yang dijelaskan dalam Praktik terbaik untuk menjalankan Active Directory di Google Cloud.

Panduan ini ditujukan bagi administrator dan engineer DevOps. Hal ini mengasumsikan bahwa Anda memiliki pemahaman yang kuat tentang Active Directory dan pengetahuan dasar tentang jaringan dan keamanan Google Cloud.

Arsitektur

Deployment ini terdiri dari dua project:

Arsitektur ini memungkinkan Anda melakukan hal berikut:

  • Deploy workload Windows tambahan dalam project terpisah, dan izinkan mereka menggunakan jaringan VPC Bersama dan forest Active Directory.
  • Integrasikan forest Active Directory dengan forest lokal yang ada untuk menerapkan pola resource-forest.

Sebelum memulai

Untuk mengikuti petunjuk dalam panduan ini, pastikan Anda memiliki hal berikut:

  • Rentang CIDR subnet untuk dua subnet:

    • Subnet pengontrol domain. Subnet ini berisi pengontrol domain. Menggunakan subnet khusus untuk pengontrol domain dapat membantu Anda membedakan traffic pengontrol domain dengan traffic server lain saat mengelola aturan firewall atau menganalisis log jaringan.

      Sebaiknya gunakan rentang CIDR subnet yang diukur /28 atau /29.

    • Subnet resource. Subnet ini berisi server dan workstation administratif. Gunakan rentang CIDR subnet yang cukup besar untuk mengakomodasi semua server yang ingin di-deploy.

    Pastikan subnet Anda tidak tumpang-tindih dengan subnet lokal mana pun, dan sediakan ruang yang cukup untuk pertumbuhan.

  • Nama domain DNS dan nama domain NetBIOS untuk domain root forest Active Directory. informasi selengkapnya tentang pemilihan nama, lihat Konvensi penamaan Microsoft.

Men-deploy jaringan bersama

Di bagian ini, Anda akan membuat project baru dan menggunakannya untuk men-deploy jaringan VPC Bersama. Kemudian, Anda akan menggunakan jaringan ini untuk men-deploy pengontrol domain Active Directory.

Buat project

Sekarang Anda membuat project baru dan menggunakannya untuk men-deploy jaringan VPC Bersama.

  1. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  2. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  3. Enable the Compute Engine and Cloud DNS APIs.

    Enable the APIs

Untuk mendapatkan izin yang Anda perlukan untuk men-deploy jaringan bersama, minta administrator untuk memberi Anda peran IAM berikut di project atau folder induk:

Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Menghapus VPC default

that you create.Secara default, Compute Engine membuat jaringan default di setiap project baru yang Anda buat. Jaringan ini dikonfigurasi dalam mode otomatis, yang berarti subnet telah dialokasikan sebelumnya untuk setiap region dan secara otomatis diberikan rentang CIDR.

Di bagian ini, Anda akan mengganti jaringan VPC ini dengan jaringan mode khusus yang berisi dua subnet dan menggunakan rentang CIDR khusus.

  1. Di Konsol Google Cloud, buka Cloud Shell.

    Aktifkan Cloud Shell

  2. Luncurkan PowerShell:

    pwsh
    
  3. Konfigurasikan gcloud CLI untuk menggunakan project baru:

    gcloud config set project PROJECT_ID
    

    Ganti PROJECT_ID dengan ID project Anda.

  4. Hapus semua aturan firewall yang terkait dengan VPC default:

    $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 }
    
  5. Hapus VPC default:

    & gcloud compute networks list --format "value(name)" |
      % { gcloud compute networks delete $_ --quiet }
    

Membuat jaringan VPC mode kustom

Sekarang Anda membuat jaringan VPC mode kustom di project host VPC Anda.

  1. Di PowerShell, lakukan inisialisasi variabel berikut:

    $VpcName = "VPC_NAME"
    $Region = "REGION"
    $SubnetRangeDomainControllers = "DC_CIDR"
    $SubnetRangeResources = "RESOURCES_CIDR"
    

    Ganti kode berikut:

    • VPC_NAME: nama VPC.
    • REGION: region untuk men-deploy pengontrol domain Active Directory.
    • DC_CIDR: rentang subnet yang akan digunakan untuk subnet pengontrol domain.
    • RESOURCES_CIDR: rentang subnet yang akan digunakan untuk subnet resource.

    Contoh:

    $VpcName = "ad"
    $Region = "us-central1"
    $SubnetRangeDomainControllers = "10.0.0.0/28"
    $SubnetRangeResources = "10.0.1.0/24"
    
  2. Buat VPC dan konfigurasi untuk digunakan sebagai jaringan VPC Bersama:

    $ProjectId = gcloud config get-value core/project
    & gcloud compute networks create $VpcName --subnet-mode custom
    & gcloud compute shared-vpc enable $ProjectId
    
  3. Buat subnet dan aktifkan Akses Google Pribadi agar Windows dapat diaktifkan tanpa akses 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
    

Men-deploy subnet dan aturan firewall

Sekarang Anda membuat aturan firewall untuk mengizinkan komunikasi Active Directory dalam VPC.

  1. Izinkan koneksi RDP ke semua instance VM melalui penerusan 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
    
  2. Izinkan kueri DNS dari Cloud DNS ke pengontrol domain.

    & 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
    

    Aturan firewall ini diperlukan agar zona penerusan DNS pribadi dapat berfungsi.

  3. Izinkan replikasi Active Directory antara pengontrol domain:

    & 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
    
  4. Izinkan login Active Directory dari VM yang ada di subnet resource ke pengontrol domain:

    & 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
    
  5. Jika Anda berencana untuk mengonfigurasi LDAP Aman, izinkan koneksi LDAP Aman dari VM yang ada di subnet resource ke pengontrol domain:

    & 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
    

    Anda hanya memerlukan aturan firewall ini jika Anda berencana untuk mengonfigurasi LDAP Aman.

  6. (Opsional) Buat aturan firewall yang mencatat semua upaya akses yang gagal. Log dapat berguna untuk mendiagnosis masalah konektivitas, tetapi mungkin menghasilkan volume data log yang signifikan.

    & 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
    

Deploy forest Activity Directory

Di bagian ini, Anda membuat project layanan baru dan melampirkannya ke project host VPC Bersama yang Anda buat sebelumnya. Kemudian, gunakan project layanan untuk men-deploy forest Active Directory baru dengan dua pengontrol domain.

Buat project

Sekarang Anda membuat project baru dan menggunakannya untuk men-deploy VM pengontrol domain Active Directory.

  1. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  2. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  3. Enable the Compute Engine and Secret Manager APIs.

    Enable the APIs

Untuk mendapatkan izin yang Anda perlukan untuk men-deploy forest Active Directory, minta administrator untuk memberi Anda peran IAM berikut pada project:

Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Siapkan konfigurasi

Langkah selanjutnya adalah menyiapkan konfigurasi untuk deployment Active Directory.

  1. Jika sebelumnya Anda telah menutup sesi PowerShell, buka Cloud Shell.

    Aktifkan Cloud Shell

  2. Luncurkan PowerShell:

    pwsh
    
  3. Konfigurasikan gcloud CLI untuk menggunakan project baru:

    gcloud config set project DC_PROJECT_ID
    

    Ganti DC_PROJECT_ID dengan ID project Anda.

  4. Gunakan PowerShell untuk membuat variabel berikut:

    $AdDnsDomain = "DNS_DOMAIN"
    $AdNetbiosDomain = "NETBIOS_DOMAIN"
    $VpcProjectId = "VPCHOST_PROJECT_ID"
    $VpcName = "VPC_NAME"
    $Region = "REGION"
    $Zones = "REGION-a", "REGION-b"
    

    Ganti kode berikut:

    • DNS_DOMAIN: nama domain root forest dari forest Active Directory, misalnya cloud.example.com.
    • NETBIOS_DOMAIN: nama domain NetBIOS untuk domain root forest, misalnya CLOUD.
    • VPCHOST_PROJECT_ID: project ID dari project host VPC yang Anda buat sebelumnya.
    • VPC_NAME: Nama jaringan VPC Bersama yang Anda buat sebelumnya.
    • REGION: Region untuk men-deploy pengontrol domain Active Directory. Perhatikan bahwa nama zona didasarkan pada nama region yang Anda tentukan. Anda dapat memperluas VPC dan domain untuk mencakup region tambahan kapan saja.

    Contoh:

    $AdDnsDomain = "cloud.example.com"
    $AdNetbiosDomain = "CLOUD"
    $VpcProjectId = "vpc-project-123"
    $VpcName = "ad"
    $Region = "us-west1"
    $Zones = "us-west1-a", "us-west1-b"
    

Membuat zona penerusan DNS pribadi

Sekarang Anda mencadangkan dua alamat IP statis untuk pengontrol domain dan membuat zona penerusan DNS pribadi yang meneruskan semua kueri DNS untuk domain Active Directory ke alamat IP tersebut.

  1. Instal project ke jaringan VPC Bersama:

    $ProjectId = gcloud config get-value core/project
    & gcloud compute shared-vpc associated-projects add $ProjectId --host-project $VpcProjectId
    
  2. Cadangkan dua alamat IP internal statis di subnet pengontrol domain:

    $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`)
    
  3. Buat Cloud DNS zona penerusan pribadi di project host VPC dan konfigurasikan zona untuk meneruskan kueri DNS ke dua alamat IP yang dicadangkan:

    & 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"
    

Membuat sandi DSRM

Sekarang Anda menentukan sandi Mode Pemulihan Layanan Direktori (DSRM) dan menyimpannya di Secret Manager. Kemudian, Anda memberi VM pengontrol domain akses sementara ke rahasia ini, sehingga VM tersebut dapat menggunakannya untuk men-deploy forest Active Directory.

  1. Buat sandi acak dan simpan di rahasia 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
    
  2. Buat akun layanan untuk instance VM pengontrol domain:

    $DcServiceAccount = gcloud iam service-accounts create ad-domaincontroller `
      --display-name "AD Domain Controller" `
      --format "value(email)"
    
  3. Beri izin akun layanan untuk membaca secret selama satu jam berikutnya:

    $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')"
    

Men-deploy pengontrol domain

Sekarang Anda men-deploy dua instance VM dan membuat forest dan domain Active Directory baru. Untuk meminimalkan jumlah langkah manual, gunakan skrip startup.

  1. Di PowerShell, jalankan perintah berikut untuk membuat skrip startup:

    '
    $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 $DomainNetbiosName `
            -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
    

    Skrip tersebut akan melakukan hal berikut:

    • Membaca sandi DSRM dari Secret Manager.
    • Mempromosikan VM ke pengontrol domain.
    • Konfigurasikan setelan DNS sehingga setiap pengontrol domain menggunakan alamat loopback sebagai server DNS.
    • Nonaktifkan IPv6.
    • Aktifkan perlindungan LSA.
  2. Buat instance VM untuk pengontrol domain pertama:

    $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
    

    Perintah ini melakukan hal berikut:

    • Buat VM Windows Server 2022 shielded.
    • Tetapkan akun layanan ad-domaincontroller ke VM agar dapat mengakses sandi DSRM.
    • Konfigurasikan agen tamu untuk menonaktifkan pengelola akun. Untuk mengetahui informasi selengkapnya tentang cara mengonfigurasi agen tamu, baca Mengaktifkan dan menonaktifkan fitur instance Windows.
    • Biarkan VM menginstal fitur Windows AD-Domain-Services dan DNS selama fase khusus sysprep.
    • Biarkan VM menjalankan skrip startup yang Anda buat sebelumnya.
  3. Buat instance VM lain untuk pengontrol domain kedua dan di zona yang berbeda:

    & 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
    
  4. Pantau proses inisialisasi pengontrol domain pertama dengan melihat output port serialnya:

    & gcloud compute instances tail-serial-port-output dc-1 --zone $Zones[0]
    

    Tunggu sekitar 10 menit sampai Anda melihat pesan Restarting to apply all settings..., lalu tekan Ctrl+C.

  5. Pantau proses inisialisasi pengontrol domain kedua dengan melihat output port serialnya:

    & gcloud compute instances tail-serial-port-output dc-2 --zone $Zones[1]
    

    Tunggu sekitar 10 menit sampai Anda melihat pesan Restarting to apply all settings..., lalu tekan Ctrl+C.

Forest dan domain Active Directory sekarang siap digunakan.

Menghubungkan ke pengontrol domain

Sekarang Anda dapat menyesuaikan forest Activity Directory dengan menghubungkan ke salah satu pengontrol domain.

  1. Di PowerShell, akses sandi untuk Administrator pengguna:

    gcloud secrets versions access latest --secret ad-password
    
  2. Hubungkan ke dc-1 menggunakan RDP dan login sebagai Administrator pengguna.

    Karena instance VM tidak memiliki alamat IP publik, Anda harus terhubung melalui penerusan TCP Identity-Aware Proxy.

Langkah selanjutnya