マネージド Microsoft AD ドメインに Active Directory フェデレーション サービスをデプロイする

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

このガイドでは、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 インスタンスをファーム構成でデプロイし、フェデレーション プロキシをデプロイすることを検討してください。

始める前に

このガイドを完了するには、次の準備が必要です。

AD FS のデプロイの要件についてよくご確認ください。

プロジェクトとネットワークの準備

では、AD FS のデプロイ用に Google Cloud プロジェクトと VPC を準備します。

VM インスタンスを作成する

AD FS を実行するサービス アカウントと VM インスタンスを作成します。

  1. Google Cloud コンソールCloud Shell を開きます。

    Cloud Shell をアクティブにする

  2. 次の変数を初期化します。

    VPC_NAME=VPC_NAME
    SUBNET_NAME=SUBNET_NAME
    

    ここで

    • VPC_NAME は VPC の名前です。
    • SUBNET_NAME は、AD FS をデプロイするサブネット名です。
  3. デフォルトのプロジェクト ID を設定します。

    gcloud config set project PROJECT_ID
    

    PROJECT_ID は、Google Cloud プロジェクトの ID に置き換えます。

  4. デフォルトのリージョンとゾーンを設定します。

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

    ここで

    • REGION は、デプロイするリージョンの ID です。
    • ZONE は、デプロイするゾーンの ID です。
  5. サービス アカウントを作成します。

    gcloud iam service-accounts create ad-federation-services
    
  6. 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"
    
    1. シリアルポートの出力を表示して、VM の初期化プロセスをモニタリングします。

      gcloud compute instances tail-serial-port-output adfs-1
      

      Instance setup finished」という出力が表示されるまで 3 分ほど待ち、表示されたら Ctrl+C を押します。この時点で、VM インスタンスが使用できるようになります。

    2. VM インスタンスにユーザー名とパスワードを作成します。

    3. リモート デスクトップを使用して VM に接続し、前のステップで作成したユーザー名とパスワードを使用してログインします。

    4. [スタート] ボタンを右クリックするか Win+X を押して、[Windows PowerShell(管理者)] をクリックします。

    5. 特権昇格を確認するプロンプトが表示されたら [はい] をクリックします。

    6. コンピュータを Active Directory ドメインに追加して再起動します。

      Add-Computer -Domain DOMAIN -Restart
      

      DOMAIN は、Active Directory ドメインの DNS 名に置き換えます。

      再起動が完了するまで 1 分ほど待ちます。

ロードバランサの作成

ここで、単一の仮想 IP アドレスを使用してユーザーが AD FS にアクセスできるようにするロードバランサを作成します。

AD FS を実行する VM インスタンスをロードバランサに関連付けるには、まず非マネージド インスタンス グループを作成して、それから、このインスタンス グループをロードバランサに割り当てます。

  1. 既存の Cloud Shell セッションに戻ります。
  2. 非マネージド インスタンス グループを作成します。

    gcloud compute instance-groups unmanaged create adfs &&
    gcloud compute instance-groups set-named-ports adfs --named-ports=http:443
    
  3. インスタンス グループに既存の VM インスタンスを追加します。

    gcloud compute instance-groups unmanaged add-instances adfs --instances adfs-1
    
  4. AD FS の HTTPS ポートをプロービングするヘルスチェックを作成します。

    gcloud compute health-checks create tcp adfs-health-check --port 443
    
  5. 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)
    
  6. ロードバランサ用の静的外部 IP アドレスを予約します。

    gcloud compute addresses create adfs-external --global
    
  7. ロードバランサ用のマネージド SSL 証明書を作成します。

    gcloud compute ssl-certificates create adfs-external \
      --domains PUBLIC_FQDN \
      --global
    

    ここで、PUBLIC_FQDN は、AD FS に使用する一般公開された完全修飾ドメイン名(FQDN)です(例: login.example.com)。

  8. ロードバランサ フロントエンドを作成します。このフロントエンドは、外部 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
    
  9. ファイアウォール ルールを作成し、ロードバランサから 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 範囲です。詳細については、ファイアウォール ルールを構成するをご覧ください。

  10. ロードバランサの IP アドレスを調べます。

    gcloud compute addresses describe adfs-external \
       --global \
       --format=value\(address\)
    
  11. パブリック DNS ゾーンに、ロードバランサの IP アドレスを指す DNS A レコードを作成します。DNS レコードの完全修飾名は、SSL 証明書に使用した名前と一致する必要があります。

AD FS をデプロイする

ここで、AD FS サーバーのロールを VM インスタンス adfs-1 にデプロイします。マネージド Microsoft AD ドメインにドメイン管理者権限がないため、サーバー マネージャーを使用してインストールを行うことはできず、代わりに PowerShell を使用する必要があります。

