Mengonfigurasikan Active Directory agar VM bergabung dengan domain secara otomatis

Last reviewed 2024-10-31 UTC

Dokumen ini menunjukkan cara mengonfigurasi Active Directory dan Compute Engine sehingga instance virtual machine (VM) Windows dapat otomatis bergabung dengan domain Active Directory.

Mengotomatiskan proses penggabungan VM Windows ke Active Directory akan membantu Anda menyederhanakan proses penyediaan server Windows. Pendekatan ini juga memungkinkan Anda memanfaatkan penskalaan otomatis tanpa mengorbankan manfaat penggunaan Active Directory untuk mengelola akses dan konfigurasi.

Dokumen ini ditujukan untuk administrator sistem dan mengasumsikan bahwa Anda sudah memahami jaringan Active Directory dan Google Cloud.

Konfigurasi yang Anda buat dengan mengikuti prosedur dalam dokumen ini dapat menjadi dasar pekerjaan tambahan yang Anda lakukan dengan Windows Server di Google Cloud. Misalnya, setelah menyelesaikan prosedur ini, Anda dapat men-deploy aplikasi ASP.NET dengan Autentikasi Windows di container Windows.

Jika Anda menggunakan Microsoft AD Terkelola dan tidak memerlukan pembersihan otomatis dari akun komputer yang tidak berlaku, pertimbangkan untuk bergabung dengan VM Windows menggunakan fitur gabungan domain otomatis. Untuk mengetahui informasi selengkapnya, lihat Menggabungkan VM Windows secara otomatis ke domain.

Tujuan

  • Deploy aplikasi Cloud Run yang memungkinkan instance VM dari project yang dipilih bergabung secara otomatis ke domain Active Directory Anda.
  • Buat tugas Cloud Scheduler yang secara berkala memindai domain Active Directory Anda untuk menemukan akun komputer yang tidak berlaku dan menghapusnya.
  • Uji penyiapan dengan membuat grup instance terkelola (MIG) yang diskalakan otomatis dari instance VM yang bergabung dengan domain.

Biaya

Dalam dokumen ini, Anda akan menggunakan komponen Google Cloud yang dapat ditagih berikut:

Petunjuk dalam dokumen ini dirancang untuk menjaga penggunaan resource Anda tetap sesuai batas-batas tingkat Selalu Gratis Google Cloud. Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. Pengguna baru Google Cloud mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Setelah Anda menyelesaikan dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk informasi selengkapnya, lihat Pembersihan.

Sebelum memulai

Dokumen ini mengasumsikan bahwa Anda telah men-deploy Active Directory di Google Cloud dengan menggunakan Layanan Terkelola untuk Microsoft Active Directory (Microsoft AD Terkelola) atau dengan men-deploy pengontrol domain yang dikelola sendiri di Google Cloud.

Untuk menyelesaikan prosedur ini, pastikan Anda memiliki hal berikut:

  • Akses administratif ke domain Active Directory Anda, termasuk kemampuan untuk membuat pengguna, grup, dan unit organisasi (OU).
  • Rentang IP CIDR /28 yang tidak digunakan di VPC tempat pengontrol domain Active Directory Anda di-deploy. Anda dapat menggunakan rentang IP ini untuk mengonfigurasi Akses VPC Serverless.
  • Subnet tempat Anda men-deploy instance Windows. Subnet harus dikonfigurasi untuk menggunakan Akses Google Pribadi.

Jika menggunakan pengontrol domain yang dikelola sendiri, Anda juga memerlukan hal berikut:

Menerapkan pendekatan ini

