Men-deploy AD FS di domain Microsoft AD Terkelola

Panduan ini menjelaskan cara men-deploy Microsoft Active Directory Federation Services (AD FS) untuk Windows Server 2019 di Layanan Terkelola untuk domain Microsoft Active Directory.

Diagram berikut menggambarkan deployment:

Arsitektur

Pengguna berkomunikasi dengan load balancer HTTPS yang menggunakan sertifikat yang dikelola Google untuk menghentikan koneksi SSL. Load balancer akan meneruskan koneksi ke instance VM yang menjalankan Microsoft AD FS untuk Windows Server 2019 dan bergabung dengan domain Microsoft AD Terkelola. Komunikasi antara load balancer dan instance VM diamankan menggunakan sertifikat SSL yang ditandatangani sendiri.

Deployment tersebut menggunakan satu instance AD FS dan Database Internal Windows sehingga cocok untuk lingkungan kecil. Untuk lingkungan dengan peningkatan keandalan atau permintaan keamanan, pertimbangkan untuk men-deploy beberapa instance AD FS dalam konfigurasi pertanian dan men-deploy proxy federasi.

Sebelum memulai

Mempersiapkan project dan jaringan

Anda perlu menyiapkan project Google Cloud dan jaringan VPC untuk deployment AD FS.

Membuat instance VM

Buat akun layanan dan instance VM untuk menjalankan AD FS:

  1. Di Konsol Google Cloud, buka Cloud Shell.

    Aktifkan Cloud Shell

  2. Tetapkan project ID default Anda:

    gcloud config set project PROJECT_ID
    

    Ganti PROJECT_ID dengan ID project Google Cloud Anda.

  3. Tetapkan region dan zona default Anda:

    gcloud config set compute/region REGION
    gcloud config set compute/zone ZONE
    

    Ganti kode berikut:

    • REGION: ID region tempat Anda ingin men-deploy.
    • ZONE: ID zona tempat Anda ingin men-deploy.
  4. Buat akun layanan:

    gcloud iam service-accounts create SA_NAME
    

    Ganti SA_NAME dengan nama akun layanan.

  5. Buat instance VM yang menjalankan Windows Server 2019 dan menggunakan skrip khusus untuk menginstal peran server AD FS secara otomatis:

    gcloud compute instances create VM_NAME \
      --machine-type n2-standard-8 \
      --image-family windows-2019 \
      --image-project windows-cloud \
      --boot-disk-size 50 \
      --boot-disk-type pd-ssd \
      --subnet SUBNET_NAME \
      --service-account SA_NAME@$(gcloud config get-value core/project).iam.gserviceaccount.com \
      --metadata sysprep-specialize-script-ps1="Add-WindowsFeature ADFS-Federation -IncludeManagementTools;Add-WindowsFeature RSAT-AD-PowerShell;Add-WindowsFeature RSAT-ADDS-Tools"
    

    Ganti kode berikut:

    • VM_NAME: Nama instance VM.
    • SUBNET_NAME: Nama subnet untuk men-deploy AD FS.
    • SA_NAME: Nama akun layanan

    Untuk mengonfigurasi dan menggabungkan instance VM ke domain Active Directory Anda, selesaikan langkah-langkah berikut:

    1. Pantau proses inisialisasi VM dengan melihat output port serialnya:

      gcloud compute instances tail-serial-port-output VM_NAME
      

      Tunggu sekitar 3 menit hingga Anda melihat output Instance setup finished, lalu tekan Ctrl+C. Pada tahap ini, instance VM siap digunakan.

    2. Buat nama pengguna dan sandi untuk instance VM.

    3. Hubungkan ke VM menggunakan Desktop Jarak Jauh dan login menggunakan nama pengguna dan sandi yang dibuat di langkah sebelumnya.

    4. Klik kanan tombol Start (atau tekan Win+X), lalu klik Windows PowerShell (Admin).

    5. Konfirmasi prompt elevasi dengan mengklik Yes.

    6. Gabungkan komputer ke domain Active Directory Anda, lalu mulai ulang:

      Add-Computer -Domain DOMAIN -Restart
      

      Ganti DOMAIN dengan nama DNS domain Active Directory Anda.

      Tunggu sekitar 1 menit sampai proses mulai ulang selesai.

