Share via


Microsoft SharePoint 2010: ファームをまたぐサービスを構成する

ファームの境界を越えて通信するように SharePoint を構成し、他のサーバー ファームのサービスを共有および利用することができます。

Shannon Bray

マイクロソフトでは、SharePoint でサービスを提供および使用する方法について多くの機能強化を施してきました。SharePoint 2007 では、共有サービス プロバイダ (SSP) と呼ばれるサービスが使用でるようになりました。SSP によって、SharePoint 2003 から大きく一歩前進しましたが、いくつかの課題がありました。

SharePoint 2007 アーキテクチャの主な問題は、その構成が全部かゼロかという状態であったことです。Web アプリケーションは特定の SSP に関連付けられており、サービスを選択して使用することができませんでした。たとえば、SSP で Search と Excel Services の両方のサービスが構成されている場合、Enterprise Search を使用する SharePoint Web アプリケーションでも Excel Services にアクセスする必要がありました。

また、SSP のアーキテクチャには拡張性がなく、同じ SSP インフラストラクチャを使用して、独自のサービスを作成することができませんでした。最後に最も重要な問題点になりますが、SharePoint 2007 では、ファームをまたぐサービスを構成するのが困難でした。SharePoint 2010 の新しいサービス アーキテクチャでは、このすべての問題が解決されています。

サービス アプリケーションのアーキテクチャを理解する

SharePoint ファームの境界を越えてサービスが通信できるようにする方法について詳しく説明する前に、この通信を実現するコンポーネントとサービスについて理解しておくことが重要です。サービス アプリケーションの主要なアーキテクチャの特性には、次のようなものがあります。

  • サービスを自由に使用できる
  • サービス アーキテクチャに拡張性がある
  • サービスが SharePoint Foundation でサポートされている
  • サービスをスケール アウトできる
  • サービスに弾力性/冗長性を持たせることができる
  • サービスをフェデレーションできる

SharePoint 2007 のサービスと異なり、どの SharePoint Web アプリケーションでサービスを使用するかを決めることができます。柔軟性に欠けていた SSP に縛られることなく、適切なアーキテクチャを選択できます。

サービス アプリケーションのアーキテクチャに拡張性があるということは、独自のカスタム サービスを構築できます。つまり、サイト コレクションや SharePoint Web アプリケーションの垣根を越えて運用可能なカスタム ソリューションを展開できるため、時間、お金、およびリソースを大幅に削減できます。

SharePoint 2010 の SharePoint Foundation では、既定のサービスは用意されていませんが、サービスをサポートするインフラストラクチャが用意されているので、独自のサービスを構築して、SharePoint Foundation で使用できます。新しいサービス アプリケーションのアーキテクチャでは、複数のサーバーで負荷を分散できるので、適切な負荷を処理する設計が可能になります。

最も大きく向上したサービスは Enterprise Search です。SharePoint 2007 では、インデックス サーバーが単一障害点となっていましたが、SharePoint 2010 では、Search Crawl サービスを複数のサーバーに展開することができます。1 つのサービスで障害が発生しても、冗長性が確保されているので、システムは期待どおり継続して動作します。

また、ファームの境界を越えてサービスを共有できるようになりました。そのため、共有するサービスを 1 つのファームに統合しながら、多数のコンシューマーにサービスを提供することが可能になりました。

重要な概念を理解する

"サービス アプリケーション" という言葉は過剰に使用されています。その結果、コンポーネントのある場所やコンポーネントの機能をユーザーが理解することが困難になっています。バックグラウンドで行われていることを十分理解するには、次の用語を理解しておくことが重要です。

サービス: ファームのサーバーに展開されたアプリケーションのバイナリ。

サービス マシン インスタンス: サーバーで実行されているサービスの実際のインスタンス。

サービス アプリケーション: サービスの構成や管理情報 (サービス アプリケーションの情報やデータベースの接続文字列など) を含む論理コンポーネント。

サービス アプリケーション プロキシ: サービスやロード バランサーと通信するためにサービス コンシューマーが使用するインターフェイス。サービス コンシューマーは、インターフェイスを使用することで、接続先のサーバーやサービスの利用方法を理解します。サービス アプリケーション プロキシは、Web サービスでも Windows Communication Foundation (WCF) プロキシでもないことに注意してください。

サービス コンシューマー: サービスを利用する任意のアプリケーションやサービス。