Di lingkungan lokal, Anda mungkin mengandalkan file jawaban (unattend.xml) dan penyesuaian JoinDomain untuk secara otomatis menggabungkan komputer baru ke domain. Meskipun Anda dapat menggunakan proses yang sama di Google Cloud, pendekatan ini memiliki beberapa batasan:

  • Untuk menggunakan file unattend.xml yang disesuaikan, Anda harus mengelola image Compute Engine kustom. Menjaga agar image kustom selalu aktual menggunakan Windows Update memerlukan pemeliharaan berkelanjutan atau pekerjaan awal untuk menyiapkan otomatisasi. Kecuali Anda perlu mempertahankan image kustom karena alasan lain, upaya tambahan ini mungkin tidak dibenarkan.
  • Penggunaan penyesuaian JoinDomain akan mengikat image ke satu domain Active Directory karena nama domain harus ditentukan di unattend.xml. Jika Anda mengelola beberapa domain atau Forest Active Directory (misalnya, untuk lingkungan produksi dan pengujian terpisah), Anda mungkin perlu mempertahankan beberapa image kustom untuk setiap domain.
  • Menggabungkan komputer Windows ke domain memerlukan kredensial pengguna yang memiliki izin untuk membuat objek komputer di direktori. Jika menggunakan penyesuaian JoinDomain di unattend.xml, Anda harus menyematkan kredensial ini sebagai teks biasa di unattend.xml. Kredensial yang tertanam ini dapat mengubah image menjadi target potensial bagi penyerang. Meskipun Anda dapat mengontrol akses ke image dengan menetapkan izin Identity and Access Management (IAM) yang sesuai, pengelolaan akses ke image kustom akan menambah kompleksitas yang tidak perlu.

Pendekatan dalam dokumen ini tidak menggunakan file jawaban sehingga tidak memerlukan image yang disiapkan secara khusus. Sebagai gantinya, gunakan sysprep spesialisasi scriptlet berikut saat Anda membuat instance VM:

iex((New-Object System.Net.WebClient).DownloadString('https://DOMAIN'))

Scriptlet khusus sistem ini memulai proses yang diilustrasikan oleh diagram berikut.

Proses inisiasi scriptlet spesialisasi sysprep.

Prosesnya berjalan sebagai berikut:

  1. Setelah instance VM dibuat, Windows akan melakukan booting untuk pertama kalinya. Sebagai bagian dari kartu konfigurasi spesialisasi, Windows akan menjalankan scriptlet spesialisasi sysprep. Scriptlet spesialisasi memanggil aplikasi Cloud Run register-computer dan mendownload skrip PowerShell yang mengontrol proses bergabung ke domain.
  2. Windows akan memanggil skrip PowerShell yang telah didownload.
  3. Skrip PowerShell memanggil server metadata untuk mendapatkan token ID yang mengidentifikasi instance VM dengan aman.
  4. Skrip ini memanggil aplikasi register-computer lagi, dengan meneruskan token ID untuk mengautentikasi dirinya sendiri.
  5. Aplikasi ini memvalidasi token ID dan mengekstrak nama, zona, serta project ID Google Cloud dari instance VM.
  6. Aplikasi akan memverifikasi bahwa domain Active Directory dikonfigurasi untuk mengizinkan instance VM dari project tertentu bergabung dengan domain tersebut. Untuk menyelesaikan verifikasi ini, aplikasi akan mencari dan terhubung ke pengontrol domain Active Directory untuk memeriksa unit organisasi (OU) yang namanya cocok dengan project ID Google Cloud dari token ID. Jika ditemukan OU yang cocok, instance VM dari project akan diberi otorisasi untuk bergabung dengan domain Active Directory di OU yang ditentukan.
  7. Aplikasi ini memverifikasi bahwa project Google Cloud dikonfigurasi untuk mengizinkan instance VM bergabung dengan Active Directory. Untuk menyelesaikan verifikasi ini, aplikasi akan memeriksa apakah aplikasi dapat mengakses instance VM dengan menggunakan Compute Engine API.
  8. Jika semua pemeriksaan berhasil, aplikasi akan melakukan pratahap akun komputer di Active Directory. Aplikasi menyimpan nama, zona, dan ID instance VM sebagai atribut dalam objek akun komputer sehingga dapat dikaitkan dengan instance VM.
  9. Dengan menggunakan Kerberos set password protocol, aplikasi kemudian menetapkan sandi acak ke akun komputer tersebut.
  10. Nama dan sandi komputer ditampilkan ke instance Windows melalui saluran yang diamankan TLS.
  11. Dengan menggunakan akun komputer yang dipra-tahapkan, skrip PowerShell menggabungkan komputer ke domain.
  12. Setelah penerusan konfigurasi spesialisasi selesai, mesin akan memulai ulang sendiri.

