このガイドでは、Managed Microsoft AD ドメインに Windows Server 2019 用の Microsoft Active Directory フェデレーション サービス(AD FS)をデプロイする方法について説明します。
この環境を次の図に示します。
ユーザーは、Google マネージド証明書を使用して、SSL 接続を終了する HTTPS ロードバランサと通信します。ロードバランサは、Windows Server 2019 用の Microsoft AD FS を実行し、マネージド Microsoft AD ドメインに参加している VM インスタンスに接続を転送します。ロードバランサと VM インスタンス間の通信は、自己署名 SSL 証明書を使用して保護されます。
デプロイでは単一の AD FS インスタンスと Windows 内部データベースが使用されるため、小規模な環境に適しています。信頼性またはセキュリティの需要が高い環境の場合は、複数の AD FS インスタンスをファーム構成でデプロイし、フェデレーション プロキシをデプロイすることを検討してください。
始める前に
このガイドを完了するには、次の準備が必要です。
- 既存の Managed Microsoft AD ドメイン。
- Managed Microsoft AD ドメインの委任された管理者の認証情報。デフォルトでは、委任された管理者アカウントの名前は
setupadmin
です。 - 一般公開の DNS ゾーン。このゾーンを使用して、AD FS のパブリック DNS 名を作成します。
AD FS のデプロイの要件についてよくご確認ください。
プロジェクトとネットワークの準備
では、AD FS のデプロイ用に Google Cloud プロジェクトと VPC を準備します。
VM インスタンスを作成する
AD FS を実行するサービス アカウントと VM インスタンスを作成します。
Google Cloud コンソールで Cloud Shell を開きます。
次の変数を初期化します。
VPC_NAME=VPC_NAME SUBNET_NAME=SUBNET_NAME
ここで
- VPC_NAME は VPC の名前です。
- SUBNET_NAME は、AD FS をデプロイするサブネット名です。
デフォルトのプロジェクト ID を設定します。
gcloud config set project
PROJECT_ID
PROJECT_ID
は、Google Cloud プロジェクトの ID に置き換えます。デフォルトのリージョンとゾーンを設定します。
gcloud config set compute/region
REGION
gcloud config set compute/zoneZONE
ここで
REGION
は、デプロイするリージョンの ID です。ZONE
は、デプロイするゾーンの ID です。
サービス アカウントを作成します。
gcloud iam service-accounts create ad-federation-services
Windows Server 2019 を実行し、特別なスクリプトを使用する VM インスタンスを作成して、自動的に AD FS サーバーのロールをインストールします。
gcloud compute instances create adfs-1 \ --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 ad-federation-services@$(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"
シリアルポートの出力を表示して、VM の初期化プロセスをモニタリングします。
gcloud compute instances tail-serial-port-output adfs-1
「
Instance setup finished
」という出力が表示されるまで 3 分ほど待ち、表示されたらCtrl+C
を押します。この時点で、VM インスタンスが使用できるようになります。VM インスタンスにユーザー名とパスワードを作成します。
リモート デスクトップを使用して VM に接続し、前のステップで作成したユーザー名とパスワードを使用してログインします。
[スタート] ボタンを右クリックするか
Win+X
を押して、[Windows PowerShell(管理者)] をクリックします。特権昇格を確認するプロンプトが表示されたら [はい] をクリックします。
コンピュータを Active Directory ドメインに追加して再起動します。
Add-Computer -Domain
DOMAIN -Restart
DOMAIN
は、Active Directory ドメインの DNS 名に置き換えます。再起動が完了するまで 1 分ほど待ちます。
ロードバランサの作成
ここで、単一の仮想 IP アドレスを使用してユーザーが AD FS にアクセスできるようにするロードバランサを作成します。
AD FS を実行する VM インスタンスをロードバランサに関連付けるには、まず非マネージド インスタンス グループを作成して、それから、このインスタンス グループをロードバランサに割り当てます。
- 既存の Cloud Shell セッションに戻ります。
非マネージド インスタンス グループを作成します。
gcloud compute instance-groups unmanaged create adfs && gcloud compute instance-groups set-named-ports adfs --named-ports=http:443
インスタンス グループに既存の VM インスタンスを追加します。
gcloud compute instance-groups unmanaged add-instances adfs --instances adfs-1
AD FS の HTTPS ポートをプロービングするヘルスチェックを作成します。
gcloud compute health-checks create tcp adfs-health-check --port 443
HTTPS ヘルスチェックと前の手順で作成したインスタンス グループを使用するロードバランサ バックエンド サービスを作成します。
gcloud compute backend-services create adfs-backend \ --health-checks adfs-health-check \ --port-name http \ --protocol HTTPS \ --global && \ gcloud compute backend-services add-backend adfs-backend \ --instance-group adfs \ --global \ --instance-group-zone $(gcloud config get-value compute/zone)
ロードバランサ用の静的外部 IP アドレスを予約します。
gcloud compute addresses create adfs-external --global
ロードバランサ用のマネージド SSL 証明書を作成します。
gcloud compute ssl-certificates create adfs-external \ --domains PUBLIC_FQDN \ --global
ここで、
PUBLIC_FQDN
は、AD FS に使用する一般公開された完全修飾ドメイン名(FQDN)です(例:login.example.com
)。ロードバランサ フロントエンドを作成します。このフロントエンドは、外部 IP アドレスを使用し、バックエンド サービスにトラフィックを転送します。
gcloud compute url-maps create adfs \ --default-service adfs-backend && \ gcloud compute target-https-proxies create adfs-proxy \ --ssl-certificates adfs-external \ --url-map adfs && \ gcloud compute forwarding-rules create adfs \ --global \ --address adfs-external \ --target-https-proxy adfs-proxy \ --ports 443
ファイアウォール ルールを作成し、ロードバランサから AD FS を実行する VM インスタンスへのトラフィックを許可します。
gcloud compute firewall-rules create allow-https-to-adfs \ --allow tcp:443 \ --network $VPC_NAME \ --source-ranges 130.211.0.0/22,35.191.0.0/16 \ --target-service-accounts ad-federation-services@$(gcloud config get-value core/project).iam.gserviceaccount.com
ソース範囲は、内部ロードバランサの IP 範囲です。詳細については、ファイアウォール ルールを構成するをご覧ください。
ロードバランサの IP アドレスを調べます。
gcloud compute addresses describe adfs-external \ --global \ --format=value\(address\)
パブリック DNS ゾーンに、ロードバランサの IP アドレスを指す DNS
A
レコードを作成します。DNS レコードの完全修飾名は、SSL 証明書に使用した名前と一致する必要があります。
AD FS をデプロイする
ここで、AD FS サーバーのロールを VM インスタンス adfs-1
にデプロイします。マネージド Microsoft AD ドメインにドメイン管理者権限がないため、サーバー マネージャーを使用してインストールを行うことはできず、代わりに PowerShell を使用する必要があります。
サービス ユーザーを作成する
ここで、Active Directory で AD FS サービス用のユーザー アカウントを作成します。
- リモート デスクトップを使用して VM インスタンス
adfs-1
に接続し、委任された管理者の認証情報でログインします。 - [スタート] ボタンを右クリックするか Win + X を押して、[Windows PowerShell(管理者)] をクリックします。
AD FS サービス アカウント用のパスワードを設定します。
$AdfsCredential = Get-Credential -UserName adfssvc -Message 'Enter password'
Active Directory ユーザー
adfssvc
を作成します。$CloudOuPath = "OU=Cloud," + (Get-ADDomain).DistinguishedName $AdfsUser = New-ADuser ` -Name adfssvc ` -DisplayName 'AD FS service account' ` -AccountPassword $AdfsCredential.Password ` -Path "$CloudOuPath" ` -PasswordNeverExpires $True ` -PassThru | Enable-ADAccount -PassThru
ローカルの管理者グループにユーザーを追加します。
Add-LocalGroupMember ` -Group "Administrators" ` -Member "$env:userdomain\adfssvc"
サービス プリンシパル名を割り当てます。
setspn -a http/PUBLIC_FQDN adfssvc
ここで、
PUBLIC_FQDN
は AD FS の公開完全修飾ドメイン名です。Active Directory に空のコンテナを作成します。このコンテナは、後で AD FS をインストールするときに使用します。
New-ADObject ` -Type Container ` -Name "ADFS Data" ` -Path $CloudOuPath
AD FS ユーザーにコンテナに対する完全な制御権限を付与します。
dsacls.exe "CN=ADFS Data,$CloudOuPath" /G $env:userdomain\adfssvc:GA /I:T
AD FS をインストールする
ここで、AD FS を adfs-1
にインストールします。
ADFS ユーザーとして PowerShell セッションを開始します。
runas /u:$env:userdomain\adfssvc powershell
ここで、新しい PowerShell セッションは、AD FS ユーザーとして実行されますが、昇格された権限はありません。
新しい PowerShell セッションで、2 番目の、昇格した PowerShell セッションを開始します。
Start-Process PowerShell -Verb RunAs
新しい昇格した PowerShell セッションで、後続のすべての手順を実行する必要があります。
2,048 ビットの RSA 鍵を使用する自己署名 SSL 証明書を作成し、パソコンの証明書ストアに保存します。
$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
ここで、
PUBLIC_FQDN
は AD FS の公開完全修飾ドメイン名です。AD FS がトークン署名証明書として使用する別の 2,048 ビットの RSA 証明書を作成します。
$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'
分散鍵マネージャー(DKM)コンテナを作成します。
$CloudOuPath = "OU=Cloud," + (Get-ADDomain).DistinguishedName $DkmContainer = New-ADObject ` -Name ((New-Guid).Guid) ` -Type Container ` -Path "CN=ADFS Data,$CloudOuPath" ` -PassThru
以前に設定した AD FS ユーザーの認証情報を再入力します。
$AdfsCredential = Get-Credential -UserName "$env:userdomain\adfssvc" -Message 'Enter password'
以前に作成した証明書と DKM コンテナを使用して AD FS をインストールします。
Install-ADFSFarm ` -CertificateThumbprint $Certificate.Thumbprint ` -SigningCertificateThumbprint $SigningCertificate.Thumbprint ` -DecryptionCertificateThumbprint $SigningCertificate.Thumbprint ` -FederationServiceName $DnsName ` -ServiceAccountCredential $AdfsCredential ` -OverwriteConfiguration ` -AdminConfiguration @{"DKMContainerDn"=$DkmContainer.DistinguishedName}
このコマンドにより、次の警告メッセージが表示される場合があります。
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.
SPN をすでに設定しており、証明書ベースの認証を使用していないため、これらの警告は無視できます。
統合 Windows 認証(IWA)を使用して AD FS への認証を行う場合は、次のコマンドを実行してトークンのバインディングを無効にします。
Set-ADFSProperties –ExtendedProtectionTokenCheck None Restart-Service -Name adfssrv
AD FS をロードバランサの背後にデプロイしロードバランサで TLS 接続を終端するため、トークン バインディングを無効にする必要があります。
TLS の構成
バックエンドへの接続を確立するときに、HTTPS ロードバランサは Server Name Indication(SNI)拡張機能を使用しません。AD FS が SNI なしで接続を受け入れるには、証明書の代替を構成する必要があります。
PowerShell で、AD FS 用の SSL サーバー証明書バインディングを表示します。
netsh http show sslcert hostnameport=PUBLIC_FQDN:443
ここで、
PUBLIC_FQDN
は AD FS の公開完全修飾ドメイン名です。バインディング用の代替証明書を構成します。
netsh http add sslcert ipport=0.0.0.0:443 certhash=CERTIFICATE_HASH "appid=APP_ID" "certstorename=MY"
ここで
CERTIFICATE_HASH
は、前のコマンドで表示された証明書ハッシュです。APP_ID
は、前のコマンドで表示された、中かっこを含むアプリケーション ID です。
パソコンを再起動してインストールを完了します。
Restart-Computer
再起動が完了するまで 1 分ほど待ちます。
AD FS のテスト
ここで、AD FS サービスがデプロイされましたが、HTTPS ロードバランサを介してサービスにアクセスできることを確認する必要がまだあります。
- Cloud Shell セッションに戻ります。
SSL 証明書が
ACTIVE
状態であることを確認します。gcloud compute ssl-certificates describe adfs-external \ --global \ --format="get(managed.status)"
証明書が
PROVISIONING
状態の場合、AD FS 用に作成した DNS レコードが反映されるまでに時間がかかる場合があります。詳細については、Google マネージド証明書のトラブルシューティングをご覧ください。ローカル コンピュータでブラウザを開き、次の URL に移動します。
https://PUBLIC_FQDN/adfs/ls?wa=wsignout1.0
PUBLIC_FQDN
は、AD FS の公開完全修飾ドメイン名に置き換えます。AD FS が正常にデプロイされたことを示す「You have successfully signed out」というメッセージが表示されることを確認します。
統合 Windows 認証(IWA)を使用する場合は、AD FS の Kerberos チケットを取得できることを確認します。
- リモート デスクトップを使用して、VM インスタンス
adfs-1
かドメインに参加している別の VM に接続し、ドメイン認証情報を使用してログインします。 - [スタート] ボタンを右クリックするか Win + X を押して、[Windows PowerShell] をクリックします。
klist
コマンドを使用して、AD FS のサービス チケットをリクエストします。klist get http/PUBLIC_FQDN
出力に AD FS のチケットが含まれていることを確認します。
#1> Client: USER @ DOMAIN Server: http/PUBLIC_FQDN @ DOMAIN KerbTicket Encryption Type: ...
これで、AD FS を使用する準備が整いました。サービスの使用と構成の詳細については、AD FS オペレーションをご覧ください。