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:
- 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:
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine and Cloud DNS APIs.
Untuk mendapatkan izin yang Anda perlukan untuk men-deploy jaringan bersama, minta administrator untuk memberi Anda peran IAM berikut di 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, lihat 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
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 kustom yang berisi dua subnet dan menggunakan rentang CIDR kustom.
Di Konsol Google 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 kustom
Sekarang Anda membuat jaringan VPC mode kustom 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 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. 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine and Secret Manager APIs.
Untuk mendapatkan izin yang Anda perlukan untuk 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, lihat Mengelola akses ke project, folder, dan organisasi.
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.
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 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.
Instal project ke jaringan VPC Bersama:
$ProjectId = gcloud config get-value core/project & gcloud compute shared-vpc associated-projects add $ProjectId --host-project $VpcProjectId
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`)
Buat zona penerusan pribadi Cloud DNS 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.
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
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 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.
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.
- Konfigurasikan setelan DNS sehingga setiap pengontrol domain menggunakan alamat loopback sebagai server DNS.
- Nonaktifkan IPv6.
- Aktifkan 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 VM Windows Server 2022 terlindungi.
- 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
danDNS
selama fase khusus sysprep. - Biarkan VM menjalankan skrip startup yang Anda buat sebelumnya.
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
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
Administrator
pengguna: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 agar VM bergabung dengan domain secara otomatis.
- Pelajari lebih lanjut cara menggunakan Active Directory di seluruh firewall.