Bagian selanjutnya dari prosedur ini akan memandu Anda melakukan langkah-langkah yang diperlukan untuk menyiapkan penggabungan domain otomatis.

Mempersiapkan domain Active Directory

Pertama, Anda perlu menyiapkan domain Active Directory. Untuk menyelesaikan langkah ini, Anda memerlukan komputer yang memiliki akses administratif ke domain Active Directory.

Opsional: Membatasi siapa yang dapat bergabung ke komputer ke domain

Anda mungkin ingin membatasi siapa yang dapat bergabung dengan komputer ke domain. Secara default, konfigurasi Group Policy Object (GPO) untuk Kebijakan Pengontrol Domain Default memberikan hak pengguna Add workstations to domain kepada semua pengguna terautentikasi. Siapa pun dengan hak pengguna tersebut dapat menggabungkan komputer ke domain. Karena Anda mengotomatiskan proses penggabungan komputer ke domain Active Directory, memberikan tingkat akses ini secara universal merupakan risiko keamanan yang tidak perlu.

Untuk membatasi siapa yang dapat menggabungkan komputer ke domain Active Directory Anda, ubah konfigurasi default GPO Kebijakan Pengontrol Domain Default:

  1. Menggunakan klien RDP, login ke komputer yang memiliki akses administratif ke domain Active Directory Anda.
  2. Buka Group Policy Management console.
  3. Buka Forest > Domains > domain-name > Group Policy Objects, dengan domain-name adalah nama domain Active Directory Anda.
  4. Klik kanan Default Domain Controller Policy, lalu klik Edit.
  5. Pada konsol Group Policy Management Editor, buka Computer Configuration > Policies > Windows Settings > Security Settings > Local Policies > User Rights Assignment.
  6. Klik dua kali Add workstation to domain.
  7. Di Properties, hapus Authenticated Users dari daftar.
  8. Untuk mengizinkan administrator bergabung dengan domain secara manual (opsional), klik Add user or group, lalu tambahkan grup administratif ke dalam daftar.
  9. Klik Oke.

Sekarang Anda dapat menutup konsol Group Policy Management Editor dan GPMC.

Menginisialisasi struktur direktori