サービス プロキシ グループ: 特定の Web アプリケーションに関連付けられているサービス アプリケーションのグループ。

サービスは、ファーム構成ウィザード、サーバーの全体管理、Windows PowerShell など、さまざまな方法を使用して展開できます。ファーム構成ウィザードでは、既定値を使用して、多くのサービスを構成するので、運用環境では使用しないことをお勧めします。問題なく運用するためには手動で構成しなければならないサービスが多数あります。

サーバーの全体管理では、サービスと関連付けられているフィールドにデータを設定することで、いくつかのサービスを構成できます。サーバーの全体管理では、ファーム構成ウィザードより多くのことを制御できますが、ほとんどの SharePoint プロフェッショナルは、Windows PowerShell を使用しています。

Windows PowerShell を使用すると、環境を最も細かく制御できますが、設定について注意が必要なサービス アプリケーションが多数あります。Windows PowerShell を使用して、さまざまな SharePoint サービスを準備する方法の詳細については、Shannon Bray と Gary Lapointe の共著『Automating SharePoint 2010 with Windows PowerShell 2.0』(Wiley、2011 年) を参照してください。

SharePoint ファームを構成すると、次の 2 つのサービスが自動的に作成されます。これらは、サービスが機能するうえで鍵となるコンポーネントです。

  • Application Discovery and Load Balancer Service アプリケーション
  • Security Token Service (STS) アプリケーション

サービス アプリケーションでは、すべての通信が HTTPS 経由で行われるため、Web エンドポイントを公開する必要があります。また、サービス アプリケーションが TCP ポート 32843 と 32844 経由で通信し、カスタム サービス アプリケーションが一般的にポート 32845 を使用することを把握しておくのも重要です。

サービス フェデレーションのしくみを理解する

サービスがどのようにフェデレーションされるのかは理解できたと思いますので、今度は、フェデレーションをサポートしている次のサービスについて見てみましょう。

  • Search
  • User Profile
  • Managed Metadata
  • Business Connectivity Services (BCS)
  • Secure Store
  • Web Analytics

WAN でサポートされているサービスは、他にも多数あります。たとえば、Search、Managed Metadata、Business Data Connectivity、User Profile、および Secure Store がサポートされています。さまざまなサービスがサポートされていますが、Search と Managed Metadata のみを使用することをお勧めします。

WAN 環境では、Search のクロール中に待ち時間が増加します。BCS では、データがキャッシュされていない、初回の処理が低速になります。User Profile サービスでは、User Profile Replication Engine を使用するため、WAN 経由での使用は推奨されません。アプリケーションで Secure Store を使用すると、待ち時間が生じます。

ファームの例

この例では、2 つのファームを作成します。1 つのファームではエンタープライズ サービスをホストし、もう 1 つのファームではコンテンツ Web アプリケーションをホストします。任意の環境でサービスをフェデレーションする方法を理解できるように、ここでは、どちらのファームもゼロから作成して、各手順の概要を紹介します。

ここでは 2 つのファームは同じドメインに存在していますが、別のドメインに作成することもできます。この例では同じドメインを使用するので、このデモンストレーションは、TechED-AD、TechED-SQL、TechEd-Services、および TechEd-SP という 4 台のサーバーで構成できます。

まず、Active Directory に適切なアカウントを作成します。ここでは、spFarm、spServices、spContent、spCrawl、spUPS、および spC2WTS というアカウントを作成します。処理を効率化するには、いずれかの SharePoint ファームから Windows PowerShell を使用してアカウントを追加できます (詳細については、図 1 を参照してください)。ここでは Managed Service Accounts 組織単位 (OU) にアカウントを作成していることに注意してください。まだ、Windows Server 2008 R2 を使用されていない場合は、図 1 のスクリプトの CN の場所を変更する必要があります。

図 1 SharePoint アカウントを Active Directory に追加する

