Microsoft SharePoint 2010: 팜 간 서비스 구성

팜 경계를 넘어 통신하고 다른 서버 팜의 서비스를 공유 및 사용하도록 SharePoint를 구성할 수 있습니다.

Shannon Bray

Microsoft는 SharePoint가 서비스를 제공 및 소비하는 방법을 많은 부분 개선했습니다. SharePoint 2007에서는 SSP(공유 서비스 공급자)라는 기능을 통해 서비스를 이용할 수 있었습니다. SharePoint 2003과 비교하면 SSP는 큰 발전이었지만 몇 가지 과제가 남아 있었습니다.

SharePoint 2007의 아키텍처에는 전체를 사용하거나 아무 것도 사용하지 않는 방식의 구성이라는 문제가 있습니다. 웹 응용 프로그램이 특정 SSP와 연계되므로 선택적으로 서비스를 사용할 수 없었습니다. 예를 들어 SSP에 검색 및 Excel 서비스가 구성된 경우 엔터프라이즈 검색 서비스를 사용하는 모든 SharePoint 웹 응용 프로그램은 Excel 서비스도 액세스해야 했습니다.

SSP 아키텍처를 확장할 수도 없었습니다. 동일한 SSP 인프라를 사용해서 자체 서비스를 만드는 것도 불가능했습니다. 마지막으로 가장 중요한 문제는 SharePoint 2007에서는 팜 간 서비스를 구성하기가 어려웠다는 것입니다. SharePoint 2010의 새로운 서비스 아키텍처에서는 이러한 모든 문제가 해결되었습니다.

서비스 응용 프로그램 아키텍처 이해

서비스가 SharePoint 팜 경계를 넘어 통신할 수 있도록 구성하는 방법을 알아보기 전에 이를 가능하게 하는 구성 요소 및 서비스에 대해 이해할 필요가 있습니다. 서비스 응용 프로그램 아키텍처에는 다음과 같은 몇 가지 핵심적인 특성이 있습니다.

  • 서비스를 “주문식”으로 사용할 수 있음
  • 서비스 아키텍처를 확장할 수 있음
  • 서비스가 SharePoint Foundation에서 지원됨
  • 서비스를 병렬로 확장할 수 있음
  • 서비스에 탄력성/중복성이 생김
  • 서비스 페더레이션이 가능

SharePoint 2007의 서비스와는 달리 자신의 서비스를 어떤 SharePoint 웹 응용 프로그램이 소비할지 결정할 수 있습니다. 더 이상 SSP에 얽매이지 않고 원하는 아키텍처를 적절하게 선택할 수 있습니다.

서비스 응용 프로그램 아키텍처는 이제 확장이 가능하므로 자신의 서비스를 구축할 수 있습니다. 사이트 모음 간은 물론이고 SharePoint 웹 응용 프로그램 간에서도 작동이 가능한 사용자 지정 솔루션을 배포할 수 있으므로 엄청난 시간, 비용 및 리소스를 절약할 수 있습니다.

SharePoint 2010에서는 기본적으로 SharePoint Foundation에 서비스를 제공하지 않지만 이를 지원하기 위한 인프라가 있습니다. 또한 자신의 서비스를 구축하고 이를 SharePoint Foundation에서 사용할 수 있습니다. 새 서비스 응용 프로그램 아키텍처에서는 부하를 여러 서버로 분산하여 적절하게 처리하도록 설계할 수 있습니다.

엔터프라이즈 검색은 가장 많이 수정된 서비스 중 하나입니다. SharePoint 2007에서는 인덱스 서버가 단일 오류 지점이었습니다. SharePoint 2010에서는 검색 크롤링 서비스를 여러 서버에 걸쳐 운영할 수 있습니다. 하나에서 오류가 발생하더라도 중복성이 있으므로 시스템이 예상대로 작동합니다.

또한 팜 경계에 걸쳐 서비스를 공유할 수 있습니다. 이를 통해 서비스를 여러 소비자에게 제공하면서도 공유하려는 서비스를 단일 팜으로 통합할 수 있습니다.

주요 개념 이해

“서비스 응용 프로그램”이라는 용어가 남용되었습니다. 이 때문에 구성 요소의 위치와 작동 방법을 이해하기 어려웠습니다. 내부에서 일어나는 일을 정확하게 이해하려면 이러한 용어를 파악하는 것이 중요합니다.