Membuat load balancer

Anda perlu membuat load balancer yang memungkinkan pengguna mengakses AD FS menggunakan satu alamat IP virtual.

Untuk mengaitkan instance VM yang menjalankan AD FS dengan load balancer, buat grup instance tidak terkelola terlebih dahulu, lalu tetapkan grup instance ini ke load balancer:

  1. Kembali ke sesi Cloud Shell yang ada.
  2. Buat grup instance yang tidak dikelola:

    gcloud compute instance-groups unmanaged create INSTANCE_GROUP_NAME &&
    gcloud compute instance-groups set-named-ports INSTANCE_GROUP_NAME --named-ports=http:443
    

    Ganti INSTANCE_GROUP_NAME dengan nama grup yang ingin Anda buat.

  3. Tambahkan instance VM yang ada ke grup instance:

    gcloud compute instance-groups unmanaged add-instances INSTANCE_GROUP_NAME --instances VM_NAME
    
  4. Buat health check yang memeriksa port HTTPS AD FS:

    gcloud compute health-checks create tcp HEALTH_CHECK_NAME --port 443
    

    Ganti HEALTH_CHECK_NAME dengan nama untuk health check.

  5. Buat layanan backend load balancer yang menggunakan health check HTTPS dan grup instance yang Anda buat sebelumnya:

    gcloud compute backend-services create BACKEND_SERVICE_NAME \
      --health-checks HEALTH_CHECK_NAME \
      --port-name http \
      --protocol HTTPS \
      --global && \
    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
      --instance-group INSTANCE_GROUP_NAME \
      --global \
      --instance-group-zone $(gcloud config get-value compute/zone)
    

    Ganti BACKEND_SERVICE_NAME dengan nama untuk layanan backend.

  6. Cadangkan alamat IP eksternal statis untuk load balancer:

    gcloud compute addresses create ADDRESS_NAME --global
    

    Ganti ADDRESS_NAME dengan nama yang ingin Anda kaitkan dengan alamat ini.

  7. Buat sertifikat SSL terkelola untuk load balancer:

    gcloud compute ssl-certificates create CERTIFICATE_NAME \
      --domains PUBLIC_FQDN \
      --global
    

    Ganti kode berikut:

    • CERTIFICATE_NAME: Nama untuk sertifikat SSL terkelola.
    • PUBLIC_FQDN: Nama domain publik yang sepenuhnya memenuhi syarat (FQDN) yang ingin Anda gunakan untuk AD FS. Contoh, login.example.com.
  8. Buat frontend load balancer yang menggunakan alamat IP eksternal dan meneruskan traffic ke layanan backend:

    gcloud compute url-maps create URL_MAP_NAME \
      --default-service BACKEND_SERVICE_NAME && \
    gcloud compute target-https-proxies create PROXY_NAME \
      --ssl-certificates CERTIFICATE_NAME \
      --url-map URL_MAP_NAME && \
    gcloud compute forwarding-rules create FORWARDING_RULE_NAME \
      --global \
      --address ADDRESS_NAME \
      --target-https-proxy PROXY_NAME \
      --ports 443
    

    Ganti kode berikut:

    • URL_MAP_NAME: Nama peta URL untuk load balancer.
    • PROXY_NAME: Nama proxy target untuk load balancer.
    • FORWARDING_RULE_NAME: Nama aturan penerusan untuk load balancer.
  9. Buat aturan firewall untuk mengizinkan traffic dari load balancer ke instance VM yang menjalankan AD FS:

    gcloud compute firewall-rules create FIREWALL_RULE_NAME \
      --allow tcp:443 \
      --network VPC_NAME \
      --source-ranges 130.211.0.0/22,35.191.0.0/16 \
      --target-service-accounts SA_NAME@$(gcloud config get-value core/project).iam.gserviceaccount.com
    

    Ganti kode berikut:

    • FIREWALL_RULE_NAME: Nama aturan firewall.
    • VPC_NAME: Nama jaringan VPC Anda.
    • SA_NAME: Nama akun layanan

    Rentang sumber adalah rentang IP untuk load balancer internal. Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi aturan firewall.

  10. Cari alamat IP load balancer:

    gcloud compute addresses describe ADDRESS_NAME \
       --global \
       --format=value\(address\)
    
  11. Buat data DNS A di zona DNS publik Anda yang mengarah ke alamat IP load balancer. Nama data DNS yang sepenuhnya memenuhi syarat harus sesuai dengan nama yang Anda gunakan untuk sertifikat SSL.