$domainName = $env:USERDOMAIN $LDAP = "LDAP://CN=Managed Service Accounts,DC=$domainName, DC=local" $objCN = [ADSI]$LDAP $objUser = $objCN.Create("user","CN=SharePoint Services") $objUser.Put("sAMAccountName","spServices") $objUser.Setinfo() $objUser.psbase.invokeset("AccountDisabled", "False") $objUser.SetPassword("pass@word1") $objUser.setinfo() $domainName = $env:USERDOMAIN $LDAP = "LDAP://CN=Managed Service Accounts,DC=$domainName, DC=local" $objCN = [ADSI]$LDAP $objUser = $objCN.Create("user","CN=SharePoint Content") $objUser.Put("sAMAccountName","spContent") $objUser.Setinfo() $objUser.psbase.invokeset("AccountDisabled", "False") $objUser.SetPassword("pass@word1") $objUser.setinfo() $domainName = $env:USERDOMAIN $LDAP = "LDAP://CN=Managed Service Accounts,DC=$domainName, DC=local" $objCN = [ADSI]$LDAP $objUser = $objCN.Create("user","CN=SharePoint Search Crawl") $objUser.Put("sAMAccountName","spCrawl") $objUser.Setinfo() $objUser.psbase.invokeset("AccountDisabled", "False") $objUser.SetPassword("pass@word1") $objUser.setinfo() $domainName = $env:USERDOMAIN $LDAP = "LDAP://CN=Managed Service Accounts,DC=$domainName, DC=local" $objCN = [ADSI]$LDAP $objUser = $objCN.Create("user","CN=SharePoint User Profile Services Sync") $objUser.Put("sAMAccountName","spUPS") $objUser.Setinfo() $objUser.psbase.invokeset("AccountDisabled", "False") $objUser.SetPassword("pass@word1") $objUser.setinfo() $domainName = $env:USERDOMAIN $LDAP = "LDAP://CN=Managed Service Accounts,DC=$domainName, DC=local" $objCN = [ADSI]$LDAP $objUser = $objCN.Create("user","CN=SharePoint C2WTS") $objUser.Put("sAMAccountName","spC2WTS") $objUser.Setinfo() $objUser.psbase.invokeset("AccountDisabled", "False") $objUser.SetPassword("pass@word1") $objUser.setinfo() $domainName = $env:USERDOMAIN $LDAP = "LDAP://CN=Managed Service Accounts,DC=$domainName, DC=local" $objCN = [ADSI]$LDAP $objUser = $objCN.Create("user","CN=SharePoint Farm") $objUser.Put("sAMAccountName","spFarm") $objUser.Setinfo() $objUser.psbase.invokeset("AccountDisabled", "False") $objUser.SetPassword("pass@word1") $objUser.setinfo()

アカウントのセットアップが完了したので、今度は、エンタープライズ サービスの環境に焦点を合わせます。この例では、フェデレーションをサポートし、迅速に準備できるサービス (Managed Metadata、BCS、および Secure Store) のみをファームに含めました。エンタープライズ サービス環境の作成には、複雑な処理が必要になるため Windows PowerShell を使用します。Windows PowerShell を使用すると、整合性を保つことが可能で、状態を把握できるので、このツールを使用することが重要です。図 2 のスクリプトを実行して、ファームを作成します。サービスについては、すぐに準備します。

コンシューマー ファームを作成するスクリプトは、図 3 のようになります。

図 2 エンタープライズ ファームを作成する

Add-PSSnapin Microsoft.SharePoint.Powershell -EA 0 # Settings $databaseServer = "TECHED-SQL" $configDatabase = "Enterprise_Farm_Config" $adminContentDB = "Enterprise_Farm_Content_Admin" $passphrase = "pass@word1" $farmAccountName = "TECHED\spfarm" $farmAccount = Get-Credential $farmAccountName $passphrase = (ConvertTo-SecureString $passphrase -AsPlainText -force) #will error, but fix the regkey... psconfig.exe -cmd upgrade Write-Host "Creating Configuration Database and Central Admin Content Database..." New-SPConfigurationDatabase -DatabaseServer $databaseServer -DatabaseName $configDatabase ` -AdministrationContentDatabaseName $adminContentDB ` -Passphrase $passphrase -FarmCredentials $farmAccount $spfarm = Get-SPFarm -ErrorAction SilentlyContinue -ErrorVariable err if ($spfarm -eq $null -or $err) { throw "Unable to verify farm creation." } Write-Host "ACLing SharePoint Resources..." Initialize-SPResourceSecurity Write-Host "Installing Services ..." Install-SPService Write-Host "Installing Features..." Install-SPFeature -AllExistingFeatures Write-Host "Creating Central Administration..." New-SPCentralAdministration -Port 2010 -WindowsAuthProvider NTLM Write-Host "Installing Help..." Install-SPHelpCollection -All Write-Host "Installing Application Content..." Install-SPApplicationContent Write-Host "Enterprise Farm Creation Complete!"

図 3 コンシューマー ファームを作成する

