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. Panduan ini mengasumsikan bahwa Anda memiliki pemahaman yang kuat tentang Active Directory dan pengetahuan dasar tentang jaringan dan keamananGoogle Cloud .
Arsitektur
Deployment ini terdiri dari dua project:
- Project host yang berisi jaringan VPC Bersama, zona penerusan DNS pribadi, dan aturan firewall untuk Active Directory.
- Project layanan yang berisi dua pengontrol domain yang di-deploy di dua zona.
Arsitektur ini memungkinkan Anda melakukan hal berikut:
- Men-deploy workload Windows tambahan dalam project terpisah, dan mengizinkan workload menggunakan jaringan VPC Bersama dan forest Active Directory.
- Mengintegrasikan 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 berukuran
/28
atau/29
.Subnet resource. Subnet ini berisi server dan workstation administratif. Gunakan rentang CIDR subnet yang cukup besar untuk menampung 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. Untuk mengetahui informasi selengkapnya tentang pemilihan nama, baca artikel 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.
Membuat project
Sekarang Anda akan membuat project baru dan menggunakannya untuk men-deploy jaringan VPC Bersama.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine and Cloud DNS APIs.
Untuk mendapatkan izin yang Anda perlukan guna men-deploy jaringan bersama, minta administrator untuk memberi Anda peran IAM berikut pada project atau folder induk:
-
Compute Network Admin (
roles/compute.networkAdmin
) -
Compute Security Admin (
roles/compute.securityAdmin
) -
Compute Shared VPC Admin (
roles/compute.xpnAdmin
) -
DNS Administrator (
roles/dns.admin
)
Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, baca artikel Mengelola akses ke project, folder, dan organisasi.
Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.
Menghapus VPC default
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 diberi rentang CIDR.
Di bagian ini, Anda akan mengganti jaringan VPC ini dengan jaringan mode khusus yang berisi dua subnet dan menggunakan rentang CIDR khusus.
Di KonsolGoogle Cloud , buka Cloud Shell.
Luncurkan PowerShell:
pwsh
Konfigurasikan gcloud CLI untuk menggunakan project baru:
gcloud config set project PROJECT_ID
Ganti PROJECT_ID dengan ID project Anda.
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 }
Hapus VPC default:
& gcloud compute networks list --format "value(name)" | % { gcloud compute networks delete $_ --quiet }
Membuat jaringan VPC mode khusus
Sekarang Anda akan membuat jaringan VPC mode khusus di project host VPC Anda.
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"
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
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 akan membuat aturan firewall untuk mengizinkan komunikasi Active Directory dalam VPC.
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
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.
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
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
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.
(Opsional) Buat aturan firewall yang mencatat semua upaya akses yang gagal ke dalam log. Log ini dapat bermanfaat untuk mendiagnosis masalah konektivitas, tetapi mungkin akan 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
Men-deploy forest Activity Directory
Di bagian ini, Anda akan membuat project layanan baru dan melampirkannya ke project host VPC Bersama yang telah Anda buat sebelumnya. Kemudian, gunakan project layanan untuk men-deploy forest Active Directory baru dengan dua pengontrol domain.
Membuat project
Sekarang Anda akan membuat project baru dan menggunakannya untuk men-deploy VM pengontrol domain Active Directory.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine and Secret Manager APIs.
Untuk mendapatkan izin yang Anda perlukan guna men-deploy forest Active Directory, minta administrator untuk memberi Anda peran IAM berikut pada project:
-
Compute Instance Admin (v1) (
roles/compute.instanceAdmin.v1
) -
Service Account Admin (
roles/iam.serviceAccountAdmin
) -
Service Account User (
roles/iam.serviceAccountUser
) -
Secret Manager Admin (
roles/secretmanager.admin
) -
IAP-secured Tunnel User (
roles/iap.tunnelResourceAccessor
)
Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, baca artikel Mengelola akses ke project, folder, dan organisasi.
Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.
Menyiapkan konfigurasi
Langkah selanjutnya adalah menyiapkan konfigurasi untuk deployment Active Directory.
Jika sebelumnya Anda telah menutup sesi PowerShell, buka Cloud Shell.
Luncurkan PowerShell:
pwsh
Konfigurasikan gcloud CLI untuk menggunakan project baru:
gcloud config set project DC_PROJECT_ID
Ganti DC_PROJECT_ID dengan ID project Anda.
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, misalnyacloud.example.com
.NETBIOS_DOMAIN
: nama domain NetBIOS untuk domain root forest, misalnyaCLOUD
.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 akan mereservasi 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.
Hubungkan project ke jaringan VPC Bersama:
$ProjectId = gcloud config get-value core/project & gcloud compute shared-vpc associated-projects add $ProjectId --host-project $VpcProjectId
Lakukan reservasi 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`)
Buat zona penerusan pribadi Cloud DNS di project host VPC dan konfigurasikan zona untuk meneruskan kueri DNS ke dua alamat IP yang direservasi:
& 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 akan menentukan sandi Mode Pemulihan Layanan Direktori (DSRM) dan menyimpannya di Secret Manager. Kemudian, Anda akan memberi akses sementara ke secret ini kepada VM pengontrol domain, sehingga VM tersebut dapat menggunakannya untuk men-deploy forest Active Directory.
Buat sandi acak dan simpan di secret pada 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
Buat akun layanan untuk instance VM pengontrol domain:
$DcServiceAccount = gcloud iam service-accounts create ad-domaincontroller ` --display-name "AD Domain Controller" ` --format "value(email)"
Beri izin kepada 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 akan men-deploy dua instance VM serta membuat forest dan domain Active Directory baru. Untuk meminimalkan jumlah langkah manual, gunakan skrip startup.
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 $ActiveDirectoryNetbiosDomain ` -SafeModeAdministratorPassword $DsrmPassword ` -DomainMode Win2008R2 ` -ForestMode Win2008R2 ` -InstallDns ` -CreateDnsDelegation:$False ` -NoRebootOnCompletion:$True ` -Confirm:$false } else { do { Write-Host "Waiting for domain to become available..." Start-Sleep -s 60 & ipconfig /flushdns | Out-Null & nltest /dsgetdc:$ActiveDirectoryDnsDomain | Out-Null } while ($LASTEXITCODE -ne 0) Write-Host "Adding DC to $ActiveDirectoryDnsDomain ($ActiveDirectoryNetbiosDomain)..." Install-ADDSDomainController ` -DomainName $ActiveDirectoryDnsDomain ` -SafeModeAdministratorPassword $DsrmPassword ` -InstallDns ` -Credential (New-Object System.Management.Automation.PSCredential ("Administrator@$ActiveDirectoryDnsDomain", $DsrmPassword)) ` -NoRebootOnCompletion:$true ` -Confirm:$false } # # Configure DNS. # Write-Host "Configuring DNS settings..." Get-Netadapter| Disable-NetAdapterBinding -ComponentID ms_tcpip6 Set-DnsClientServerAddress ` -InterfaceIndex (Get-NetAdapter -Name Ethernet).InterfaceIndex ` -ServerAddresses 127.0.0.1 # # Enable LSA protection. # New-ItemProperty ` -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" ` -Name "RunAsPPL" ` -Value 1 ` -PropertyType DWord Write-Host "Restarting to apply all settings..." Restart-Computer ' | Out-File dc-startup.ps1 -Encoding ASCII
Skrip tersebut akan melakukan hal berikut:
- Membaca sandi DSRM dari Secret Manager.
- Mempromosikan VM ke pengontrol domain.
- Mengonfigurasi setelan DNS sehingga setiap pengontrol domain menggunakan loopback address sebagai server DNS.
- Menonaktifkan IPv6.
- Mengaktifkan perlindungan LSA.
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 akan melakukan hal berikut:
- Buat Shielded VM Windows Server 2022.
- 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 artikel Mengaktifkan dan menonaktifkan fitur instance Windows.
- Biarkan VM menginstal fitur Windows
AD-Domain-Services
danDNS
selama fase khusus sysprep. - Biarkan VM menjalankan skrip startup yang Anda buat sebelumnya.
Buat instance VM lain untuk pengontrol domain kedua dan tempatkan 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
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 tekanCtrl+C
.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 tekanCtrl+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.
Di PowerShell, akses sandi untuk pengguna
Administrator
:gcloud secrets versions access latest --secret ad-password
Hubungkan ke
dc-1
menggunakan RDP dan login sebagai penggunaAdministrator
.Karena instance VM tidak memiliki alamat IP publik, Anda harus terhubung melalui penerusan TCP Identity-Aware Proxy.
Langkah berikutnya
- Pelajari lebih lanjut pola untuk menggunakan Active Directory dalam lingkungan hybrid.
- Konfigurasikan Active Directory untuk VM agar dapat bergabung dengan domain secara otomatis.
- Pelajari lebih lanjut cara menggunakan Active Directory di berbagai firewall.