서비스: 팜의 서버로 배포되는 응용 프로그램 이진 파일.

서비스 컴퓨터 인스턴스: 서버에서 실행 중인 서비스의 실제 인스턴스.

서비스 응용 프로그램: 서비스 응용 프로그램 정보 및 데이터베이스 연결 문자열과 같은 서비스 구성 및 관리를 포함하는 논리적 구성 요소.

서비스 응용 프로그램 프록시: 연결할 서버 및 실제 서비스 사용 방법을 소비자가 알 수 있도록 서비스 소비자가 서비스 및 부하 분산 장치와 통신하는 데 사용되는 인터페이스. 서비스 응용 프로그램 프록시는 웹 서비스 또는 WCF(Windows Communication Foundation) 프록시가 아니라는 것이 중요합니다.

서비스 소비자: 서비스를 사용하는 응용 프로그램 또는 서비스.

서비스 프록시 그룹: 특정 웹 응용 프로그램과 연결된 서비스 응용 프로그램 그룹.

구성 마법사, 중앙 관리 또는 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 팜을 구성할 때는 서비스 두 개가 자동으로 생성됩니다. 이러한 항목은 서비스가 작동하기 위한 핵심 구성 요소입니다. 이러한 서비스에는 다음이 포함됩니다.

  • 응용 프로그램 검색 및 부하 분산 장치 서비스 응용 프로그램
  • STS(보안 토큰 서비스) 응용 프로그램

서비스 응용 프로그램은 모든 통신을 HTTPS를 통해 수행하므로 웹 끝점을 공개해야 합니다. 서비스 응용 프로그램은 TCP 포트 32843 및 32844를 통해 통신한다는 것도 알아 두십시오. 사용자 지정 서비스 응용 프로그램은 일반적으로 포트 32845를 사용합니다.

서비스 페더레이션 작동 방법 이해

지금까지 서비스가 페더레이션되는 방법을 자세히 알아보았으므로 다음은 페더레이션을 지원하는 항목에 대해 알아보겠습니다.

  • 검색
  • 사용자 프로필
  • 관리되는 메타데이터
  • BCS(Business Connectivity Services)
  • 보안 저장소
  • Web Analytics

WAN을 통한 사용이 지원되는 다른 여러 서비스가 있으며, 검색, 관리되는 메타데이터, Business Data Connectivity, 사용자 프로필 및 보안 저장소가 이에 포함됩니다. 그러나 지원 여부와는 별도로 검색 및 관리되는 메타데이터만 사용이 권장됩니다.

WAN 환경에서 검색은 크롤링 중 지연 시간이 증가합니다. BCS에서는 데이터가 캐시되기 전까지 첫 번째 적중이 느려집니다. 사용자 프로필 서비스의 경우 사용자 프로필 복제 엔진이 있으므로 WAN을 통해 사용하지 않는 것이 좋습니다. 응용 프로그램이 보안 저장소를 사용하면 지연 시간이 발생합니다.

팜 예

이 예에서는 각각 엔터프라이즈 서비스와 콘텐츠 웹 응용 프로그램을 호스트하는 팜 두 개를 만들겠습니다. 팜 두 개를 처음부터 만들 것이며, 모든 환경에서 서비스를 페더레이션할 수 있도록 각 단계를 간략하게 설명하겠습니다.

두 팜은 동일한 도메인에 위치하지만 도메인에 걸쳐 구축하는 것도 수월합니다. 이러한 예에서는 동일한 도메인을 사용하므로 TechED-AD, TechED-SQL, TechEd-Services 및 TechEd-SP의 네 서버로 데모를 구축할 수 있습니다.

먼저 Active Directory에 적절한 계정을 만듭니다. 필요한 계정은 spFarm, spServices, spContent, spCrawl, spUPS 및 spC2WTS입니다. 과정을 빠르게 하기 위해 SharePoint 팜 중 하나에서 Windows PowerShell을 사용하여 계정을 추가할 수 있습니다(자세한 내용은 그림 1 참조). 이러한 계정은 관리되는 서비스 계정 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()

이제 계정을 설정했으므로 다음은 엔터프라이즈 환경에 초점을 맞추겠습니다. 이 예에서는 페더레이션을 지원하며 신속하게 프로비전할 수 있는 서비스(관리되는 메타데이터, BCS 및 보안 저장소)만 포함하도록 팜을 구성할 것입니다. 엔터프라이즈 서비스 환경을 만드는 주요 작업에는 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!"