Add-PSSnapin Microsoft.SharePoint.Powershell -EA 0 # Settings $databaseServer = "TECHED-SQL" $configDatabase = "Consumer_Farm_Config" $adminContentDB = "Consumer_Farm_Content_Admin" $passphrase = "pass@word1" $farmAccountName = "TECHED\spfarm" $farmAccount = Get-Credential $farmAccountName $passphrase = (ConvertTo-SecureString $passphrase -AsPlainText -force) #will error, but fix the regkey... psconfig.exe -cmd upgrade Write-Host "Creating Configuration Database and Central Admin Content Database..." New-SPConfigurationDatabase -DatabaseServer $databaseServer -DatabaseName $configDatabase ` -AdministrationContentDatabaseName $adminContentDB ` -Passphrase $passphrase -FarmCredentials $farmAccount $spfarm = Get-SPFarm -ErrorAction SilentlyContinue -ErrorVariable err if ($spfarm -eq $null -or $err) { throw "Unable to verify farm creation." } Write-Host "ACLing SharePoint Resources..." Initialize-SPResourceSecurity Write-Host "Installing Services ..." Install-SPService Write-Host "Installing Features..." Install-SPFeature -AllExistingFeatures Write-Host "Creating Central Administration..." New-SPCentralAdministration -Port 2010 -WindowsAuthProvider NTLM Write-Host "Installing Help..." Install-SPHelpCollection -All Write-Host "Installing Application Content..." Install-SPApplicationContent Write-Host "Consumer Farm Creation Complete!"

エンタープライズ サービスの環境を準備する

これで他のファームと共有するサービスを作成できるようになりました。先ほど説明したように、6 つのサービスをフェデレーションできます。ここでは、いくつかのサービスを作成するので、残りは自分で作成してみてください。サービスを作成する方法については、図 4 を参照してください。

図 4 エンタープライズ サービスを準備する

Add-PSSnapin Microsoft.SharePoint.Powershell -EA 0 # App Pools $saAppPoolName = "SharePoint Web Services Default" $saAppPoolUserName = "TECHED\spservices" # Service Application and DB names $stateName = "Enterprise Farm State Service" $stateDBName = "Enterprise_Farm_StateService" $usageName = "Enterprise Farm Usage and Health Data Collection Service" $usageDBName = "Enterprise_Farm_Usage" # Create Managed Accounts and Application Pools # Service Apps Write-Host "Please supply the password for the $saAppPoolUserName Account..." $appPoolCred = Get-Credential $saAppPoolUserName $saAppPoolAccount = New-SPManagedAccount -Credential $appPoolCred $saAppPool = New-SPServiceApplicationPool -Name $saAppPoolName -Account $saAppPoolAccount # Create State Service Application and Proxy, and add to default proxy group Write-Host "Creating $stateName Application and Proxy..." $stateDB = New-SPStateServiceDatabase -Name $stateDBName $state = New-SPStateServiceApplication -Name $stateName -Database $stateDB New-SPStateServiceApplicationProxy -Name "$stateName Proxy" -ServiceApplication $state -DefaultProxyGroup # Setup the Usage Service App Write-Host "Creating $usageName Application and Proxy..." $serviceInstance = Get-SPUsageService New-SPUsageApplication -Name $usageName -DatabaseName $usageDBName -UsageService $serviceInstance # app pool $saAppPoolName = "SharePoint Web Services Default" $appPoolUserName = "TECHED\spServices" # Gets app pool or quits Write-Host "Getting Application Pool..." $saAppPool = Get-SPServiceApplicationPool -Identity $saAppPoolName -EA 0 if($saAppPool -eq $null) { Write-Host "Cannot find the Application Pool $appPoolName, please ensure it exists before continuing." Exit -1 } # MMS specifics $mmsInstanceName = "MetadataWebServiceInstance" $mmsName = "Enterprise Farm Managed Metadata Service" $mmsDBName = "Enterprise_Farm_Managed_Metadata" # Sets up Managed Metadata service instance & service app and proxy Write-Host "Creating $mmsName Application & proxy..." $mms = New-SPMetadataServiceApplication -Name $mmsName -ApplicationPool $saAppPoolName -DatabaseName $mmsDBName $proxy = New-SPMetadataServiceApplicationProxy -Name "$mmsName Proxy" -ServiceApplication $mms -DefaultProxyGroup Write-Host "Starting the $mmsInstanceName..." Get-SPServiceInstance | where{$_.GetType().Name -eq $mmsInstanceName} | Start-SPServiceInstance Write-Host "Enterprise MMS Complete!" # BDC specifics $bdcInstanceName = "Business Data Connectivity Service" $bdcName = "Enterprise Farm Business Data Connectivity Service" $bdcDBName = "Enterprise_Farm_BDC" # Sets up Business Data Connectivity Service Application and Proxy and Service Instance Write-Host "Creating $bdcInstanceName Application and Proxy..." $bdc = New-SPBusinessDataCatalogServiceApplication -Name $bdcName -ApplicationPool $saAppPoolName -DatabaseName $bdcDBName Write-Host "Starting the $bdcInstanceName Instance..." Get-SPServiceInstance | where-object {$_.TypeName -eq $bdcInstanceName} | Start-SPServiceInstance Write-Host "Enterprise BDC Complete!" # SSS Specifics $sssInstanceName = "Secure Store Service" $serverName = "TechED-Services" $sssName = "Enterprise Farm Secure Store Service" $sssDBName = "Enterprise_Farm_SecureStore" # Sets up Secure Store Service Application & Proxy and Service Instance Write-Host "Creating $sssName Application & Proxy..." $sss = New-SPSecureStoreServiceApplication -Name $sssName -ApplicationPool $saAppPoolName -DatabaseName $sssDBName -auditingEnabled:$true -auditlogmaxsize 30 -Sharing:$false $proxy = New-SPSecureStoreServiceApplicationProxy -Name "$sssName Proxy" -ServiceApplication $sss -DefaultProxyGroup Write-Host "Starting the $sssInstanceName Instance..." $sssInstance = Get-SPServiceInstance | where-object{$_.TypeName -eq "Secure Store Service" -and $_.Server.Address -eq $serverName} | Start-SPServiceInstance Write-Host "Enterprise SSS Complete!"