サービス ユーザーを作成する

ここで、Active Directory で AD FS サービス用のユーザー アカウントを作成します。

  1. リモート デスクトップを使用して VM インスタンス adfs-1 に接続し、委任された管理者の認証情報でログインします。
  2. [スタート] ボタンを右クリックするか Win + X を押して、[Windows PowerShell(管理者)] をクリックします。
  3. AD FS サービス アカウント用のパスワードを設定します。

    $AdfsCredential = Get-Credential -UserName adfssvc -Message 'Enter password'
    
  4. 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
    
  5. ローカルの管理者グループにユーザーを追加します。

    Add-LocalGroupMember `
     -Group "Administrators" `
     -Member "$env:userdomain\adfssvc"
    
  6. サービス プリンシパル名を割り当てます。

    setspn -a http/PUBLIC_FQDN adfssvc
    

    ここで、PUBLIC_FQDN は AD FS の公開完全修飾ドメイン名です。

  7. Active Directory に空のコンテナを作成します。このコンテナは、後で AD FS をインストールするときに使用します。

    New-ADObject `
      -Type Container `
      -Name "ADFS Data" `
      -Path $CloudOuPath
    
  8. AD FS ユーザーにコンテナに対する完全な制御権限を付与します。

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

AD FS をインストールする

ここで、AD FS を adfs-1 にインストールします。

  1. ADFS ユーザーとして PowerShell セッションを開始します。

    runas /u:$env:userdomain\adfssvc powershell
    

    ここで、新しい PowerShell セッションは、AD FS ユーザーとして実行されますが、昇格された権限はありません。

  2. 新しい PowerShell セッションで、2 番目の、昇格した PowerShell セッションを開始します。

    Start-Process PowerShell -Verb RunAs
    

    新しい昇格した PowerShell セッションで、後続のすべての手順を実行する必要があります。

  3. 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 の公開完全修飾ドメイン名です。

  4. 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'
    
  5. 分散鍵マネージャー(DKM)コンテナを作成します。

    $CloudOuPath = "OU=Cloud," + (Get-ADDomain).DistinguishedName
    $DkmContainer = New-ADObject `
      -Name ((New-Guid).Guid) `
      -Type Container `
      -Path "CN=ADFS Data,$CloudOuPath" `
      -PassThru
    
  6. 以前に設定した AD FS ユーザーの認証情報を再入力します。

    $AdfsCredential = Get-Credential -UserName "$env:userdomain\adfssvc" -Message 'Enter password'
    
  7. 以前に作成した証明書と 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 をすでに設定しており、証明書ベースの認証を使用していないため、これらの警告は無視できます。

  8. 統合 Windows 認証(IWA)を使用して AD FS への認証を行う場合は、次のコマンドを実行してトークンのバインディングを無効にします。

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

    AD FS をロードバランサの背後にデプロイしロードバランサで TLS 接続を終端するため、トークン バインディングを無効にする必要があります。

TLS の構成

バックエンドへの接続を確立するときに、HTTPS ロードバランサは Server Name Indication(SNI)拡張機能を使用しません。AD FS が SNI なしで接続を受け入れるには、証明書の代替を構成する必要があります。

  1. PowerShell で、AD FS 用の SSL サーバー証明書バインディングを表示します。

    netsh http show sslcert hostnameport=PUBLIC_FQDN:443
    

    ここで、PUBLIC_FQDN は AD FS の公開完全修飾ドメイン名です。

  2. バインディング用の代替証明書を構成します。

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

    ここで

    • CERTIFICATE_HASH は、前のコマンドで表示された証明書ハッシュです。
    • APP_ID は、前のコマンドで表示された、中かっこを含むアプリケーション ID です。
  3. パソコンを再起動してインストールを完了します。

    Restart-Computer
    

    再起動が完了するまで 1 分ほど待ちます。

AD FS のテスト

ここで、AD FS サービスがデプロイされましたが、HTTPS ロードバランサを介してサービスにアクセスできることを確認する必要がまだあります。

  1. Cloud Shell セッションに戻ります。
  2. SSL 証明書が ACTIVE 状態であることを確認します。

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

    証明書が PROVISIONING 状態の場合、AD FS 用に作成した DNS レコードが反映されるまでに時間がかかる場合があります。詳細については、Google マネージド証明書のトラブルシューティングをご覧ください。

  3. ローカル コンピュータでブラウザを開き、次の 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 チケットを取得できることを確認します。

  1. リモート デスクトップを使用して、VM インスタンス adfs-1 かドメインに参加している別の VM に接続し、ドメイン認証情報を使用してログインします。
  2. [スタート] ボタンを右クリックするか Win + X を押して、[Windows PowerShell] をクリックします。
  3. 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 オペレーションをご覧ください。