소비 환경 프로비전

게시 팜을 위한 주요 작업은 모두 완료되었고 이제 엔터프라이즈 서비스를 사용할 팜에 초점을 맞추겠습니다. 여기에서는 어떤 서비스라도 만들 수 있습니다. 가장 중요한 것은 다른 팜의 서비스를 사용할 수 있고 해당 팜에서 이러한 리소스를 제공한다는 사실입니다.

또한 그림 5에 나오는 것처럼 소비자 팜에서 엔터프라이즈 서비스의 예를 보여 줄 수 있는 SharePoint 콘텐츠 웹 응용 프로그램을 프로비전하게 됩니다.

그림 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 cmdlet을 사용하여 팜을 위한 인증서를 내보냅니다.

그림 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 cmdlet을 사용하여 내보냅니다.

이 과정을 수월하게 하기 위해 소비자 팜의 팜 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 cmdlet을 사용하여 EnterpriseServicesRootCert.cer을 소비자 팜으로 복사하고, IntranetRootCert 및 IntranetSTSCert 인증서를 엔터프라이즈 팜으로 복사합니다.

$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

게시자 인증서 가져오기

다음은 엔터프라이즈 팜에서 두 인트라넷 인증서를 가져오고 신뢰를 설정해야 합니다. 팜 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

서비스 게시

지금까지 팜 두 개를 만들고, 루트 인증서를 엔터프라이즈 팜에서 소비자 팜으로 가져왔으며, 루트 및 STS 인증서를 소비자 팜에서 엔터프라이즈 팜으로 가져왔고, 소비자 팜 ID를 사용하여 두 팜 간의 신뢰를 설정했습니다. 다음은 중앙 관리에 대해 살펴보고 서비스를 게시하겠습니다.

다음 단계는 서비스 응용 프로그램을 검토하는 것입니다. 공유하려는 6개 서비스 중 하나를 찾고 선택한 다음 리본에서 게시 단추를 클릭합니다. 서비스를 제공하는 방법을 선택할 수 있는 대화 상자가 표시됩니다. 연결 형식을 HTTPS로 변경하고 다른 팜에 이 서비스 응용 프로그램 게시를 선택합니다. 게시자 URL을 기록해 두십시오. 이 URL은 몇 가지 방법으로 사용됩니다.

서비스 사용

SharePoint는 소비자 서비스에 대한 두 가지 다른 경로를 제공합니다. 먼저 리본에서 연결 단추를 선택합니다. 리본에서 연결 단추를 클릭하면 원격 서비스 응용 프로그램에 연결 대화 상자가 표시됩니다. 이전 섹션에 나온 전체 URL을 이 입력란에 붙여 넣습니다. 확인을 클릭하면 세부 서비스를 볼 수 있습니다. 이것은 서비스가 구체적으로 식별되기 때문입니다. HTTPS 주소를 사용하여 게시된 모든 서비스를 볼 수도 있습니다.

이를 통해 인증서가 올바르게 설정되었는지 확인할 수 있습니다. 마지막으로 설정하려는 연결 형식을 지정합니다. 이것은 게시자가 동일한 유형의 여러 서비스 응용 프로그램을 공유하는 경우 유용합니다. 중요한 것은 HTTPS 경로만 사용한다는 것입니다. 결과적으로 원래 지정한 유형의 서비스 응용 프로그램만 보게 됩니다.

페더레이션된 서비스 솔루션의 문제 해결

페더레이션된 서비스에 영향을 미치는 다양한 요인이 있습니다. 그 중에서도 네트워킹, 방화벽 및 인프라 장애가 몇 가지 고려할 요인입니다. 서버 팜이 다른 도메인에 있는 경우 사용자 프로필 서비스 응용 프로그램이 제대로 작동하려면 두 도메인이 서로 신뢰해야 합니다.

Business Data Connectivity 및 보안 저장소 서비스 응용 프로그램 관리 기능이 소비 팜에서 작동하려면 게시 팜의 도메인이 소비 팜의 도메인을 신뢰해야 합니다. 다른 팜 간 서비스 응용 프로그램은 도메인 간 신뢰 요구 사항에 관계없이 작동합니다. 도메인 신뢰를 확인하는 것 외에도 다음 사항을 확인해야 합니다.

  • 도메인 신뢰 확인
  • 소비자가 토폴로지 서비스에 대한 권한을 보유하는지 확인
  • ACL 확인
  • FQDN
  • 인증서