コンシューマーの環境を準備する

サービスを発行する側のファームの複雑な処理は完了しました。今度はエンタープライズ サービスを利用するファームに焦点を合わせます。この環境では任意のサービスを作成できます。最も重要なのは、別のファームのサービスを利用したり、その際サービスを発行する側のファームのリソースを使用したりできることを理解することです。

コンシューマー ファームでは、エンタープライズ サービスのデモンストレーションに使用できる SharePoint Web アプリケーションも準備します (図 5 参照)。

図 5 SharePoint のコンテンツを準備する

# App Pools $saAppPoolName = "SharePoint Web Services Default" $saAppPoolUserName = "TECHED\spservices" $waAppPoolName = "SharePoint Content" $waAppPoolUserName = "TECHED\spcontent" # Web App details $mainURL = "http://teched-sp" $webAppName = "TechED Consumer" $contentDBName = "Consumer_Farm_Content_Web_Application" # Root Site Collection details $ownerEmail = "administrator@teched.com" $ownerAlias = "TECHED\administrator" # Web app Write-Host "Please supply the password for the $waAppPoolUserName Account..." $appPoolCred = Get-Credential $waAppPoolUserName $waAppPoolAccount = New-SPManagedAccount -Credential $appPoolCred <# Create a new Web App using Claims (Windows (NTLM)) #> $authProvider = New-SPAuthenticationProvider $webApp = New-SPWebApplication -ApplicationPool $waAppPoolName -ApplicationPoolAccount $waAppPoolAccount -Name $webAppName -Port 80 -AuthenticationProvider $authProvider -DatabaseName $contentDBName # Set sensible content db limits Set-SPContentDatabase $contentDBName -MaxSiteCount 50 -WarningSiteCount 30 <# Create Site Collection at root #> New-SPSite -Url $mainURL -owneralias $ownerAlias -ownerEmail $ownerEmail Write-Host "WebApp Complete!"

証明書を構成する

ファームが完成したので、今度は、コンシューマーと共有するエンタープライズ サービスを発行します。サービスの発行は、次の手順で行います。

  • エンタープライズ ファームで証明書を作成する
  • コンシューマー ファームで証明書を作成する
  • 証明書を交換する
  • エンタープライズ ファームに証明書をインポートする
  • コンシューマー ファームに証明書をインポートする

まず、エンタープライズ ファームのルート証明書をエクスポートする必要があります。これには、証明書をエクスポートするパスを作成します (図 6 参照)。パスを確認したら、Get-SPCertificateAuthority コマンドレットを使用して、ファームの証明書をエクスポートします。