Men-deploy AD FS

Anda perlu men-deploy peran server AD FS pada instance VM. Karena tidak memiliki hak Domain Admins di domain Microsoft AD Terkelola, Anda tidak dapat menggunakan Pengelola Server untuk melakukan penginstalan dan harus menggunakan PowerShell.

Membuat pengguna layanan

Anda perlu membuat akun pengguna di Active Directory untuk layanan AD FS:

  1. Hubungkan ke instance VM dengan menggunakan Desktop Jarak Jauh dan login menggunakan kredensial administrator yang didelegasikan.
  2. Klik kanan tombol Start (atau tekan Win+X), lalu klik Windows PowerShell (Admin).
  3. Setel sandi acak untuk akun layanan AD FS:

    $AdfsCredential = Get-Credential -UserName USER -Message 'PASSWORD'
    

    Ganti kode berikut:

    • USER: Nama pengguna Active Directory.
    • PASSWORD: Sandi pengguna Active Directory.
  4. Membuat pengguna {i>Active Directory<i}:

    $CloudOuPath = "OU=Cloud," + (Get-ADDomain).DistinguishedName
    $AdfsUser = New-ADuser `
      -Name USER `
      -DisplayName 'AD FS service account' `
      -AccountPassword $AdfsCredential.Password `
      -Path "$CloudOuPath" `
      -PasswordNeverExpires $True `
      -PassThru | Enable-ADAccount -PassThru
    
  5. Tambahkan pengguna ke grup Administrator lokal:

    Add-LocalGroupMember `
     -Group "Administrators" `
     -Member "$env:userdomain\USER"
    
  6. Tetapkan nama utama layanan:

    setspn -a http/PUBLIC_FQDN USER
    

    Ganti PUBLIC_FQDN dengan nama domain publik yang sepenuhnya memenuhi syarat AD FS.

  7. Buat container kosong di Active Directory. Anda perlu menggunakan penampung ini nanti saat menginstal AD FS:

    New-ADObject `
      -Type Container `
      -Name "ADFS Data" `
      -Path $CloudOuPath
    
  8. Berikan kontrol penuh kepada pengguna AD FS atas penampung:

    dsacls.exe "CN=ADFS Data,$CloudOuPath" /G $env:userdomain\USER:GA /I:T
    

Instal AD FS

Anda dapat menginstal AD FS pada instance VM:

  1. Mulai sesi PowerShell sebagai pengguna ADFS:

    runas /u:$env:userdomain\USER powershell
    

    Sesi PowerShell yang baru berjalan sebagai pengguna AD FS, tetapi tanpa hak istimewa yang ditingkatkan.

  2. Di sesi PowerShell baru, mulai sesi PowerShell kedua yang ditingkatkan:

    Start-Process PowerShell -Verb RunAs
    

    Anda harus menjalankan semua langkah berikutnya dalam sesi PowerShell baru yang ditingkatkan ini.

  3. Buat sertifikat SSL yang ditandatangani sendiri menggunakan kunci RSA 2048 bit dan simpan di penyimpanan sertifikat komputer:

    $DnsName="PUBLIC_FQDN"
    $Certificate = New-SelfSignedCertificate `
      -Subject $DnsName `
      -KeyAlgorithm RSA `
      -KeyLength 2048 `
      -KeyExportPolicy NonExportable `
      -KeyUsage DigitalSignature, KeyEncipherment `
      -Provider 'Microsoft Platform Crypto Provider' `
      -NotAfter (Get-Date).AddDays(365) `
      -Type SSLServerAuthentication `
      -CertStoreLocation 'Cert:\LocalMachine\My' `
      -DnsName $DnsName
    

    Ganti PUBLIC_FQDN dengan nama domain publik yang sepenuhnya memenuhi syarat AD FS.

  4. Buat sertifikat RSA 2048 bit lain yang digunakan AD FS sebagai sertifikat penandatanganan token:

    $SigningCertificate = New-SelfSignedCertificate `
      -Subject "ADFS Signing" `
      -KeyAlgorithm RSA `
      -KeyLength 2048 `
      -KeyExportPolicy NonExportable `
      -KeyUsage DigitalSignature, KeyEncipherment `
      -Provider 'Microsoft RSA SChannel Cryptographic Provider' `
      -NotAfter (Get-Date).AddDays(365) `
      -DnsName $DnsName `
      -CertStoreLocation 'Cert:\LocalMachine\My'
    
  5. Buat container Distributed Key Manager (DKM):

    $CloudOuPath = "OU=Cloud," + (Get-ADDomain).DistinguishedName
    $DkmContainer = New-ADObject `
      -Name ((New-Guid).Guid) `
      -Type Container `
      -Path "CN=ADFS Data,$CloudOuPath" `
      -PassThru
    
  6. Masukkan kembali kredensial untuk pengguna AD FS yang Anda tetapkan sebelumnya:

    $AdfsCredential = Get-Credential -UserName "$env:userdomain\USER" -Message 'PASSWORD'
    
  7. Instal AD FS menggunakan sertifikat dan container DKM yang Anda buat sebelumnya:

    Install-ADFSFarm `
      -CertificateThumbprint $Certificate.Thumbprint `
      -SigningCertificateThumbprint $SigningCertificate.Thumbprint `
      -DecryptionCertificateThumbprint $SigningCertificate.Thumbprint `
      -FederationServiceName $DnsName `
      -ServiceAccountCredential $AdfsCredential `
      -OverwriteConfiguration `
      -AdminConfiguration @{"DKMContainerDn"=$DkmContainer.DistinguishedName}
    

    Perintah tersebut mungkin menampilkan pesan peringatan berikut:

    WARNING: A machine restart is required to complete ADFS service configuration. For more information, see:
    https://go.microsoft.com/fwlink/?LinkId=798725
    
    WARNING: The SSL certificate subject alternative names do not support host name 'PUBLIC_FQDN'.
    Configuring certificate authentication binding on port '49443' and hostname 'PUBLIC_FQDN'.
    
    WARNING: An error occurred during an attempt to set the SPN for the specified service account. Set the SPN for the
    service account manually.  For more information about setting the SPN of the service account manually, see the AD FS
    Deployment Guide.  Error message: An error occurred during an attempt to set the SPN for the specified service account.
    You do not have sufficient privileges in the domain to set the SPN.
    
    WARNING: The SSL certificate does not contain all UPN suffix values that exist in the enterprise.  Users with UPN
    suffix values not represented in the certificate will not be able to Workplace-Join their devices.  For more
    information, see http://go.microsoft.com/fwlink/?LinkId=311954.
    

    Anda dapat mengabaikan peringatan ini karena telah menetapkan SPN dan tidak menggunakan autentikasi berbasis sertifikat.

  8. Jika Anda berencana menggunakan Integrated Windows Authentication (IWA) untuk melakukan autentikasi ke AD FS, jalankan perintah berikut untuk menonaktifkan binding token:

    Set-ADFSProperties -ExtendedProtectionTokenCheck None
    Restart-Service -Name adfssrv
    

    Anda perlu menonaktifkan binding token karena Anda men-deploy AD FS di belakang load balancer, dan load balancer menghentikan koneksi TLS.

Jika Anda mengalami masalah terkait izin dengan langkah-langkah ini, hubungi Dukungan Google Cloud.

Mengonfigurasi TLS

Saat membuat koneksi ke backend, load balancer HTTPS tidak menggunakan ekstensi server name indication (SNI). Agar AD FS menerima koneksi tanpa SNI, Anda harus mengonfigurasi penggantian sertifikat:

  1. Di PowerShell, lihat binding sertifikat server SSL untuk AD FS:

    netsh http show sslcert hostnameport=PUBLIC_FQDN:443
    

    Ganti PUBLIC_FQDN dengan nama domain publik yang sepenuhnya memenuhi syarat AD FS.

  2. Konfigurasikan sertifikat penggantian untuk binding:

    netsh http add sslcert ipport=0.0.0.0:443 certhash=CERTIFICATE_HASH "appid=APP_ID" "certstorename=MY"
    

    Ganti kode berikut:

    • CERTIFICATE_HASH: Hash sertifikat yang ditampilkan dalam perintah sebelumnya.
    • APP_ID: ID aplikasi yang ditampilkan di perintah sebelumnya, termasuk tanda kurung kurawal.
  3. Mulai ulang komputer untuk menyelesaikan penginstalan:

    Restart-Computer
    

    Tunggu sekitar 1 menit sampai proses mulai ulang selesai.

Menguji AD FS

Layanan AD FS di-deploy, tetapi Anda masih harus memverifikasi bahwa layanan tersebut dapat diakses menggunakan load balancer HTTPS:

  1. Kembali ke sesi Cloud Shell.
  2. Verifikasi bahwa sertifikat SSL berstatus ACTIVE:

    gcloud compute ssl-certificates describe CERTIFICATE_NAME \
        --global \
        --format="get(managed.status)"
    

    Jika sertifikat berstatus PROVISIONING, data DNS yang Anda buat untuk AD FS mungkin memerlukan waktu tambahan untuk diterapkan. Untuk detail lebih lanjut, lihat Memecahkan masalah sertifikat yang dikelola Google.

  3. Di komputer lokal Anda, buka browser dan navigasikan ke URL berikut:

    https://PUBLIC_FQDN/adfs/ls?wa=wsignout1.0
    

    Ganti PUBLIC_FQDN dengan nama domain publik yang sepenuhnya memenuhi syarat AD FS

    Pastikan Anda melihat pesan You have successfully signed out, yang menunjukkan bahwa AD FS telah berhasil di-deploy.

Jika Anda berencana menggunakan Autentikasi Windows Terintegrasi (IWA), pastikan Anda bisa mendapatkan tiket Kerberos untuk AD FS:

  1. Hubungkan ke instance VM atau VM lain yang bergabung dengan domain dengan menggunakan Desktop Jarak Jauh dan login menggunakan kredensial domain.
  2. Klik kanan tombol Start (atau tekan Win+X), lalu klik Windows PowerShell.
  3. Gunakan perintah klist untuk meminta tiket layanan untuk AD FS:

    klist get http/PUBLIC_FQDN
    

    Pastikan output menyertakan tiket untuk AD FS:

    #1>     Client: USER @ DOMAIN
            Server: http/PUBLIC_FQDN @ DOMAIN
            KerbTicket Encryption Type: ...
    

AD FS siap digunakan. Untuk mengetahui detail tentang cara menggunakan dan mengonfigurasi layanan, lihat Operasi FS AD.