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 domain Layanan Terkelola untuk 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 meneruskan koneksi ke instance VM yang menjalankan Microsoft AD FS untuk Windows Server 2019 dan yang digabungkan ke domain Microsoft AD Terkelola. Komunikasi antara load balancer dan instance VM diamankan dengan menggunakan sertifikat SSL yang ditandatangani sendiri.

Deployment menggunakan satu instance AD FS dan Database Internal Windows, yang membuatnya cocok untuk lingkungan kecil. Untuk lingkungan dengan peningkatan keandalan atau tuntutan keamanan, pertimbangkan untuk men-deploy beberapa instance AD FS dalam konfigurasi farm 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 tempat men-deploy AD FS.
    • SA_NAME: Nama akun layanan

    Untuk mengonfigurasi dan bergabung dengan instance VM ke domain Active Directory, 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, pertama-tama buat grup instance tidak terkelola, lalu tetapkan grup instance ini ke load balancer:

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

    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 pemeriksaan kesehatan.

  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 di instance VM. Karena tidak memiliki hak Domain Admins di domain Microsoft AD Terkelola, Anda tidak dapat menggunakan Server Manager 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 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. Tetapkan 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. Buat pengguna Active Directory:

    $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 akun utama layanan:

    setspn -a http/PUBLIC_FQDN USER
    

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

  7. Buat penampung 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 di penampung:

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

Menginstal AD FS

Anda dapat menginstal AD FS di instance VM:

  1. Mulai sesi PowerShell sebagai pengguna ADFS:

    runas /u:$env:userdomain\USER powershell
    

    Sesi PowerShell 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 di sesi PowerShell baru yang ditingkatkan.

  3. Buat sertifikat SSL yang ditandatangani sendiri yang 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 penampung Pengelola Kunci Terdistribusi (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 penampung 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 ini 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 Autentikasi Windows Terintegrasi (IWA) untuk melakukan autentikasi ke AD FS, jalankan perintah berikut untuk menonaktifkan binding token:

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

    Menonaktifkan binding token diperlukan 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 dapat 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 AD FS yang sepenuhnya memenuhi syarat.

  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 dalam 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 berada dalam status ACTIVE:

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

    Jika sertifikat dalam status PROVISIONING, data DNS yang Anda buat untuk AD FS mungkin memerlukan waktu tambahan untuk di-propagate. Untuk mengetahui detail selengkapnya, lihat Memecahkan masalah sertifikat yang dikelola Google.

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

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

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

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

Jika Anda berencana menggunakan Integrated Windows Authentication (IWA), pastikan Anda dapat memperoleh tiket Kerberos untuk AD FS:

  1. Hubungkan ke instance VM atau VM yang tergabung dalam domain lain 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 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 AD FS.