図 6 証明書のパスを作成する

# Add-PSSnapin Microsoft.SharePoint.Powershell -EA 0 $path = "C:\Certs" # Test and Create Path If ((test-path $path) -eq $false) { [IO.Directory]::CreateDirectory("$path") } # Export Cert $rootCert = (Get-SPCertificateAuthority).RootCertificate $rootCert.Export("Cert") | Set-Content "C:\Certs\EnterpriseServicesRootCert.cer" -Encoding byte

コンシューマー ファームで証明書を作成する

コンシューマー ファームでは、ルート証明書だけでなく STS 証明書もエクスポートする必要があります (図 7 参照)。STS 証明書のエクスポートには、Get-SPSecurityTokenServiceConfig コマンドレットを使用します。

この手順を簡略化するには、コンシューマー ファームのファーム ID を取得して、テキスト ファイルを作成します。このファーム ID を、エンタープライズ ファームで発行のアクセス許可があるグループに追加して、サービスにアクセスできるようにします。

図 7 STS 証明書をエクスポートする

# Add-PSSnapin Microsoft.SharePoint.Powershell -EA 0 $publisher = "TECHED-Services" $consumer = "TECHED-SP" $path = "C:\Certs" # Test and Create Path If ((test-path $path) -eq $false) { [IO.Directory]::CreateDirectory("$path") } # Run the following to export the necessary certificates on the consumer farm to c:\temp on the server: $rootCert = (Get-SPCertificateAuthority).RootCertificate $rootCert.Export("Cert") | Set-Content "C:\Certs\IntranetRootCert.cer" -Encoding byte $stsCert = (Get-SPSecurityTokenServiceConfig).LocalLoginProvider.SigningCertificate $stsCert.Export("Cert") | Set-Content "C:\Certs\IntranetSTSCert.cer" -Encoding byte #On the consumer farm, run the following command to get the id of the consumer farm: $farmID = (Get-SPFarm).Id New-Item C:\Certs\IntranetConsumerFarmID.txt -type file -force -value "$farmID" #On the consumer farm, run the following command to copy the IntranetConsumerFarmID.txt to the publisher farm Copy-Item \\$consumer\c$\Certs\IntranetConsumerFarmID.txt \\$publisher\c$\Certs

証明書を交換する

必要な証明書を両方のファームから取得したので、今度は、Copy-Item コマンドレットを使用して、EnterpriseServicesRootCert.cer をコンシューマー ファームにコピーし、IntranetRootCert.cer と IntranetSTSCert.cer をエンタープライズ ファームにコピーします。コマンドは次のとおりです。

$publisher = "TECHED-Services" $cconsumer = "TECHED-SP" # Copy to Consumer Copy-Item \\$publisher\c$\Certs\EnterpriseServicesRootCert.cer \\$cconsumer\c$\Certs Copy-Item \\$cconsumer\c$\Certs\IntranetRootCert.cer \\$publisher\c$\Certs Copy-Item \\$cconsumer\c$\Certs\IntranetSTSCert.cer \\$publisher\c$\Certs

エンタープライズ ファームに証明書をインポートする

今度はエンタープライズ ファームに 2 つのイントラネット証明書をインポートして、信頼関係を確立します。アクセス許可の設定にはファーム ID を使用する必要があります。先ほど作成したテキスト ファイルを使用すると、プロセスがシームレスに行われます。エンタープライズ ファームで図 8 のコマンドを実行して、コンシューマー ファームとの信頼関係を確立します。

図 8 コンシューマー ファームとの信頼関係を確立する

$trustCert = Get-PfxCertificate "C:\certs\IntranetRootCert.cer" New-SPTrustedRootAuthority Intranet -Certificate $trustCert $stsCert = Get-PfxCertificate "c:\certs\IntranetSTSCert.cer" New-SPTrustedServiceTokenIssuer Intranet -Certificate $stsCert $farmID = Get-Content C:\Certs\IntranetConsumerFarmID.txt $security = Get-SPTopologyServiceApplication | Get-SPServiceApplicationSecurity $claimProvider = (Get-SPClaimProvider System).ClaimProvider $principal = New-SPClaimsPrincipal -ClaimType "https://schemas.microsoft.com/sharepoint/2009/08/claims/farmid" -ClaimProvider $claimProvider -ClaimValue $farmID Grant-SPObjectSecurity -Identity $security -Principal $principal -Rights "Full Control" Get-SPTopologyServiceApplication | Set-SPServiceApplicationSecurity -ObjectSecurity $security