추가적인 확인을 위해 소비자 팜에서 서비스 중 하나에 액세스하려고 시도하면 “The Web site declined to show this Web page(웹 사이트가 이 웹 사이트 표시를 거부했습니다).”라는 오류가 발생하는 것을 알 수 있습니다. 엔터프라이즈 팜을 방문하고 소비자 팜이 해당 특정 서비스를 사용하도록 허용하면 문제가 해결됩니다.

소비자 팜 권한을 구성하려면 구성하려는 서비스 응용 프로그램을 선택하고 권한을 클릭합니다. 소비자 팜의 팜 ID를 얻을 수 있습니다. 앞서 소비자 팜 ID가 있는 텍스트 파일을 만들었고 이를 게시 팜으로 전송했습니다. c:\certs에서 이 파일을 찾습니다. 팜 ID를 입력란에 붙여 넣고 추가를 클릭합니다. 그리고 적절한 권한을 선택합니다. 이제 서비스를 테스트할 준비가 완료되었습니다.

페더레이션된 서비스 솔루션 테스트

소비자 팜에서 서비스와 상호 작용할 수 있을 것입니다. 이 실습 환경에는 Hyper-V 이미지 4개를 사용하는데, 두 개는 호스팅 환경에 사용하고 다른 두 개는 소비 환경에 사용합니다. 손쉽게 서버 수를 늘릴 수 있지만 데모 환경의 하드웨어 제약 때문에 Active Directory용 서버 하나를 사용하고 다른 서버에서 SQL Server 및 SharePoint 2010 역할을 공유하는 것이 가장 수월합니다.

이 단계를 반드시 정확하게 따라야 하는 것은 아니지만 일관적인 결과를 위해 권장됩니다. 네트워크 구성은 이 문서의 범위를 벗어나지만 필자의 블로그에 관련 내용이 있습니다.

각 서버가 다음 설정으로 구성되었습니다.

서버 이름: 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-Serives 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

네 컴퓨터를 구축한 후에는 DC(도메인 컨트롤러)에 새 도메인 포리스트를 만듭니다. 이 예에서 도메인은 TechED.local입니다. 서버를 DC로 승격하는 데는 DCPromo 유틸리티를 사용합니다. 앞서 제시한 설정에 따라 적절한 IP 주소를 네트워크 카드에 할당하고 컴퓨터 이름을 적절하게 변경합니다.

DC를 설정하고 해당 IP 주소를 구성한 후에는 SQL Server 및 SharePoint 2010을 호스팅할 서버를 참가시킬 수 있습니다. SQL Server 및 SharePoint를 호스팅하는 각 서버에서 Windows PowerShell ISE(통합 스크립팅 환경) 기능을 활성화합니다. 이렇게 하면 Windows PowerShell을 훨씬 수월하게 관리할 수 있습니다.

이제 TechED-SQL 서버에 SQL Server 2008 R2를 설치합니다(그림 9 참조). 미디어 | 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을 설치한 후에는 SharePoint 필수 구성 요소 및 이진 파일만 설치합니다. 마법사는 실행하지 않습니다. 그리고 다른 작업을 수행하기 전에 네 컴퓨터의 스냅샷을 만들어 두십시오. 나중에 후회하는 것보다는 미리 조심하는 것이 낫습니다.

Shannon Bray

Shannon Bray는 SharePoint 전도사이자 Microsoft 공인 강사입니다. 현재는 Planet Technologies에서 기술 설계자로 일하면서 Microsoft SharePoint 관련 업무를 전담하고 있습니다. Bray의 전문 분야는 Microsoft 기술을 사용한 아키텍처 설계 및 솔루션 개발입니다. 현재 콜로라도 SharePoint 사용자 그룹의 대표를 맡고 있으며 Microsoft TechReady 및 Tech·Ed에서 SharePoint 관련 주제를 발표하기도 했습니다. 다수의 SharePoint 비디오 학습 시리즈를 제작하기도 했으며 현재는 “Automating Microsoft SharePoint 2010 Administration with Windows PowerShell 2.0”(Wiley, 2011)을 공동 집필하고 있습니다.

관련 콘텐츠