Sekarang Anda membuat OU yang berfungsi sebagai container untuk semua OU khusus project:

  1. Menggunakan klien RDP, login ke komputer yang memiliki akses administratif ke domain Active Directory Anda.
  2. Buka sesi PowerShell yang ditingkatkan.
  3. Buat unit organisasi baru:

    $ParentOrgUnitPath = (Get-ADDomain).ComputersContainer
    $ProjectsOrgUnitPath = New-ADOrganizationalUnit `
      -Name 'Projects' `
      -Path $ParentOrgUnitPath `
      -PassThru
    

Membuat akun pengguna Active Directory

Untuk mengakses akun Active Directory dan komputer pra-tahap, aplikasi register-computer memerlukan akun pengguna Active Directory:

  1. Buat akun pengguna Active Directory bernama register-computer, tetapkan sandi acak, lalu tempatkan di Projects OU:

    # 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. Beri akun register-computer set izin minimum yang diperlukan untuk mengelola akun dan grup komputer di OU dan sub-OU Projects:

    $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 }
    

    Pemrosesan perintah ini dapat memerlukan waktu beberapa menit.

  3. Berikan izin akun register-computer untuk menghapus data DNS:

    Microsoft AD Terkelola

    Add-ADGroupMember -Identity "Cloud Service DNS Administrators" -Members ${RegisterComputerUser}
    

    Domain yang dikelola sendiri

    $DnsPartition=(Get-ADDomain).SubordinateReferences | Where-Object {$_.StartsWith('DC=DomainDnsZones')}
    $DnsContainer="DC=$((Get-ADDomain).DNSRoot),CN=MicrosoftDNS,$DnsPartition"
    
    dsacls $DnsContainer /G "${RegisterComputerUser}:SD" /I:S
    
  4. Tampilkan jalur OU Projects dan sandi yang dibuat dari akun pengguna Active Directory register-computer. Perhatikan nilai-nilainya karena Anda akan membutuhkannya nanti.

    Write-Host "Password: $Password"
    Write-Host "Projects OU: $ProjectsOrgUnitPath"
    

Menyiapkan project Google Cloud

Sekarang Anda mengonfigurasi project domain Anda:

  • Jika Anda menggunakan Microsoft AD Terkelola, project domain Anda adalah project tempat Anda men-deploy Microsoft AD Terkelola.
  • Jika Anda menggunakan Active Directory yang dikelola sendiri, project domain Anda adalah project yang menjalankan pengontrol domain Active Directory. Dalam kasus VPC Bersama, project ini harus sama dengan project host VPC.

Anda dapat menggunakan project domain ini untuk melakukan hal berikut:

  • Buat rahasia Secret Manager yang berisi sandi akun pengguna Active Directory register-computer.
  • Terapkan aplikasi register-computer.
  • Konfigurasikan Cloud Scheduler agar memicu pembersihan akun komputer yang tidak digunakan.

Sebaiknya Anda memberikan akses ke project domain dengan hak istimewa paling rendah.

Membuat rahasia Secret Manager

  1. Di konsol Google Cloud, buka Cloud Shell.

    Buka Cloud Shell

  2. Luncurkan PowerShell:

    pwsh
    
  3. Lakukan inisialisasi variabel berikut, dengan mengganti domain-project-id dengan ID project domain Anda:

    $DomainProjectId = "domain-project-id"
    
  4. Setel project domain sebagai project default:

    & gcloud config set project $DomainProjectId
    
  5. Aktifkan Secret Manager API:

    & gcloud services enable secretmanager.googleapis.com
    
  6. Masukkan sandi akun pengguna Active Directory register-computer dan simpan di rahasia Secret Manager:

    $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
    

Memberikan akses ke Kerberos dan LDAP

Untuk mengelola penggabungan domain, aplikasi register-computer mengakses pengontrol domain Anda menggunakan protokol berikut:

  • LDAP (TCP/389) atau LDAPS (TCP/636)
  • Kerberos (UDP/88, TCP/88)
  • Perubahan sandi Kerberos (UDP/464, TCP/464)

Microsoft AD Terkelola

Anda tidak perlu mengonfigurasi aturan firewall apa pun.

Domain yang dikelola sendiri

Buat aturan firewall yang mengizinkan akses ke pengontrol domain Anda.

Anda dapat menerapkan aturan berdasarkan tag jaringan yang telah ditetapkan ke pengontrol domain, atau Anda dapat menerapkannya dengan menggunakan akun layanan.

Berdasarkan tag jaringan

& 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

Ganti kode berikut:

  • dc-tag: Tag jaringan yang ditetapkan ke VM pengontrol domain Anda.
  • vpc-project-id: ID project tempat VPC ditetapkan. Jika Anda menggunakan VPC Bersama, gunakan project host VPC; jika tidak, gunakan ID project domain.

Berdasarkan akun layanan

& 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

Ganti kode berikut:

  • dc-sa: Alamat email akun layanan yang digunakan VM pengontrol domain Anda.
  • vpc-project-id: ID project tempat VPC ditentukan. Jika Anda menggunakan VPC Bersama, gunakan project host VPC; jika tidak, gunakan ID proyek domain.

Men-deploy aplikasi Cloud Run

Sekarang Anda sudah menyiapkan Cloud Build untuk men-deploy aplikasi register-computer ke Cloud Run:

  1. Di Cloud Shell, buat clone repositori GitHub:

    & git clone https://github.com/GoogleCloudPlatform/gce-automated-ad-join.git
    cd gce-automated-ad-join/ad-joining
    
  2. Lakukan inisialisasi variabel berikut:

    $ServerlessRegion = "serverless-region"
    $VpcName = "vpc-name"
    $VpcSubnet = "subnet-name"
    $AdDomain = "dns-domain-name"
    $AdNetbiosDomain = "netbios-domain-name"
    $ProjectsOrgUnitPath = "projects-ou-distinguished-name"
    

    Ganti kode berikut:

    • serverless-region: Region tempat men-deploy aplikasi register-computer. Region tidak harus sama dengan region tempat Anda berencana untuk men-deploy instance VM.
    • vpc-name: Nama jaringan VPC yang berisi pengontrol domain Active Directory Anda.
    • subnet-name: Subnet vpc-name yang akan digunakan untuk akses VPC langsung. Subnet harus berada di region yang sama dengan serverless-region.
    • dns-domain-name: Nama domain DNS domain Active Directory Anda.
    • netbios-domain-name: Nama NetBIOS domain Active Directory Anda.
    • projects-ou-distinguished-name: Nama yang dibedakan dari Projects OU Anda.
  3. Mengaktifkan Cloud Run dan Cloud Build API:

    & gcloud services enable run.googleapis.com cloudbuild.googleapis.com
    
  4. Buat akun layanan register-computer-app untuk aplikasi Cloud Run:

    & gcloud iam service-accounts create register-computer-app `
      --display-name="register computer Cloud Run app"
    
  5. Buat akun layanan build-service untuk menjalankan pemicu Cloud Build:

    & gcloud iam service-accounts create build-service `
      --display-name="Cloud Build build agent"
    
  6. Izinkan akun layanan Cloud Run membaca secret yang berisi sandi Active Directory:

    & gcloud secrets add-iam-policy-binding ad-password `
      --member "serviceAccount:register-computer-app@$DomainProjectId." `
      --role "roles/secretmanager.secretAccessor"
    
  7. Beri Cloud Build izin yang diperlukan untuk men-deploy ke Cloud Run:

    $DomainProjectNumber = (gcloud projects describe $DomainProjectId --format='value(projectNumber)')
    & gcloud iam service-accounts add-iam-policy-binding register-computer-app@$DomainProjectId. `
      --member "serviceAccount:build-service@$DomainProjectId." `
      --role "roles/iam.serviceAccountUser"
    
    & gcloud projects add-iam-policy-binding $DomainProjectId `
      --member "serviceAccount:build-service@$DomainProjectId." `
      --role roles/cloudbuild.builds.builder
    
    & gcloud projects add-iam-policy-binding $DomainProjectId `
      --member "serviceAccount:build-service@$DomainProjectId." `
      --role roles/run.admin
    
  8. Gunakan file cloudbuild.yaml sebagai template untuk membuat konfigurasi build Cloud Run kustom yang cocok dengan lingkungan Anda:

    $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.")
    $Build = $Build.Replace('__SERVERLESS_NETWORK__', "$VpcName")
    $Build = $Build.Replace('__SERVERLESS_SUBNET__', "$VpcSubnet")
    $Build | Set-Content .\cloudbuild.hydrated.yaml
    
  9. Build aplikasi dan deploy ke Cloud Run:

    & gcloud builds submit . `
      --config cloudbuild.hydrated.yaml `
      --substitutions _IMAGE_TAG=$(git rev-parse --short HEAD) `
      --service-account "projects/$DomainProjectId/serviceAccounts/build-service@$DomainProjectId." `
      --default-buckets-behavior regional-user-owned-bucket
    

    Proses deployment dapat memerlukan waktu beberapa menit.

  10. Menentukan URL aplikasi Cloud Run:

    $RegisterUrl = (gcloud run services describe register-computer `
      --platform managed `
      --region $ServerlessRegion `
      --format=value`(status.url`))
    Write-Host $RegisterUrl
    

    Catat URL-nya. Anda akan membutuhkannya setiap kali membuat instance VM yang harus digabungkan ke Active Directory.

  11. Panggil aplikasi Cloud Run untuk memverifikasi bahwa deployment berfungsi:

    Invoke-RestMethod $RegisterUrl
    

    Skrip PowerShell akan ditampilkan. VM menjalankan skrip ini selama fase khusus yang menggabungkannya ke domain.