コンシューマー ファームに証明書をインポートする

証明書に関する最後の手順では、コンシューマー ファームで、次のスクリプトを実行して、EnterpriseServicesRootCert をインポートし、次のコマンドを実行して、エンタープライズ ファームとの信頼関係を確立する必要があります。

$trustCert = Get-PfxCertificate "C:\Certs\EnterpriseServicesRootCert.cer" New-SPTrustedRootAuthority EnterpriseServices -Certificate $trustCert

サービスを発行する

2 つのファームを作成し、エンタープライズ ファームのルート証明書をコンシューマー ファームにインポートし、コンシューマー ファームのルート証明書と STS 証明書をエンタープライズ ファームにインポートし、コンシューマー ファームのファーム ID を使用して 2 つのファーム間で信頼関係を確立しました。今度は、サーバーの全体管理を使用して、サービスを発行します。

次の手順は、サービス アプリケーションの確認です。6 つの中から共有するサービスを 1 つ選択し、サービスを強調表示して、リボンの [発行] ボタンをクリックします。サービスの提供方法を選択するダイアログ ボックスが表示されます。[接続の種類] の設定を [HTTPS] に変更し、[このサービス アプリケーションを他のファームに発行する] チェック ボックスをオンにします。発行された URL に注目してください。この URL は、さまざまな方法で利用できます。

サービスを利用する

SharePoint には、サービスを利用する複数の方法が用意されています。1 つは、リボンの [接続] ボタンをクリックする方法です。リボンの [接続] ボタンをクリックすると、 [リモート サービス アプリケーションへの接続] ダイアログ ボックスが表示されます。発行された URL をコピーして、テキスト ボックスに貼り付けます。[OK] をクリックすると、特定のサービスが表示されます。これはサービスが具体的に特定されるために生じる動作です。発行されているすべてのサービスは HTTPS アドレスを使用して参照できます。

これは証明書が適切に設定されているかどうかを確認するのに役立ちます。最後に、確立する接続の種類を指定します。これは発行者が同じ種類のサービス アプリケーションを複数共有している場合に便利です。HTTPS パスのみを使用することが重要です。最終結果としては、最初に指定した種類のサービス アプリケーションのみが表示されます。

フェデレーション サービス ソリューションをトラブルシューティングする

多くのことがフェデレーション サービスに影響を及ぼします。ネットワーク、ファイアウォール、およびインフラストラクチャを妨害するものについては考慮が必要です。サーバー ファームが異なるドメインに配置されている場合、User Profile サービス アプリケーションでは、ドメイン間で双方向の信頼関係が確立されている必要があります。

コンシューマー ファームが Business Data Connectivitiy および Secure Store のサービス アプリケーションの管理機能を使用するには、エンタープライズ ファームのドメインが、コンシューマー ファームのドメインを信頼している必要があります。ファームの境界を越える他のサービス アプリケーションは、ドメイン間に信頼関係がなくても動作します。ドメインの信頼関係に加えて、次のことも確認する必要があります。

  • ドメインの信頼関係
  • コンシューマーがトポロジ サービスに対してアクセス許可を持っていること
  • ACL
  • FQDN
  • 証明書

例として、コンシューマー ファームからいずれかのサービスにアクセスしてみます。"Web サイトによってこのページの表示を拒否されました" というエラーになります。この問題は、エンタープライズ ファームにアクセスし、コンシューマー ファームが、その特定のサービスを利用できるようにアクセス許可を設定することで解決できます。

コンシューマー ファームのアクセス許可を構成するには、構成するサービス アプリケーションを強調表示して、[アクセス許可] をクリックします。コンシューマー ファームにはファーム ID があります。コンシューマー ファームのファーム ID を記載したテキスト ファイルを作成して、エンタープライズ ファームに転送したことを覚えていますか。このファイルは、c:\certs にあります。ファーム ID をテキスト ボックスに貼り付けて、[追加] をクリックし、適切なアクセス許可のチェック ボックスをオンにします。これで、サービスをテストする準備ができました。

フェデレーション サービス ソリューションをテストする

コンシューマー ファームから、サービスを操作できる必要があります。このラボ環境では、4 つの Hyper-V イメージを使用します。そのうち 2 つはホスト用の環境で、残りの 2 つはコンシューマー用の環境です。サーバーの台数は簡単に拡張できますが、デモ環境のハードウェアの制限により、Active Directory 用に 1 台のサーバーを使用し、SQL Server と SharePoint 2010 で 1 台のサーバーを共用するのが最も簡単でした。

この記事で紹介した手順に厳密に従うことは重要ではありませんが、一貫した結果が得られることを確認することをお勧めします。ネットワーク構成は、この記事で扱う範囲外となりますが、詳細については、私のブログ記事 (英語) を参照してください。

各サーバーの設定は次のとおりです。

サーバー名: TechED-AD (IP アドレス 192.168.110.1)

ドメイン: TechED.local (フォレストの機能レベル Windows Server 2008 R2)

管理者のパスワード: pass@word1

 

サーバー名: TechED-SQL (IP アドレス 192.168.110.2)

ドメイン: TechED.local (フォレストの機能レベル Windows Server 2008 R2)

管理者のパスワード: pass@word1

 

サーバー名: TechED-Services (IP アドレス 192.168.110.11)

ドメイン: TechED.local (フォレストの機能レベル Windows Server 2008 R2)

管理者のパスワード: pass@word1

 

サーバー名: TechED-SP (IP アドレス 192.168.110.12)

ドメイン: TechED.local (フォレストの機能レベル Windows Server 2008 R2)

管理者のパスワード: pass@word1

4 つのコンピューターを作成したら、ドメイン コントローラー (DC) に新しいドメイン フォレストを作成します。この例のドメインは、TechED.local です。サーバーを DC に昇格するには、DCPromo ユーティリティを使用します。上記の設定を使用して、ネットワーク カードに適切な IP アドレスを割り当てて、コンピューター名を適宜変更します。

DC を設定して、IP アドレスを構成したら、SQL Server と SharePoint 2010 をホストするサーバーをドメインに参加させることができます。SQL Server と SharePoint 2010 をホストする各サーバーでは、Windows PowerShell Integrated Scripting Environment (ISE) の機能を有効にします。この構成により、Windows PowerShell が管理しやすくなります。

この時点で、TechED-SQL サーバーに SQL Server 2008 R2 をインストールします (図 9 参照)。正規の .iso をホスト コンピューターにダウンロードし、[メディア]、[DVD ドライブ]、[ディスクの挿入] を使用して .iso を仮想マシンにアタッチできるようにします。

図 9 SQL Server をインストールする

# Set Exec Policy Set-ExecutionPolicy -executionPolicy Unrestricted # Add SQL Service Account to AD $domainName = $env:USERDOMAIN $LDAP = "LDAP://CN=Managed Service Accounts,DC=$domainName, DC=local" $objCN = [ADSI]$LDAP $objUser = $objCN.Create("user","CN=SQL Service") $objUser.Put("sAMAccountName","sqlService") $objUser.Setinfo() $objUser.psbase.invokeset("AccountDisabled", "False") $objUser.SetPassword("pass@word1") $objUser.setinfo() # Install SQL Server with the following settings # Disable Firewall # # SQL Server Feature Installation # Check … # Database Engine Services, SQL Server Replication, Full-Text Search # Business Intelligence Development Studio # Management Tools - Complete # Microsoft Sync Framework # ----------------------------- # Default Instance # Use account above for all services # Select Windows Authentication Mode and click Add Current User # Complete Wizard

TechED-SQL に Windows Server 2008 R2 をインストールしたら、SharePoint の前提条件とバイナリのみをインストールします。ウィザードは実行しないでください。また、何か処理を行う前に、4 台の仮想マシンのスナップショットを作成することをお勧めします。後で後悔するよりも事前の対策が大切です。

Shannon Bray

Shannon Bray は、SharePoint エバンジェリストで、マイクロソフトの認定を受けたトレーナーです。現在、Planet Technologies でテクニカル アーキテクトとして働いており、Microsoft SharePoint を専門としています。また、マイクロソフト テクノロジを使用したアーキテクチャのデザインとソリューションの開発を得意としています。Colorado SharePoint User Group を取りまとめており、Microsoft TechReady と Tech·Ed では SharePoint のトピックについて講演を行いました。いくつかの SharePoint のビデオ トレーニング シリーズを作成しており、最近では『Automating Microsoft SharePoint 2010 Administration with Windows PowerShell 2.0』(Wiley、2011 年) を共同で執筆しました。

関連コンテンツ