Mengaktifkan project untuk penggabungan domain otomatis

Aplikasi register-computer tidak mengizinkan instance VM untuk bergabung dengan domain Active Directory, kecuali jika project VM diaktifkan untuk bergabung dengan domain secara otomatis. Tindakan keamanan ini membantu mencegah VM yang terhubung ke project yang tidak sah agar tidak mengakses domain Anda.

Guna mengaktifkan project untuk bergabung dengan domain otomatis, Anda harus melakukan hal berikut:

  • Buat OU di Active Directory yang namanya cocok dengan ID project Google Cloud Anda.
  • Beri aplikasi register-computer akses ke project Google Cloud.

Pertama, buat OU:

  1. Dengan klien RDP, login ke komputer yang memiliki akses administratif ke domain Active Directory Anda.
  2. Di snap-in MMC Pengguna dan Komputer Active Directory, buka OU Projects.
  3. Klik kanan OU, lalu pilih New > Organizational Unit.
  4. Pada dialog New Object, masukkan ID untuk project Google Cloud tempat Anda men-deploy VM.
  5. Klik Oke.

Selanjutnya, beri aplikasi register-computer akses ke project Google Cloud:

  1. Di Cloud Shell, luncurkan PowerShell:

    pwsh
    
  2. Lakukan inisialisasi variabel berikut:

    $ProjectId = "project-id"
    $DomainProjectId = "domain-project-id"
    

    Ganti

    • project-id dengan ID project Google Cloud untuk men-deploy VM Anda di
    • domain-project-id dengan ID project domain Anda
  3. Beri akun layanan register-computer-app peran Compute Viewer pada project:

    & gcloud projects add-iam-policy-binding $ProjectId `
        --member "serviceAccount:register-computer-app@$DomainProjectId." `
        --role "roles/compute.viewer"
    

Project Anda sekarang siap mendukung penggabungan domain otomatis.

Menguji penggabungan domain

Sekarang Anda dapat memastikan bahwa penyiapannya berfungsi dengan benar dengan:

  • Membuat satu instance VM yang otomatis bergabung dengan domain Active Directory
  • Membuat grup instance terkelola dari instance VM yang otomatis bergabung dengan domain Active Directory

Membuat dan bergabung dengan satu instance VM

Buat instance VM yang otomatis bergabung dengan domain Active Directory:

  1. Kembali ke sesi PowerShell di Cloud Shell dan lakukan inisialisasi variabel berikut:

    $Region = "vpc-region-to-deploy-vm"
    $Zone = "zone-to-deploy-vm"
    $Subnet = "vpc-subnet-to-deploy-vm"
    $ServerlessRegion = "serverless-region"
    

    Ganti kode berikut:

    • vpc-region-to-deploy-vm: Region untuk men-deploy instance VM.
    • vpc-subnet-to-deploy-vm: Subnet untuk men-deploy instance VM.
    • zone-to-deploy-vm: Zona untuk men-deploy instance VM.
    • serverless-region: Region tempat Anda men-deploy aplikasi Cloud Run.
  2. Tetapkan project dan zona default:

    & gcloud config set project $ProjectId
    & gcloud config set compute/zone $Zone
    
  3. Cari URL aplikasi Cloud Run lagi:

    $RegisterUrl = (gcloud run services describe register-computer `
      --platform managed `
      --region $ServerlessRegion `
      --format value`(status.url`) `
      --project $DomainProjectId)
    
  4. Buat instance dengan meneruskan scriptlet khusus yang menyebabkan VM bergabung ke domain:

    VPC Bersama

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

    VPC Mandiri

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

    Jika Anda ingin menggunakan nama host kustom, tambahkan parameter --hostname ke perintah tersebut.

    Jika Anda menggunakan versi Windows Server sebelum Windows Server 2019, TLS 1.2 mungkin dinonaktifkan secara default, yang dapat menyebabkan scriptlet khusus gagal. Untuk mengaktifkan TLS 1.2, gunakan scriptlet berikut:

    [Net.ServicePointManager]::SecurityProtocol=[Net.SecurityProtocolType]::Tls12;iex((New-Object System.Net.WebClient).DownloadString('$RegisterUrl'))
    
  5. Pantau proses booting:

    & gcloud compute instances tail-serial-port-output join-01
    

    Setelah sekitar satu menit, mesin tersebut akan bergabung ke domain Active Directory Anda. Outputnya mirip dengan yang berikut ini:

    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
    

    Untuk berhenti mengamati proses booting, tekan CTRL+C.

Memverifikasi bahwa VM telah bergabung ke Active Directory

  1. Dengan klien RDP, login ke komputer yang memiliki akses administratif ke domain Active Directory Anda.
  2. Buka snap-in MMC Active Directory Users and Computers.
  3. Di menu, pastikan View > Advanced Features diaktifkan.
  4. Buka OU yang dinamai sesuai dengan project ID Google Cloud tempat Anda membuat instance VM.
  5. Klik dua kali akun join-01.
  6. Di dialog Properties, klik tab Attribute Editor.

    Akun komputer dianotasi dengan atribut LDAP tambahan. Dengan atribut ini, Anda dapat melacak pengaitan antara objek komputer dan instance Compute Engine.

    Pastikan daftar berisi atribut dan nilai LDAP berikut.

    Atribut LDAP Nilai
    msDS-cloudExtensionAttribute1 ID project Google Cloud
    msDS-cloudExtensionAttribute2 Zona Compute Engine
    msDS-cloudExtensionAttribute3 Nama instance Compute Engine

    Atribut msDS-cloudExtensionAttribute adalah atribut tujuan umum dan tidak digunakan oleh Active Directory itu sendiri.

Mendiagnosis kesalahan

Jika instance VM Anda gagal bergabung dengan domain, periksa log aplikasi register-computer:

  1. Di konsol Google Cloud, buka Cloud Run.

    Buka Cloud Run

  2. Klik aplikasi register-computer.

  3. Di menu, klik Logs.

Menghapus instance

Setelah Anda memverifikasi bahwa instance VM bergabung dengan domain Active Directory, Anda dapat menghapus instance tersebut.

  • Hapus instance:

    & gcloud compute instances delete join-01 --quiet
    

Membuat dan bergabung ke grup instance terkelola

Anda juga dapat memverifikasi bahwa instance dari MIG dapat otomatis bergabung dengan domain Anda.

  1. Buat template instance dengan meneruskan skrip khusus yang menyebabkan VM bergabung ke domain:

    VPC Bersama

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

    VPC Mandiri

    & 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. Buat grup instance terkelola yang menggunakan template instance:

    & gcloud compute instance-groups managed create group-01 `
        --template ad-2019core-n1-std-2 `
        --size=3
    

Tunggu beberapa menit, lalu gunakan snap-in MMC Pengguna dan Komputer Active Directory untuk memverifikasi bahwa empat objek baru telah dibuat di Active Directory:

  • 3 akun komputer yang sesuai dengan 3 instance VM dari grup instance terkelola.
  • 1 grup bernama group-01 yang berisi 3 akun komputer. Jika berencana menggunakan akun layanan terkelola grup (gMSA), Anda dapat menggunakan grup ini untuk memberikan akses ke gMSA.

Setelah memverifikasi bahwa instance VM dari MIG Anda dapat bergabung dengan domain Active Directory, Anda dapat menghapus grup terkelola dan template instance dengan mengikuti langkah-langkah berikut:

  1. Hapus grup instance di Cloud Shell:

    & gcloud compute instance-groups managed delete group-01 --quiet
    
  2. Hapus template instance:

    & gcloud compute instance-templates delete ad-2019core-n1-std-2 --quiet
    

Menjadwalkan pembersihan akun komputer usang

Mengotomatiskan proses penggabungan komputer ke domain akan mengurangi upaya penyiapan server baru dan memungkinkan Anda menggunakan server yang bergabung dengan domain dalam grup instance terkelola. Namun, seiring waktu, akun komputer yang sudah usang dapat terakumulasi di domain.

Untuk mencegah akumulasi ini, sebaiknya siapkan aplikasi register-computer untuk memindai domain Active Directory Anda secara berkala guna menemukan dan secara otomatis menghapus akun yang sudah tidak berlaku dan data DNS terkait.

Aplikasi register-computer dapat menggunakan atribut msDS-cloudExtensionAttribute akun komputer untuk mengidentifikasi akun komputer mana yang tidak berlaku lagi. Atribut ini berisi project, zona, dan nama instance dari instance VM yang terkait di Compute Engine. Untuk setiap akun komputer, aplikasi dapat memeriksa apakah instance VM yang sesuai masih tersedia. Jika tidak, akun komputer dianggap usang dan dihapus.

Untuk memicu pembersihan akun komputer, panggil endpoint /cleanup aplikasi Cloud Run. Agar pengguna yang tidak sah tidak memicu pembersihan, permintaan ini harus diautentikasi menggunakan akun layanan register-computer-app.

Mengonfigurasi Cloud Scheduler

Langkah-langkah berikut menunjukkan cara menyiapkan Cloud Scheduler bersama Pub/Sub untuk memicu pembersihan secara otomatis satu kali setiap 24 jam:

  1. Di Cloud Shell, aktifkan Cloud Scheduler API di project domain Anda:

    & gcloud services enable cloudscheduler.googleapis.com
    
  2. Tetapkan AppEngineLocation ke lokasi App Engine yang valid untuk men-deploy Cloud Scheduler:

    $AppEngineLocation = "location"
    

    Ganti location dengan region App Engine yang telah Anda pilih untuk resource VPC, misalnya, us-central. Jika wilayah tersebut tidak tersedia sebagai lokasi App Engine, pilih lokasi yang secara geografis dekat dengan Anda. Untuk informasi selengkapnya, lihat Region dan zona.

  3. Inisialisasi App Engine:

    & gcloud app create --region $AppEngineLocation --project $DomainProjectId
    
  4. Membuat tugas Cloud Scheduler:

    & gcloud scheduler jobs create http cleanup-computer-accounts `
        --schedule "every 24 hours" `
        --uri "$RegisterUrl/cleanup" `
        --oidc-service-account-email register-computer-app@$DomainProjectId. `
        --oidc-token-audience "$RegisterUrl/" `
        --project $DomainProjectId
    

    Tugas ini memanggil aplikasi register-computer sekali setiap 24 jam dan menggunakan akun layanan register-computer-app untuk autentikasi.

Memicu pembersihan

Untuk memverifikasi konfigurasi guna membersihkan akun komputer yang sudah tidak berlaku, Anda dapat memicu tugas Cloud Scheduler secara manual.

  1. Di konsol Google Cloud, buka Cloud Scheduler.

    Buka Cloud Scheduler

  2. Untuk tugas cleanup-computer-accounts yang Anda buat, klik Jalankan Sekarang.

    Setelah beberapa detik, kolom Result akan menampilkan Success, yang menunjukkan bahwa pembersihan berhasil diselesaikan. Jika kolom hasil tidak diupdate secara otomatis dalam beberapa detik, klik tombol Refresh.

Untuk detail selengkapnya tentang akun mana yang dihapus, periksa log aplikasi register-computer.

  1. Di konsol Google Cloud, buka Cloud Run.

    Buka Cloud Run

  2. Klik aplikasi register-computer.

  3. Di menu, klik Logs.

    Entri log menunjukkan bahwa akun komputer dari instance VM yang Anda gunakan untuk menguji penggabungan domain diidentifikasi sebagai usang dan sudah dihapus.

Pembersihan

Jika Anda menggunakan dokumen ini sebagai dasar untuk deployment dan arsitektur referensi lainnya, baca dokumen lain tentang kapan harus menjalankan langkah-langkah pembersihan.

Jika tidak ingin menyimpan penyiapan Google Cloud yang digunakan dalam dokumen ini, Anda dapat mengembalikan penyiapan ini dengan melakukan langkah berikut:

  1. Di Cloud Shell, hapus tugas Cloud Scheduler:

    & gcloud scheduler jobs delete cleanup-computer-accounts `
      --project $DomainProjectId
    
  2. Menghapus aplikasi Cloud Run:

    & gcloud run services delete register-computer `
      --platform managed `
      --project $DomainProjectId `
      --region $ServerlessRegion
    
  3. Hapus rahasia Secret Manager:

    gcloud secrets delete ad-password --project $DomainProjectId
    
  4. Hapus aturan firewall untuk akses LDAP dan Kerberos:

    gcloud compute firewall-rules delete allow-adkrb-from-serverless-to-dc --project=vpc-project-id
    

    Ganti vpc-project-id dengan ID project tempat VPC ditetapkan. Jika Anda menggunakan VPC Bersama, gunakan project host VPC; jika tidak, gunakan ID proyek domain.

Mengembalikan perubahan Active Directory

  1. Dengan menggunakan klien RDP, login ke komputer yang memiliki akses administratif ke domain Active Directory Anda.
  2. Di snap-in MMC Pengguna dan Komputer Active Directory, buka OU Projects.
  3. Hapus akun pengguna Active Directory register-computer.
  4. Hapus OU yang Anda buat untuk menguji proses bergabung ke domain otomatis.

Langkah berikutnya