SharePoint Server 2013의 다중 테넌시 이해
적용 대상:2013
2016
2019
Subscription Edition
SharePoint in Microsoft 365
이 문서에서는 SharePoint Server 2013의 다중 테넌트와 관련된 구성 요소 및 서비스에 대해 설명하고, 서비스 공급자가 다중 테넌트 SharePoint Server 2013 호스팅 플랫폼을 계획, 디자인, 빌드 및 관리하기 위해 SharePoint Server 2013에서 다중 테넌트를 이해하는 데 도움이 되는 아키텍처, 보안, 운영 및 관리 지침을 제공합니다.
참고
Viva Engage 통합이 있는 Microsoft OneDrive는 온-프레미스 배포를 위한 다중 테넌트 또는 분할된 서비스 애플리케이션에서 작동하지 않습니다.
시작하기 전에
SharePoint Server 2013의 다중 테넌시 소개
다중 테넌시란?
SharePoint Server 2013에서 다중 테넌트 기능을 도입하기 전에 다중 테넌트 및 관련 특성의 일반적인 개념을 이해해야 합니다. 다중 테넌트 및 관련 특성을 이해하면 다중 테넌트 SharePoint Server 2013 호스팅 플랫폼을 계획, 디자인, 운영 및 관리하기 위한 적절한 결정을 내리는 데 도움이 됩니다.
다중 테넌트는 여러 테넌트 수용을 위해 사이트 및 공유 서비스 또는 소프트웨어의 데이터를 관리하고 분할하는 기능을 의미합니다. 이 기능은 서비스의 여러 인스턴스를 실행하거나 별도의 하드웨어를 설정하는 것과는 대조적입니다. Microsoft 제품 및 기술에서 서비스의 다중 테넌시는 호스팅 환경을 만들고 서버 팜 리소스가 극대화됩니다. 호스팅 환경에 대해 알아보기 전에 서비스 아키텍처를 이해하는 것이 중요합니다.
SharePoint Server 2013의 다중 테넌시 사용을 위한 핵심 구성 요소 및 서비스
이 섹션에서는 SharePoint Server 2013의 다중 테넌시 사용을 위한 핵심 구성 요소와 서비스에 대해 설명합니다.
웹 응용 프로그램
SharePoint 2013 웹 응용 프로그램은 만들어진 사이트 모음에 대한 논리적인 관리 및 보안 단위로 작동하는 IIS(인터넷 정보 서비스) 웹 사이트로 구성됩니다. 각 웹 응용 프로그램은 고유하거나 공유되는 응용 프로그램 풀을 사용하는 여러 다른 IIS 웹 사이트로 표현됩니다. 웹 응용 프로그램을 만들 때 콘텐츠 데이터베이스를 만들고 데이터베이스에 연결하는 데 사용되는 인증 방법도 정의하게 됩니다.
호스트 이름이 지정된 사이트 모음
호스트 이름이 지정된 사이트 모음을 사용하면 사이트 모음에 고유한 DNS 이름을 할당할 수 있습니다. 예를 들어 http://TeamA.contoso.com
및 http://TeamB.fabrikam.com
으로 주소를 지정할 수 있습니다. 이 프로비저닝을 사용하면 동일한 웹 애플리케이션에서 고유한 DNS 이름을 사용하는 많은 사이트를 배포할 수 있습니다. 또한 서비스 공급자가 환경을 많은 고객으로 확장할 수 있습니다. 호스트 이름 사이트 모음을 사용하지 않는 경우 SharePoint 웹 애플리케이션에는 동일한 호스트 이름(DNS 이름)을 공유하는 많은 경로 기반 사이트 모음이 포함됩니다. 예를 들어 팀 A는 https://contoso.com/sites/teamA
에 사이트 모음이 있고, 팀 B는 https://fabrikam.com/sites/teamB
에 사이트 모음이 있습니다.
호스트 이름이 지정된 사이트 모음은 기본적으로 다중 테넌시 환경에 맞게 확장하는 유일한 방법이며, 사용되는 URL 네임스페이스 측면에서 궁극적으로 유연성을 제공합니다. 다중 테넌트에서 경로 기반 사이트를 사용하는 경우 관리 경로에 대한 소프트웨어 경계에 빠르게 도달합니다.
SharePoint Server 2013의 호스트 이름 사이트 모음을 계획하는 방법에 대한 자세한 내용은 호스트 이름 사이트 모음 아키텍처 및 배포(SharePoint 2013)를 참조하세요.
서비스 그룹(프록시 그룹)
프록시 그룹이라고도 하는 서비스 그룹은 웹 애플리케이션에서 사용할 수 있도록 선택된 서비스 애플리케이션 그룹입니다.
기본적으로 서비스 애플리케이션을 만들 때 다른 그룹을 지정하지 않는 한 모든 서비스 애플리케이션이 기본 그룹에 포함됩니다. 서비스 응용 프로그램은 언제든지 기본 그룹에 추가하거나 이 그룹에서 제거할 수 있습니다. 웹 애플리케이션을 만들 때 기본 그룹을 선택하거나 사용자 지정 서비스 그룹을 만들 수 있습니다. 웹 애플리케이션에서 사용할 서비스 애플리케이션만 선택하여 사용자 지정 서비스 그룹을 만듭니다.
사용자 지정 그룹은 여러 웹 애플리케이션에서 재사용할 수 없습니다. 웹 애플리케이션을 만들 때 "사용자 지정"을 선택할 때마다 만드는 웹 애플리케이션에 대해서만 서비스를 선택합니다.
서비스 프록시
서비스 응용 프로그램을 만들 때 서비스 응용 프로그램용 프록시가 동시에 만들어집니다. 프록시는 웹 응용 프로그램을 서비스 응용 프로그램에 연결하는 가상 엔터티입니다. 프록시는 SharePoint 중앙 관리 웹 사이트의 서비스 응용 프로그램 관리 페이지에 표시됩니다.
중앙 관리 또는 SharePoint 2016 제품 구성 마법사를 사용하여 서비스 응용 프로그램을 만들 경우 프록시가 자동으로 만들어집니다. Microsoft PowerShell을 사용하여 서비스 애플리케이션을 만드는 경우 프록시가 항상 자동으로 만들어지는 것은 아니며 Microsoft PowerShell을 사용하여 만들어야 합니다.
일부 프록시에는 변경할 수 있는 설정이 포함되어 있을 수 있습니다. 예를 들어 웹 응용 프로그램이 Managed Metadata Service의 여러 인스턴스에 연결되어 있으면 회사 분류를 호스팅하는 기본 서비스 응용 프로그램에 연결된 프록시를 지정해야 합니다. 이러한 설정은 다중 테넌트 사용 시 테넌트 수준 구성으로 이동합니다.
서비스 응용 프로그램
서비스 애플리케이션은 지정된 서비스와 운영 동작을 정의하는 보안 및 관리 구성의 논리적 표현입니다. 예로는 Managed Metadata 및 User Profiles Service가 있습니다. 다양한 서비스 애플리케이션은 다양한 방식으로 구현되며 이러한 유연성은 다중 테넌트 솔루션의 디자인에 영향을 줍니다.
SharePoint Server 2013에서 사용할 수 있는 서비스 응용 프로그램 목록과 SharePoint 버전 간에 다중 테넌시 기능 가용성을 확인하려면 SharePoint Server 2013의 호스팅 서비스 공급자를 위한 일반 지침에서 서비스 및 기능 섹션을 참조하세요.
기능 팩 및 라이선스
SharePoint의 기능 팩은 사이트 범위 또는 웹 범위 기능 집합을 함께 그룹화하는 방법입니다. SharePoint 기능이 그룹화되면 사이트 구독(즉, 테넌트)과 연결할 수 있습니다. 해당 사이트 구독(테넌트)의 모든 사이트 모음은 기능 팩에 속하는 사이트 범위 또는 웹 범위 기능만 사용할 수 있습니다. 이 기능을 통해 서비스 공급자는 여러 다른 기능 집합을 토대로 계층화된 서비스를 제공할 수 있습니다.
SharePoint Server 2013에서는 사용자 기준으로 다른 SharePoint 라이선스를 할당하기 위한 새로운 기능이 추가되었습니다. 이러한 새 기능은 런타임에 SharePoint 라이선스 확인을 설정합니다. 이 기능은 간소화된 배포 모델 전반에 걸쳐 서비스 공급자가 다양한 서비스 제품을 빌드할 수 있는 유연성을 제공합니다. 이전 SharePoint 버전에서 서비스 공급자는 SharePoint 버전마다 다른 SharePoint 배포 모델을 구축해야 했습니다. SharePoint 기능에 대한 자세한 내용은 SharePoint 서비스 설명 문서의 온-프레미스 솔루션에서 SharePoint 기능 가용성 섹션을 참조하세요.
정보 권한 관리
SharePoint Server 2013의 정보 권한 관리 통합을 통해 다중 테넌시에 대한 지원이 추가되므로 테넌트 수준 정보 권한 관리 설정을 관리할 수 있습니다.
아키텍처 디자인 고려 사항
이 섹션에서는 다중 테넌시 SharePoint Server 2013 환경을 설계할 때의 다양한 고려 사항에 대해 설명합니다. 이 문서 앞부분에 설명된 것처럼 다중 테넌시의 경우 SharePoint Server 2013 환경을 설계하고 디자인할 때 독특한 특성을 고려해야 합니다. 요구 사항에 따라 이러한 요소를 적절히 고려하여 올바른 의사 결정을 내려야 합니다.
SharePoint Server 2013의 경계 및 제한 이해
SharePoint Server 2013의 소프트웨어 경계와 제한을 이해하면 다중 테넌시 SharePoint 환경을 위한 적절한 아키텍처를 선택하기 위한 올바른 결정을 내리는 데 도움이 됩니다. SharePoint Server 2013의 다중 테넌트 환경에 적용되는 콘텐츠 데이터베이스 및 사이트 모음의 주요 경계 및 제한에 대한 자세한 내용은 SharePoint Server 2016의 소프트웨어 경계 및 제한 및 SharePoint Server 2016의 소프트웨어 경계 및 제한을 참조하세요.
공유 팜 및 전용 팜
공유 팜을 사용하여 단일 웹 애플리케이션에서 다중 테넌트 사이트 모음을 호스트하면 테넌트당 전용 웹 애플리케이션을 사용하는 데 비해 확장성이 향상됩니다.
격리 요구를 충족해야 하는 경우에만 고객마다 전용 웹 응용 프로그램과 응용 프로그램 풀을 사용하도록 합니다.
사이트에 완전 신뢰 코드를 배포할 수 없습니다.
web.config 파일과 같은 공유 리소스에 영향을 주는 사용자 지정을 허용하지 않습니다.
호스트 이름이 지정된 사이트 모음을 사용하여 웹 응용 프로그램 전체에서 여러 개의 루트 수준 사이트 모음(도메인 이름이 지정된 사이트)을 만듭니다.
단일 웹 응용 프로그램 및 여러 웹 응용 프로그램
web.config 파일과 같이 단일 웹 응용 프로그램에서 공유되는 리소스에 영향을 미치는 사용자 지정이 필요한 테넌트에는 전용 웹 응용 프로그램을 사용합니다.
여러 테넌트를 단일 팜에 조합할 때는 인증된 모든 콘텐츠에 대해 전용 SharePoint 웹 응용 프로그램을 사용하고, 모든 익명 콘텐츠에 대해 별도의 전용 웹 응용 프로그램을 사용합니다. 이 메서드에는 두 가지 유형의 콘텐츠가 있는 테넌트용 두 개의 별도 구독 ID가 필요합니다. 또한 이 방법을 사용하면 라이선스가 간소화됩니다.
일부 SharePoint 기능은 셀프 서비스 사이트 모음 만들기 설정과 같은 웹 응용 프로그램 수준에 바인딩되어 있습니다. 이 기능을 설정하면 같은 웹 응용 프로그램 아래에 있는 모든 테넌트가 사이트 모음을 만들 수 있게 됩니다.
단일 팜 환경 디자인
테넌트 데이터와 관리가 격리된 다중 organization 호스팅 환경에서는 분할된 서비스 및 공유 서비스의 구성이 중요합니다. 이 예제에서는 분할된 서비스의 실질적 구현과 고객 사이트 배포 방법에 대한 권장 지침을 제공합니다.
이 예제에서는 고객 사이트가 팜에 배포될 수 있는 다음과 같은 방법을 자세히 보여줍니다.
전용 응용 프로그램 풀 및 웹 응용 프로그램
공유 응용 프로그램 풀 및 전용 웹 응용 프로그램
공유 웹 응용 프로그램
인증된 사이트
인증되지 않은 사이트
격리 요구를 충족해야 하는 경우에만 고객마다 전용 응용 프로그램 풀을 사용하도록 합니다. web.config 파일과 같이 단일 웹 응용 프로그램에서 공유되는 리소스에 영향을 미치는 사용자 지정이 필요한 테넌트에는 전용 웹 응용 프로그램을 사용합니다.
여러 테넌트를 단일 웹 응용 프로그램에 조합할 때는 인증된 모든 콘텐츠에 대해 전용 웹 응용 프로그램을 사용하고, 모든 익명 콘텐츠에 대해 별도의 전용 웹 응용 프로그램을 사용합니다. 이 메서드에는 두 가지 유형의 콘텐츠가 있는 테넌트용 두 개의 별도 구독 ID가 필요합니다. 또한 이 방법을 사용하면 라이선스가 간소화됩니다.
사이트에 완전 신뢰 코드를 배포할 수 없습니다.
web.config 파일과 같은 공유 리소스에 영향을 주는 사용자 지정을 허용하지 않습니다.
다음 예제(인증된 사이트)에서는 회사마다 다른 호스트 이름이 지정된 사이트 모음이 사용됩니다. 회사 C에는 호스트 이름이 지정된 두 개의 다른 사이트 모음이 포함됩니다. 호스트 이름이 지정된 각 최상위 사이트 모음 아래에서는 관리 경로를 사용하여 팀 사이트, 내 사이트, 게시된 인트라넷 콘텐츠 또는 별도의 부서 사이트와 같은 사이트에 대한 두 번째 최상위 사이트 모음 계층을 만듭니다.
계층화된 환경 디자인
앞에서 설명한 대로 다중 테넌트 SharePoint Server 2013 호스팅 플랫폼을 계획할 때 고려해야 할 많은 사항이 있습니다. 이러한 요소 중에는 비용, 간소화된 관리, 리소스 격리, 성능 및 확장성이 있습니다.
고객 기반이 증가할수록 단일 환경에서 모든 고객의 모든 요구 사항을 충족하는 것이 어렵다는 것을 알 수 있습니다. 이러한 가운데, 해당 요인들의 균형점을 찾아나가면서 상쇄되는 요인들도 확인해야 합니다.
이와 같은 경우에 고려할 수 있는 한 가지 대안은 여러 SharePoint 환경이 고객의 다양한 요구를 충족하는 계층화된 환경 디자인입니다. 각 환경은 저비용, 고밀도, 더 높은 리소스 격리 및 더 높은 비용으로 더 나은 QoS(서비스 품질) 보장 등의 다양한 서비스 측면에 주안점을 둡니다.
이러한 계층화된 환경 디자인 접근 방법은 고객들에게 다양한 서비스 수준 계약을 제공할 수 있습니다. 따라서 보다 광범위한 고객에게 서비스하고, 관리 및 운영을 간소화하고, 관리 비용을 절감하고, 수익률을 높일 수 있습니다.
보안 고려 사항
이 섹션에서는 다중 테넌트 SharePoint Server 2013 호스팅 플랫폼을 계획하고 디자인하기 위한 다양한 보안 고려 사항에 대해 설명합니다. 이 시점부터 사용자 선택기 구성에 대해 이야기하는 OU(조직 구성) 섹션과 같은 모든 섹션은 Windows 인증 추가 사용자 지정 없이만 작동합니다.
SharePoint Server 2013에서는 다음 인증 유형에 대한 다양한 인증 방법과 인증 공급자를 지원합니다.
Windows 인증
양식 기반 인증
SAML 토큰 기반 인증
Windows 인증 유형은 Windows 도메인 환경이 연결 클라이언트의 자격 증명이 유효한지 확인하는 데 사용하는 기존 Windows 인증 공급자와 인증 프로토콜을 활용합니다. 클레임 기반 인증 및 클래식 모드 모두에서 사용되는 Windows 인증 메서드는 다음과 같습니다.
NTLM
Kerberos
다이제스트
기본
양식 기반 인증은 ASP.NET 멤버 자격 및 역할 공급자 인증을 기반으로 하는 클레임 기반 ID 관리 시스템입니다. Forms 기반 인증은 다음과 같이 인증 공급자에 저장된 자격 증명에 대해 사용할 수 있습니다.
AD DS(Active Directory 도메인 서비스)
SQL Server 데이터베이스와 같은 데이터베이스
Novell eDirectory, NDS(Novell Directory Services) 또는 Sun ONE과 같은 LDAP(Lightweight Directory Access Protocol) 데이터 저장소
Forms 기반 인증은 사용자가 로그인 양식(일반적으로 웹 페이지)을 입력하는 자격 증명을 기반으로 사용자의 유효성을 검사합니다. 인증되지 않은 요청은 사용자가 유효한 자격 증명을 제공하고 양식을 제출해야 하는 로그인 페이지로 리디렉션됩니다. 시스템에서는 인증된 요청에 대해 후속 요청용으로 ID를 다시 설정하기 위한 키가 포함된 쿠키를 발급합니다.
양식 기반 인증을 사용하여 Windows 또는 외부를 기반으로 하지 않는 ID 관리 시스템에 대해 사용자를 인증하려면 여러 web.config 파일에 멤버 자격 공급자 및 역할 관리자를 등록해야 합니다. SharePoint Server 2013에서는 표준 ASP.NET 역할 관리자 인터페이스를 사용하여 현재 사용자에 대한 그룹 정보를 수집합니다. 각 ASP.NET 역할은 SharePoint Server 2013의 권한 부여 프로세스에서 도메인 그룹으로 간주됩니다. 인증을 위해 멤버 자격 공급자를 등록하는 것과 정확히 같은 방법으로 일부 web.config 파일에 역할 관리자를 등록합니다.
중앙 관리 웹 사이트에서 멤버 자격 사용자 또는 역할을 관리하려면 중앙 관리 웹 사이트의 web.config 파일에 멤버 자격 공급자 및 역할 관리자를 등록해야 합니다. 또한 콘텐츠를 호스트하는 웹 애플리케이션의 web.config 파일과 보안 토큰 서비스의 web.config 파일에 멤버 자격 공급자 및 역할 관리자를 등록해야 합니다.
SharePoint Server 2013의 SAML 토큰 기반 인증은 SAML 1.1 프로토콜 및 WS-F PRP(WS-Federation Passive Requestor Profile)를 사용합니다. 사용자 고유의 내부 환경이든 파트너 환경이든 클레임 기반 환경의 관리자와 조정해야 합니다. ADFS(Active Directory Federation Services) 2.0을 사용하는 경우에는 SSAML 토큰 기반 인증 환경이 제공됩니다.
클레임 기반 인증을 사용하는 웹 응용 프로그램의 경우 사용자 선택은 SharePoint Server 2013 내에서 사용할 수 있는 컨트롤입니다. 사용자 선택 컨트롤은 클레임 공급자를 사용하여 사용자, 그룹 및 클레임의 "친숙한" 표시를 나열, 확인, 검색 및 결정합니다. 사용자 선택 구성에 대한 자세한 내용은 사람 선택기 및 클레임 공급자 개요를 참조하세요.
영역은 웹 응용 프로그램의 동일한 사이트에 액세스하기 위한 각기 다른 논리적 경로를 나타냅니다. 각 웹 응용 프로그램에는 영역을 5개까지 포함할 수 있습니다. 웹 응용 프로그램을 만들면중앙 관리에서 기본 영역을 만듭니다. 더 많은 영역을 만들려면 웹 애플리케이션을 확장하고 나머지 영역 이름인 인트라넷, 엑스트라넷, 인터넷 또는 사용자 지정 중 하나를 선택합니다.
조직 구성 단위
OU(조직 구성 단위)는 Active Directory 환경에서 사용자 및 컴퓨터 개체를 구성합니다. 호스팅을 위해, 조직 구성 단위 구조는 다음 다이어그램과 같이 구성될 수 있습니다.
최소한 도메인 루트, 도메인 컨트롤러 OU, SharePoint Server OU 및 고객 OU에 그룹 정책 연결하려고 합니다.
Domain 루트
전체 도메인에 적용되는 보안은 도메인 정책에 적용됩니다. 이러한 설정은 전체 도메인에 적용되는 GPO(그룹 정책 개체)에 포함되어 있습니다.
Domain Controllers OU
Domain controllers는 보안 구성 자체를 제어하는 데이터인 조직에서 가장 중요한 데이터를 보유합니다. 이 수준에 적용되는 GPO는 도메인의 도메인 컨트롤러를 구성하고 보호하는 데 사용됩니다.
SharePoint Servers OU
SharePoint 서버는 디렉터리의 다른 서버에는 포함되어 있지 않은 고유한 역할을 갖습니다. 이러한 서버를 자체 OU에 추가하면 이러한 서버에도 고유한 정책을 적용할 수 있습니다. 이러한 서버를 디렉터리의 다른 서버에서 분리할 수도 있습니다. 하위 OU는 다른 GPO를 만들어야 할 때 만들 수 있습니다(예: 익명 액세스 콘텐츠 서버 및 인증된 콘텐츠 서버).
Customers OU
이 최상위 OU를 사용하면 모든 사용자 계정을 디렉터리의 나머지와 분리할 수 있습니다. 다음 수준의 OU에는 고객 OU가 포함되어 있습니다. 각 고객에 대해 하나의 OU가 있습니다. 이 OU를 사용하면 고객의 모든 사용자 계정 및 컴퓨터 계정을 다른 고객의 계정과 분리할 수 있습니다. 또한 이 OU 구조는 다중 테넌트 배포에서 사용자 프로필 동기화를 지원하는 데 필요한 구조입니다.
사용자에게 자신의 사용자 지정 도메인에 로그인하는 인상을 주려면 다음 다이어그램과 같이 ACTIVE Directory 서비스 인터페이스 편집기(ADSI 편집) 또는 다른 AD 도구를 사용하여 각 고객 OU의 uPNSuffixes 특성을 편집합니다.
고객 OU의 uPNSuffixes 특성이 구성되면 다음 다이어그램과 같이 해당 값을 해당 고객 OU 내의 사용자 계정과 연결할 수 있습니다.
사용자 인증
사용자 인증은 사용자의 자격 증명을 포함하며 사용자가 해당 자격 증명을 올바르게 제출했는지 확인할 수 있는 디렉터리 또는 데이터베이스인 인증 공급자에 대해 사용자 ID의 유효성을 검사하는 작업입니다. 인증 공급자의 예로는 AD DS(Active Directory 도메인 서비스)가 있습니다. 인증 공급자를 지칭하는 다른 일반적인 이름은 사용자 디렉터리 및 특성 저장소입니다.
인증 방법은 사용자의 ID를 나타내는 계정 자격 증명 및 기타 정보를 특정 방식으로 교환하는 것입니다. 인증 방법을 사용하면 인증 공급자가 사용자를 인증했다는 증명(대개 클레임을 포함하는 토큰 형식)이 제공됩니다.
인증 유형은 하나 이상의 인증 공급자에 대해 자격 증명의 유효성을 검사하는 특정 방식으로, 업계 표준 프로토콜을 사용하기도 합니다. 하나의 인증 유형에서 여러 인증 방법을 사용할 수 있습니다.
사용자 ID의 유효성을 검사한 후에는 권한 부여 프로세스에서 사용자가 액세스할 수 있는 사이트, 콘텐츠 및 기타 기능을 결정합니다.
사용자 인증 유형 계획에서는 다음 항목을 결정해야 합니다.
각 웹 응용 프로그램 및 영역에 대한 사용자 인증 유형 및 방법
결정된 인증 유형 및 방법을 지원하는 데 필요한 인증 인프라
클래식 모드 인증을 사용하는 현재 웹 응용 프로그램 및 영역을 클레임 기반 인증을 사용하도록 마이그레이션하는 방법
AD FS(Active Directory Federation Services)
SharePoint Server 2013에서는 클레임 기반 인증을 지원합니다. AD FS(Active Directory Federation Services)를 SharePoint Server 2013 웹 응용 프로그램에 대한 IP-STS(ID 공급자 보안 토큰 서비스)로 작용하도록 구성할 수 있습니다. 이 구성에서 AD FS는 클라이언트 컴퓨터가 클레임 기반 인증을 사용하는 웹 응용 프로그램에 액세스할 수 있도록 클레임으로 구성된 SAML 기반 보안 토큰을 사용합니다. AD FS 대신 ID 공급자를 사용할 수 있습니다. 그렇지만 사용하는 공급자는 WS-Federation 표준을 지원해야 합니다. 또한 AD FS 구성을 사용할 때는 사용자 지정 코드가 필요합니다.
SharePoint Server 2013용 AD FS를 사용하여 SAML 기반 클레임 인증을 구성하는 방법에 대한 자세한 내용은 SharePoint Server에서 AD FS를 사용하여 SAML 기반 클레임 인증 구성을 참조하세요.
관리 및 운영 고려 사항
이 섹션에서는 다중 테넌트 SharePoint Server 2013 환경에 대한 다양한 관리 및 운영 고려 사항에 대해 설명합니다.
용량 관리
콘텐츠와 용도가 변하지 않는 구현은 없으므로 용량 관리는 지속적으로 이루어져야 하는 프로세스입니다. 따라서 SharePoint Server 2013 기반 환경에서 효과적인 비즈니스 솔루션을 지속적으로 제공할 수 있도록 향후의 규모 증가 및 변경에 대한 계획을 세워야 합니다. SharePoint Server 2013의 용량 관리에 대한 자세한 내용은 SharePoint Server 2013의 용량 관리 및 크기 조정 개요를 참조하세요.
앱 관리
SharePoint용 앱에서는 SharePoint 사이트에 특정 정보나 기능을 포함하기 위한 새로운 방법을 제공합니다. SharePoint용 앱은 특정 최종 사용자 또는 비즈니스 요구를 해결하는 규모가 작고 사용이 용이한 독립 실행형 앱입니다. 사이트 소유자는 공용 SharePoint 스토어 또는 조직 내부 앱 카탈로그에서 SharePoint용 앱을 검색 및 다운로드하여 SharePoint 사이트에 설치할 수 있습니다. 이러한 SharePoint용 앱은 최상의 웹을 SharePoint Server 2013과 통합합니다. SharePoint 사이트를 사용자 지정하거나 늘리는 SharePoint 기능 및 솔루션 패키지는 대체하지 않습니다. 팜 또는 사이트 모음 관리자가 설치해야 하는 기능 및 솔루션과 달리 SharePoint용 앱은 사이트 소유자가 SharePoint 사이트에 직접 추가할 수 있는 독립 실행형 응용 프로그램입니다. SharePoint용 앱에는 사이트 소유자가 설치, 업그레이드 및 제거할 수 있는 간단한 수명 주기가 있습니다.
SharePoint Server 2013의 App Management Service는 다중 테넌시를 인식합니다. 대부분의 앱 구성 및 관리 기능은 테넌트 관리 사이트를 통해 공개되며 각 테넌트 관리자가 개별 설정을 구성할 수 있습니다.
백업 및 복원
다중 테넌트 SharePoint Server 2013 호스팅 플랫폼에서 테넌트 독립적 백업 및 복원 작업을 수행하는 경우 SharePoint Server 2013 환경에서 백업 및 복원 작업을 수행하기 위한 일반적인 지침을 따를 수 있습니다. SharePoint Server의 백업 및 복원을 참조하세요.
SharePoint Server 2013에서 워크플로 플랫폼은 SharePoint 플랫폼과 별개입니다. 따라서 두 플랫폼이 서로 동기화 상태를 유지하려면 워크플로 관리자를 SharePoint 백업 및 복원 작업에 맞게 조정해야 합니다. 워크플로 Service Manager 백업 및 복원 작업을 계획하는 방법에 대한 자세한 내용은 워크플로 관리자 1.0의 재해 복구 및 범위 복원을 참조하세요.
다중 테넌트 SharePoint Server 2013 호스팅 플랫폼에서 테넌트별 백업 및 복원 작업을 수행하는 경우 서비스 애플리케이션, 워크플로, 콘텐츠 데이터베이스 및 사이트 모음과 동기화된 테넌트 인식 구성 요소를 유지해야 할 수 있습니다.
서비스 응용 프로그램
분할 모드로 구성된 서비스 응용 프로그램에는 테넌트 고유의 데이터를 포함하는 하나 이상의 연결된 데이터베이스가 있습니다. 응용 프로그램 및 데이터베이스 수준에서 이러한 서비스 응용 프로그램에 대해 일반적인 백업 및 복원 작업을 수행할 수 있지만 해당 서비스 응용 프로그램이나 데이터베이스에 대해 테넌트 고유의 자세한 백업 및 복원 작업을 수행하기 위한 제한된 명령도 있습니다.
서비스 응용 프로그램 고려 사항
App Management Service
App Management Service는 SharePoint Server 2013에 도입된 SharePoint용 앱 기능을 관리하는 데 사용되는 서비스 응용 프로그램입니다. SharePoint용 앱에서는 SharePoint 사이트에 특정 정보나 기능을 포함하기 위한 새로운 방법을 제공합니다. SharePoint용 앱은 특정 최종 사용자 또는 비즈니스 요구를 해결하는 규모가 작고 사용이 용이한 독립 실행형 앱입니다. 앱 관리 서비스는 파티션 모드를 지원하지 않지만 기본적으로 사이트 구독을 인식합니다. 다중 테넌트 SharePoint 환경에서 대부분의 앱 관리 기능(즉, 앱 카탈로그 관리, 앱 라이선스 관리, 앱 권한 등)은 테넌트 관리 사이트를 사용하여 가져옵니다.
다음 다이어그램은 테넌트 관리 사이트의 App Management Service를 보여줍니다.
Business Data Connectivity 서비스
분할 모드로 구성된 Business Data Connectivity Service의 모든 구성은 테넌트 관리로 이동됩니다. 그러나 테넌트 관리 사이트 템플릿에는 테넌트 관리 사이트 템플릿 확장 섹션의 사용자 지정 기술을 사용하여 추가할 수 있는 이 페이지에 대한 링크가 포함되어 있지 않습니다.
Secure Store Service
분할 모드로 구성된 경우 암호화 키 세대는 중앙 관리 또는 Windows PowerShell을 통해 수행되는 팜 수준 구성에 남아 있습니다. Secure Store Service 구성의 나머지는 테넌트 관리로 이동됩니다. 그러나 테넌트 관리 사이트 템플릿에는 테넌트 관리 사이트 템플릿 확장 섹션의 사용자 지정 기술을 사용하여 추가할 수 있는 이 페이지에 대한 링크가 포함되어 있지 않습니다.
Managed Metadata Service
분할 모드로 구성된 경우 모든 구성이 테넌트 관리로 이동되고 콘텐츠 형식 게시는 기본적으로 사용되도록 설정됩니다.
Search Service
많은 테넌트 고유의 검색 구성 관련 기능은 다음 다이어그램과 같이 테넌트 관리 사이트에 제공됩니다.
참고
*의 대부분입니다. EnterpriseSearch* Microsoft PowerShell cmdlet은 이제 파티션을 인식하며 테넌트 관리 사이트에 노출되는 일부 구성 및 관리 기능을 자동화하는 데 사용할 수 있습니다.
User Profile Service
많은 수의 구성 요소가 테넌트 관리로 이동되지만 프로필 동기화에 대한 많은 구성은 팜 수준에 남아 있으며 다음 그림과 같이 모든 테넌트에 적용될 수 있습니다.
워크플로
앞서 설명한 것처럼 SharePoint Server 2013에서 워크플로 플랫폼은 SharePoint 플랫폼과 별개입니다. 워크플로 플랫폼 자체는 하나 이상의 데이터베이스를 사용합니다. 이러한 데이터베이스에 대해 일반적인 데이터베이스 수준 백업 및 복원 작업을 수행할 수 있지만 이러한 워크플로 데이터베이스에 대해 테넌트 고유의 백업 및 복원 작업을 수행하기 위한 명령이나 유틸리티가 기존에는 없었습니다.
콘텐츠 데이터베이스
테넌트가 하나 이상의 전용 콘텐츠 데이터베이스를 독점적으로 사용할 경우 이러한 데이터베이스에 대해 일반적인 데이터베이스 수준 백업 및 복원 작업을 수행할 수 있습니다.
참고
표준 제품 기능(예: 셀프 서비스 사이트 만들기)을 사용해서는 하나 이상의 전용 콘텐츠 데이터베이스를 독점적으로 사용할 수 없습니다. 다음은 특정 서비스 수준 지원을 충족하기 위해 사용자 지정이 필요한 경우의 예입니다.
다음 Microsoft PowerShell 스크립트는 테넌트 콘텐츠 데이터베이스에 대해 초기 백업 작업을 수행하는 방법을 보여줍니다.
Add-PSSnapin microsoft.sharepoint.powershell -ea SilentlyContinue
Backup-SPFarm -Directory "c:\backups\alpha" -Item "HostingFarm_Content_Hosting" -BackupMethod Full
Write-Host "Tenant Content Database Backup Script Completed!"
The following Windows PowerShell script shows how to perform a restore operation on a tenant site collection:
Add-PSSnapin microsoft.sharepoint.powershell -ea SilentlyContinue
Restore-SPFarm -Directory "c:\backups\alpha" -Item "HostingFarm_Content_Hosting" -RestoreMethod Overwrite
Write-Host "Tenant Content Database Restore Script Completed!"
사이트 모음
테넌트 사이트 모음에 대해 특정 백업 및 복원 작업을 수행할 수 있습니다. 사용하도록 선택한 도구는 사이트 모음 자체의 크기에 따라 다릅니다. Microsoft PowerShell cmdlet은 중소 규모의 사이트 모음에 적합합니다.
다음 Microsoft PowerShell 스크립트는 테넌트 사이트 모음에 대해 백업 작업을 수행하는 방법을 보여줍니다.
Add-PSSnapin microsoft.sharepoint.powershell -ea SilentlyContinue
Backup-SPSite -Identity "http://alpha.contoso.com" -Path "c:\backups\alpha\root.bak" -UseSqlSnapshot
Write-Host "Tenant Site Collection Backup Script Completed!"
The following script shows how to perform a restore operation on a tenant site collection:
Add-PSSnapin microsoft.sharepoint.powershell -ea SilentlyContinue
Restore-SPSite -Identity "http://alpha.contoso.com" -Path "c:\backups\alpha\root.bak" -DatabaseServer "SQLServer01" -DatabaseName "HostingFarm_Content_Hosting" -HostHeaderWebApplication "http://$ENV:COMPUTERNAME" -GradualDelete - Confirm: $false -Force
Write-Host "Tenant Site Collection Restore Script Completed!"
모니터링
SharePoint Server 2013을 모니터링하고 문제를 해결할 수 있는 많은 도구가 있습니다. 서로 다른 도구는 겹치는 영역이 있을 수 있지만 환경의 다양한 측면을 다룹니다. 어떤 도구를 사용하면 모니터링 이점을 최대화할 수 있을지 고려하십시오. SharePoint Server 2013에 대한 모니터링을 계획하는 방법에 대한 자세한 내용은 SharePoint Server에서 모니터링 계획을 참조하세요.
기능 팩 관리
앞서 설명한 것처럼 여러 다른 기능을 함께 그룹화한 후 사이트 구독(즉, 테넌트)과 연결하는 데 기능 팩을 사용할 수 있습니다. 해당 사이트 구독(테넌트)의 모든 사이트 모음은 기능 팩에 속하는 사이트 범위 또는 웹 범위 기능만 사용할 수 있습니다. 이 기능을 통해 서비스 공급자는 여러 다른 기능 집합을 토대로 계층화된 서비스를 제공할 수 있습니다. New-SPSiteSubscriptionFeaturePack cmdlet을 통해 기능 팩 컨테이너를 만든 후 Add-SPSiteSubscriptionFeaturePackMember cmdlet을 사용하여 컨테이너에 개별 기능을 추가하는 기능 팩이 만들어집니다.
다음 Microsoft PowerShell 스크립트는 SharePoint Foundation 2013 기능을 나타내는 테넌트 수준 기능 팩을 만드는 방법을 보여주고 팜의 속성 모음에 기능 팩 ID를 저장합니다.
참고
기능 팩에 작동하는 스크립트를 실행하려면 먼저 Subscription Settings Service 응용 프로그램이 있어야 합니다.
<#
Feature Packs.ps1
Creates a new Feature Pack comprised of SharePoint Foundation 2013 Features
Adds the Feature Pack ID with a friendly name to the Farm's Property Bag for future use.
#>
asnp Microsoft.SharePoint.PowerShell
# Create an alias for Add-SPSiteSubscriptionFeaturePackMember
Set-Alias AddFeature Add-SPSiteSubscriptionFeaturePackMember
# create a new feature pack, and store it in the Farm's Property Bag
$ffp = New-SPSiteSubscriptionFeaturePack
$farm = Get-SPFarm
$farm.Properties.Add("Foundation_FeaturePack", $ffp.Id);
$farm.Update();
# add foundation features to the feature pack
# web scoped features...
AddFeature -identity $ffp -FeatureDefinition XmlFormLibrary
AddFeature -identity $ffp -FeatureDefinition LinksList
AddFeature -identity $ffp -FeatureDefinition WorkflowProcessList
AddFeature -identity $ffp -FeatureDefinition GridList
AddFeature -identity $ffp -FeatureDefinition WorkflowHistoryList
AddFeature -identity $ffp -FeatureDefinition TeamCollab
AddFeature -identity $ffp -FeatureDefinition GanttTasksList
AddFeature -identity $ffp -FeatureDefinition PictureLibrary
AddFeature -identity $ffp -FeatureDefinition IssuesList
AddFeature -identity $ffp -FeatureDefinition DiscussionsList
AddFeature -identity $ffp -FeatureDefinition ContactsList
AddFeature -identity $ffp -FeatureDefinition ExternalList
AddFeature -identity $ffp -FeatureDefinition TasksList
AddFeature -identity $ffp -FeatureDefinition WebPageLibrary
AddFeature -identity $ffp -FeatureDefinition AnnouncementsList
AddFeature -identity $ffp -FeatureDefinition WikiPageHomePage
AddFeature -identity $ffp -FeatureDefinition CustomList
AddFeature -identity $ffp -FeatureDefinition DocumentLibrary
AddFeature -identity $ffp -FeatureDefinition SurveysList
AddFeature -identity $ffp -FeatureDefinition EventsList
AddFeature -identity $ffp -FeatureDefinition DataSourceLibrary
AddFeature -identity $ffp -FeatureDefinition NoCodeWorkflowLibrary
AddFeature -identity $ffp -FeatureDefinition OsrvLinks
AddFeature -identity $ffp -FeatureDefinition FCGroupsList
AddFeature -identity $ffp -FeatureDefinition TenantAdminBDC
AddFeature -identity $ffp -FeatureDefinition OssNavigation
AddFeature -identity $ffp -FeatureDefinition IMEDicList
AddFeature -identity $ffp -FeatureDefinition CallTrackList
AddFeature -identity $ffp -FeatureDefinition SSSvcAdmin
AddFeature -identity $ffp -FeatureDefinition MpsWebParts
AddFeature -identity $ffp -FeatureDefinition GBWWebParts
AddFeature -identity $ffp -FeatureDefinition FacilityList
AddFeature -identity $ffp -FeatureDefinition ScheduleList
AddFeature -identity $ffp -FeatureDefinition ObaProfilePages
AddFeature -identity $ffp -FeatureDefinition GBWProvision
AddFeature -identity $ffp -FeatureDefinition OSSSearchSearchCenterUrlFeature
AddFeature -identity $ffp -FeatureDefinition WikiWelcome
AddFeature -identity $ffp -FeatureDefinition MaintenanceLogs
AddFeature -identity $ffp -FeatureDefinition TenantAdminLinks
AddFeature -identity $ffp -FeatureDefinition HolidaysList
AddFeature -identity $ffp -FeatureDefinition GroupWork
AddFeature -identity $ffp -FeatureDefinition WhereaboutsList
AddFeature -identity $ffp -FeatureDefinition CirculationList
AddFeature -identity $ffp -FeatureDefinition TenantAdminSecureStore
AddFeature -identity $ffp -FeatureDefinition SearchAdminWebParts
AddFeature -identity $ffp -FeatureDefinition ObaSimpleSolution
AddFeature -identity $ffp -FeatureDefinition TimecardList
AddFeature -identity $ffp -FeatureDefinition WhatsNewList
AddFeature -identity $ffp -FeatureDefinition MobilityRedirect
AddFeature -identity $ffp -FeatureDefinition AdminLinks
AddFeature -identity $ffp -FeatureDefinition SearchCenterLiteFiles
AddFeature -identity $ffp -FeatureDefinition CorporateCatalog
AddFeature -identity $ffp -FeatureDefinition BlogContent
AddFeature -identity $ffp -FeatureDefinition PromotedLinksList
AddFeature -identity $ffp -FeatureDefinition AppLockdown
AddFeature -identity $ffp -FeatureDefinition AppRequestsList
AddFeature -identity $ffp -FeatureDefinition SearchCenterUpgrade
AddFeature -identity $ffp -FeatureDefinition SearchConfigFields
AddFeature -identity $ffp -FeatureDefinition PhonePNSubscriber
AddFeature -identity $ffp -FeatureDefinition SearchConfigContentType
AddFeature -identity $ffp -FeatureDefinition GettingStarted
AddFeature -identity $ffp -FeatureDefinition GettingStartedWithAppCatalogSite
AddFeature -identity $ffp -FeatureDefinition ExternalSubscription
AddFeature -identity $ffp -FeatureDefinition SearchCenterFiles
AddFeature -identity $ffp -FeatureDefinition BcsEvents
AddFeature -identity $ffp -FeatureDefinition OfficeExtensionCatalog
AddFeature -identity $ffp -FeatureDefinition MDSFeature
AddFeature -identity $ffp -FeatureDefinition TenantSearchAdmin
AddFeature -identity $ffp -FeatureDefinition SiteAssets
AddFeature -identity $ffp -FeatureDefinition PremiumSearchVerticals
AddFeature -identity $ffp -FeatureDefinition AccessRequests
AddFeature -identity $ffp -FeatureDefinition SearchConfigList
AddFeature -identity $ffp -FeatureDefinition ReportAndDataSearch
AddFeature -identity $ffp -FeatureDefinition MBrowserRedirect
AddFeature -identity $ffp -FeatureDefinition BlogHomePage
AddFeature -identity $ffp -FeatureDefinition SearchConfigListTemplate
AddFeature -identity $ffp -FeatureDefinition SiteNotebook
AddFeature -identity $ffp -FeatureDefinition HierarchyTasksList
AddFeature -identity $ffp -FeatureDefinition BlogSiteTemplate
AddFeature -identity $ffp -FeatureDefinition SearchCenterLiteUpgrade
# Site Scoped features...
AddFeature -identity $ffp -FeatureDefinition BasicWebParts
AddFeature -identity $ffp -FeatureDefinition OSSSearchEndUserHelpFeature
AddFeature -identity $ffp -FeatureDefinition HelpLibrary
AddFeature -identity $ffp -FeatureDefinition OfficeWebApps
AddFeature -identity $ffp -FeatureDefinition WordServerViewing
AddFeature -identity $ffp -FeatureDefinition OnenoteServerViewing
AddFeature -identity $ffp -FeatureDefinition SiteHelp
AddFeature -identity $ffp -FeatureDefinition ctypes
AddFeature -identity $ffp -FeatureDefinition OSSSearchSearchCenterUrlSiteFeature
AddFeature -identity $ffp -FeatureDefinition OpenInClient
AddFeature -identity $ffp -FeatureDefinition ExcelServerEdit
AddFeature -identity $ffp -FeatureDefinition AdminReportCore
AddFeature -identity $ffp -FeatureDefinition fields
AddFeature -identity $ffp -FeatureDefinition SearchServerWizardFeature
AddFeature -identity $ffp -FeatureDefinition OSearchHealthReports
AddFeature -identity $ffp -FeatureDefinition SearchWebParts
AddFeature -identity $ffp -FeatureDefinition IssueTrackingWorkflow
AddFeature -identity $ffp -FeatureDefinition ShareWithEveryone
AddFeature -identity $ffp -FeatureDefinition MonitoredApps
AddFeature -identity $ffp -FeatureDefinition SearchTaxonomyRefinementWebParts
AddFeature -identity $ffp -FeatureDefinition SearchTaxonomyRefinementWebPartsHtml
AddFeature -identity $ffp -FeatureDefinition SearchMaster
AddFeature -identity $ffp -FeatureDefinition EnableAppSideLoading
AddFeature -identity $ffp -FeatureDefinition Developer
AddFeature -identity $ffp -FeatureDefinition AutohostedAppLicensing
AddFeature -identity $ffp -FeatureDefinition AppRegistration
Write-Host "Feature Pack Created! " + $ffp.ID
라이선스 관리
SharePoint Server 2013에서는 새 라이선스 관리 기능이 추가되었습니다. 팜 관리자는 이제 사용자에게 라이선스를 할당하고 런타임 라이선스 확인을 사용하도록 할 수 있습니다. 이러한 새 기능을 사용하여 해당 라이선스가 있는 사용자만 특정 기능을 사용하도록 할 수 있습니다. 또한 이 기능을 사용하면 SharePoint Server 표준 버전 및 엔터프라이즈 버전에 대해 별도의 팜을 구축할 필요가 없으므로 배포 모델이 간소화됩니다.
사용자 라이선스는 클레임을 알려진 유형의 라이선스에 매핑하여 할당됩니다. 예를 들어 클레임은 AD DS(Active Directory 도메인 서비스) 보안 그룹일 수 있습니다. ContosoFinanceDept 보안 그룹을 Enterprise 라이선스에 매핑하면 해당 그룹의 모든 구성원에게 Enterprise 라이선스를 효과적으로 할당할 수 있습니다. SharePoint Server에 로그인하는 사용자에게 클레임이 할당됩니다. SharePoint Server는 사용자의 클레임을 검사하여 라이선스를 결정합니다. 사용자에게 특정 기능을 사용할 수 있는 라이선스가 없는 경우 SharePoint는 런타임에 해당 기능에 대한 액세스를 차단합니다.
이 SharePoint Server 2013 라이선스 구현은 새로운 Microsoft PowerShell cmdlet을 통해 관리됩니다. 기본적으로 SharePoint Server에서는 라이선스가 사용하지 않도록 설정됩니다. 그렇지만 관리자는 Microsoft PowerShell을 사용하여 라이선스를 설정하도록 선택할 수 있습니다. SharePoint Server 2013에서 라이선스를 구성하는 방법에 대한 자세한 내용은 SharePoint Server에서 라이선스 구성을 참조하세요.
수명 주기 관리
이 백서에서는 다중 테넌트 SharePoint 2013 솔루션을 설계할 때의 주요 인프라 고려 사항을 간략하게 설명하고 구성을 위한 기준 스크립트를 제공하지만 운영 수명 주기의 전반적인 관리는 필수적입니다. 예를 들어 사용자 지정 테넌트 관리, 구독 프로비저닝 해제, 보관, 사용자 관리, 셀프 서비스 암호 재설정 및 할당량은 모두 전체 서비스 제공을 제공하기 위해 더 많은 Windows PowerShell 및 사용자 지정 작업의 조합이 필요한 공통 영역입니다. 각 서비스 공급자는 이 분야에서 서로 다른 요구 사항을 가지고 있으며, 이러한 요구 사항이 인프라 플랫폼에 대한 초기 범위 지정 및 디자인 작업의 일부인지 확인하는 것이 매우 중요합니다.
설정 및 구성
이 섹션에서는 SharePoint Server 2013 플랫폼을 호스팅하는 다중 테넌트를 설정하고 구성하는 일반적인 단계를 간략하게 설명합니다.
승인을
이 섹션에서는 세부 정보를 제공하고 다양한 구성 요소의 생성과 구성을 보여주는 PowerShell 스크립트를 포함합니다. 이러한 스크립트는 다중 테넌트의 구성 요구 사항을 보여주기 위해 제공되므로 최적의 프로비전 순서를 나타내지 않지만 사용자 지정 엔드 투 엔드 스크립팅 솔루션을 개발하기 위한 기초가 될 수 있습니다.
다음 하위 섹션에 포함된 Microsoft PowerShell 스크립트는 스펜서 하바 ()의 작업을 기반으로 하며(http://www.harbar.net전체 또는 부분적으로) 그의 은혜로운 동의를 가지고 여기에서 재현됩니다. Spencer Harbar의 원래 작업에 대한 자세한 내용은 다음 문서를 참조하세요.
제공되는 PowerShell 스크립트에는 환경에 맞게 수정해야 하는 변수가 포함되어 있습니다.
배포 예제
이 섹션에서는 사이트 모음 및 호스트 헤더 관리 경로를 사용하여 단일 호스팅 웹 애플리케이션을 사용하는 배포 예제를 제공합니다. 단순성을 위해 단일 서버에 배포됩니다. 이 배포 예제는 SharePoint 2013을 사용하는 다중 테넌시를 위한 디자인 모델이며 여러 컴퓨터에서 서비스 instance 역할이 명시되는 배포로 확장할 수 있습니다. 배포 예제에서는 웹 애플리케이션에 HTTP를 사용합니다. 실제 배포에서 SSL은 로그인, 콘텐츠 및 SharePoint 앱과 함께 사용되는 권한 부여 토큰 및 워크플로 관리자 같은 기타 OAuth2 관련 서비스를 보호하는 데 사용해야 합니다.
DNS 구성
호스트 이름 사이트 모음은 다중 테넌트 SharePoint 환경에 사용되므로 계획에 따라 DNS(즉, 적절한 DNS 레코드 만들기 등)를 구성해야 합니다. SharePoint Server 2013에 대한 호스트 이름 사이트 모음을 계획하는 방법에 대한 자세한 내용은 호스트 이름 사이트 모음 아키텍처 및 배포(SharePoint 2013)를 참조하세요.
SharePoint용 앱도 지원하려면 환경을 지원하도록 DNS도 구성해야 합니다. SharePoint Server 2013용 앱 환경을 구성하는 방법에 대한 자세한 내용은 SharePoint Server용 앱에 대한 환경 구성을 참조하세요.
Active Directory 구성
앞서 설명한 것처럼 SharePoint에서 다중 테넌시를 지원하려면 계층형 조직 구성 단위 구조를 만들어 각 구독에 대해 사용자 프로필 동기화를 지원하도록 Active Directory를 적절히 구성해야 합니다. 또한 환경에 대해 적절한 서비스 계정을 만들어야 합니다. SharePoint Server 2013에 대한 서비스 계정을 계획하는 방법에 대한 자세한 내용은 SharePoint Server에서 관리 및 서비스 계정 계획을 참조하세요. 이 배포 예제에서는 다음 세 가지 서비스 계정이 사용됩니다.
SPFarm - SharePoint 팜 계정
SPServices - 서비스 애플리케이션 엔드포인트를 호스트하는 애플리케이션 풀 ID
SPContent - 콘텐츠 웹 애플리케이션을 호스트하는 애플리케이션 풀 ID
SharePoint 팜 만들기 및 구성
다음 Microsoft PowerShell 스크립트는 SharePoint 팜을 만드는 방법을 보여줍니다.
<#
1. Farm Creation.ps1
Creates a new SharePoint Farm
Creates Central Administration on Port 8080
Update initial variables as needed to reflect your environment
Script will prompt for the password of the farm account
#>
asnp Microsoft.SharePoint.PowerShell
$databaseServer = "SQLSP1"
$configDatabase = "HostingFarm_Config"
$adminContentDB = "HostingFarm_Content_Admin"
$passphrase = "Password1"
$farmAccountName = "FABRIKAM\spfarm"
$farmAccount = Get-Credential $farmAccountName
$passphrase = (ConvertTo-SecureString $passphrase -AsPlainText -force)
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 8080 -WindowsAuthProvider NTLM
Write-Host "Installing Help..."
Install-SPHelpCollection -All
Write-Host "Installing Application Content..."
Install-SPApplicationContent
Write-Host "Farm Creation Done!"
프록시 그룹, 호스팅 웹 응용 프로그램 및 관리 경로
처음에는 콘텐츠 웹 애플리케이션을 호스트하는 애플리케이션 풀에 대해 관리되는 계정이 만들어집니다. 새로운 프록시 그룹이 만들어진 다음 웹 응용 프로그램이 만들어집니다. 마지막으로 셀프 서비스 사이트 및 공유 관리 경로를 만들 수 있도록 하는 웹 응용 프로그램 구성이 수행됩니다. 이 사이트 모음은 최종 사용자가 액세스하지 않더라도 호스팅 웹 애플리케이션에서 "루트" 사이트 모음을 만드는 것이 중요합니다. 이 "루트" 사이트 모음은 SharePoint 2013의 지원 가능성 및 올바른 운영 동작에 필요합니다.
참고
이 예제에서는 웹 응용 프로그램에 HTTP를 사용합니다.
<#
2. Proxy Group, Web Application & Farm Settings.ps1
Creates a new Managed Account
Creates a new Proxy Group
Creates a new Web Application for HNSC, in a new Application Pool, in the new Proxy Group
Creates an empty root Site Collection
Enables Self Service Site Creation
Creates Managed Paths for HNSC
Update initial variables as needed to reflect your environment
Update the Managed Paths section to use the paths you need
Script will prompt for the password of the App Pool account used for the Web App
You will need to configure the SSL certificate manually or via IIS PowerShell
#>
asnp Microsoft.SharePoint.PowerShell
## UPDATE THESE VARS ##
$waAppPoolUserName = "FABRIKAM\spcontent"
$waAppPoolName = "SharePoint Hosting"
$proxyGroupName = "Hosting Proxy Group"
$waUrl = "http://$ENV:COMPUTERNAME"
$webAppName = "SharePoint Hosting"
$contentDBName = "HostingFarm_Content_Hosting"
$ownerEmail = "administrator@contoso.com"
$ownerAlias = "FABRIKAM\administrator"
## END VARS ##
# Create Managed Account
Write-Host "Please supply the password for the $waAppPoolUserName Account..."
$appPoolCred = Get-Credential $waAppPoolUserName
Write-Host "Creating Managed Account..."
$waAppPoolAccount = New-SPManagedAccount -Credential $appPoolCred
# Create a new Proxy Group
Write-Host "Creating Proxy Group..."
$proxyGroup = New-SPServiceApplicationProxyGroup -Name $proxyGroupName
# Create a new Web App in the new Proxy Group using Windows Claims on Port 80 with no host header
Write-Host "Creating Web Application..."
# SSL example, not used
#$webApp = New-SPWebApplication -ApplicationPool $waAppPoolName -ApplicationPoolAccount $waAppPoolAccount -Name $webAppName -Port 443 -SecureSocketsLayer:$true -AuthenticationProvider (New-SPAuthenticationProvider) -DatabaseName $contentDBName -ServiceApplicationProxyGroup $proxyGroup
# following line is to use port 80
$webApp = New-SPWebApplication -ApplicationPool $waAppPoolName -ApplicationPoolAccount $waAppPoolAccount -Name $webAppName -Port 80 -AuthenticationProvider (New-SPAuthenticationProvider) -DatabaseName $contentDBName -ServiceApplicationProxyGroup $proxyGroup
# Create a empty root Site Collection, required for support and SSSC
Write-Host "Creating empty root Site Collection..."
New-SPSite -Url $waUrl -owneralias $ownerAlias -ownerEmail $ownerEmail
# Enable Self Service Site Creation
Write-Host "Enabling Self Service Site Creation..."
$webApp.SelfServiceSiteCreationEnabled = $true
$webApp.RequireContactForSelfServiceSiteCreation = $false
$webApp.Update()
# Create Managed Paths for all 2013 Tenancy capabilities (remove the ones you don't want)
# the default /sites path is removed to prevent creation of sites from CA
Write-Host "Creating HNSC Managed Paths..."
Remove-SPManagedPath "sites" -WebApplication $webApp -Confirm:$false
New-SPManagedPath "admin" -HostHeader -Explicit # Tenant Administration
New-SPManagedPath "apps" -HostHeader -Explicit # App Catalog
New-SPManagedPath "cthub" -HostHeader -Explicit # Content Type Hub
New-SPManagedPath "my" -HostHeader -Explicit # MySite Host
New-SPManagedPath "my/sites" -HostHeader # MySites
New-SPManagedPath "edisc" -HostHeader -Explicit # E-Discovery Hub
Write-Host "Proxy Group and Web Application done!"
분할되지 않은 서비스
이 단계에서는 분할되지 않은 서비스 애플리케이션을 만들 수 있습니다. 이러한 서비스 애플리케이션은 정상 작업(예: 상태 서비스)을 위해 팜에서 필요하거나 데이터를 저장하지 않으므로 다중 테넌시를 지원하기 위해 분할할 필요가 없습니다. 이렇게 하려면 다른 관리되는 계정이 필요하고 각 서비스 애플리케이션이 차례로 만들어집니다.
다음 Microsoft PowerShell 스크립트는 분할되지 않은 서비스 응용 프로그램을 만드는 방법을 보여줍니다.
<#
3. Non Partitioned Services.ps1
Creates a new Managed Account
Creates a new Service Application Pool
Starts the Service Instances for and creates non partitioned Service Applications and Proxies:
State Service
Usage and Health Data Collection Service
Subscription Settings Service
App Management Service
Work Management Service
...in the new Proxy Group
Adds any configured Workflow Service Proxy to the new Proxy Group
Update initial variables as needed to reflect your environment
Script will prompt for the password of the Service Application Pool account
#>
asnp Microsoft.SharePoint.PowerShell
## UPDATE THESE VARS ##
$proxyGroupName = "Hosting Proxy Group"
$saAppPoolName = "SharePoint Web Services Default"
$saAppPoolUserName = "FABRIKAM\spservices"
# Service Application and DB names
$stateName = "State Service"
$stateDBName = "HostingFarm_StateService"
$usageName = "Usage and Health Data Collection Service"
$usageDBName = "HostingFarm_Usage"
$subsName = "Subscription Settings Service"
$subsDBName = "HostingFarm_SubscriptionSettings"
$appsName = "App Management Service"
$appsDBName = "HostingFarm_AppManagement"
$wmsName = "Work Management Service"
$pasName = "PowerPoint Automation Service"
## END VARS ##
# Create Managed Account and App Pool for Service App Endpoints
Write-Host "Please supply the password for the $saAppPoolUserName Account..."
$appPoolCred = Get-Credential $saAppPoolUserName
Write-Host "Creating Managed Account..."
$saAppPoolAccount = New-SPManagedAccount -Credential $appPoolCred
Write-Host "Creating Service Application Pool..."
$saAppPool = New-SPServiceApplicationPool -Name $saAppPoolName -Account $saAppPoolAccount
# Grab the Proxy Group
$proxyGroup = Get-SPServiceApplicationProxyGroup $proxyGroupName
# Create State Service Application and Proxy, add to Proxy Group
Write-Host "Creating $stateName Application and Proxy..."
$stateDB = New-SPStateServiceDatabase -Name $stateDBName
$state = New-SPStateServiceApplication -Name $stateName -Database $stateDB
$proxy = New-SPStateServiceApplicationProxy -Name "$stateName Proxy" -ServiceApplication $state
$proxyGroup | Add-SPServiceApplicationProxyGroupMember -Member $proxy
# Create Usage Service Application and Proxy, add to Proxy Group, and provision it's Proxy
Write-Host "Creating $usageName Application and Proxy..."
$serviceInstance = Get-SPUsageService
New-SPUsageApplication -Name $usageName -DatabaseName $usageDBName -UsageService $serviceInstance
$proxy = Get-SPServiceApplicationProxy | ? { $_.TypeName -eq "Usage and Health Data Collection Proxy" }
$proxyGroup | Add-SPServiceApplicationProxyGroupMember -Member $proxy
$proxy.Provision();
# Start the Subscription Settings Service Instance, create the Service Application and Proxy, add to Proxy Group
Write-Host "Creating $subsName Application and Proxy..."
Get-SPServiceInstance | where { $_.TypeName -eq "Microsoft SharePoint Foundation Subscription Settings Service" } | Start-SPServiceInstance
$subs = New-SPSubscriptionSettingsServiceApplication -ApplicationPool $saAppPool -Name $subsName -DatabaseName $subsDBName
$proxy = New-SPSubscriptionSettingsServiceApplicationProxy -ServiceApplication $subs
$proxyGroup | Add-SPServiceApplicationProxyGroupMember -Member $proxy
# Start the App Management Service Instance, create the Service Application and Proxy, add to Proxy Group
Write-Host "Creating $appsName Application and Proxy..."
Get-SPServiceInstance | where { $_.TypeName -eq "App Management Service"} | Start-SPServiceInstance
$apps = New-SPAppManagementServiceApplication -ApplicationPool $saAppPool -Name $appsName -DatabaseName $appsDBName
$proxy = New-SPAppManagementServiceApplicationProxy -ServiceApplication $apps -Name "$appsName Proxy"
$proxyGroup | Add-SPServiceApplicationProxyGroupMember -Member $proxy
# Start the Work Management Service Instance, create the Service Application and Proxy, add to Proxy Group
Write-Host "Creating $wmsName Application and Proxy..."
Get-SPServiceInstance | ? { $_.TypeName -eq "Work Management Service" } | Start-SPServiceInstance
$wms = New-SPWorkManagementServiceApplication -ApplicationPool $saAppPool -Name $wmsName
$proxy = New-SPWorkManagementServiceApplicationProxy -ServiceApplication $wms -Name "$wmsName Proxy"
$proxyGroup | Add-SPServiceApplicationProxyGroupMember -Member $proxy
# Start the PowerPoint Automation Service Instance, create the Service Application and Proxy, add to Proxy Group
Write-Host "Creating $pasName Application and Proxy..."
Get-SPServiceInstance | ? { $_.TypeName -eq "PowerPoint Conversion Service" } | Start-SPServiceInstance
$pas = New-SPPowerPointConversionServiceApplication -ApplicationPool $saAppPool -Name $pasName
$proxy = New-SPPowerPointConversionServiceApplicationProxy -ServiceApplication $pas -Name "$pasName Proxy"
$proxyGroup | Add-SPServiceApplicationProxyGroupMember -Member $proxy
# Adds any Workflow Service proxy to the Proxy Group (if it exists)
$wfProxy = Get-SPServiceApplicationProxy | ? {$_.TypeName -like "*Workflow Service*" }
if ($wfProxy -ne $null) {
Write-Host "Adding Workflow Service Proxy to Proxy Group..."
# should probably remove from the default group as well
Add-SPServiceApplicationProxyGroupMember -Identity $proxyGroup -Member $wfProxy
}
Write-Host "Non Partitioned Service Applications done!"
분할된 서비스 응용 프로그램 만들기 및 구성
다음 섹션에서는 분할을 지원하는 각 서비스 애플리케이션을 만들고 구성하는 데 필요한 Microsoft PowerShell 절차에 대해 설명합니다. 검색 및 사용자 프로필을 제외한 각 서비스 애플리케이션에 동일한 일반 패턴이 적용됩니다. 그렇지만 서비스 응용 프로그램 프록시와 관련해서 약간의 차이점이 있습니다.
Business Data Connectivity 서비스
다음 Microsoft PowerShell 스크립트는 분할 모드에서 Business Data Connectivity Service 응용 프로그램을 만든 후 사용자 지정 서비스 프록시 그룹에 추가하는 방법을 표시합니다.
$proxyGroupName = "Hosting Proxy Group"
$saAppPoolName = "SharePoint Web Services Default"
$bcsName = "Business Data Connectivity Service"
$bcsDBName = "HostingFarm_BusinessDataConnectivity"
# Grab the Service Application Pool and Proxy Group
Write-Host "Getting Service Application Pool and Proxy Group..."
$saAppPool = $saAppPoolName | Get-SPServiceApplicationPool
$proxyGroup = Get-SPServiceApplicationProxyGroup $proxyGroupName
# Start Business Data Connectivity Service Instance, create the Service Application and Proxy, add to Proxy Group
Write-Host "Creating $bcsName Application and Proxy..."
Get-SPServiceInstance | ? { $_.TypeName -eq "Business Data Connectivity Service" } | Start-SPServiceInstance
$bcs = New-SPBusinessDataCatalogServiceApplication -PartitionMode -Name $bcsName -ApplicationPool $saAppPool -DatabaseName $bcsDBName
$proxy = Get-SPServiceApplicationProxy | ? { $_.Name -eq "$bcsName" }
$proxyGroup | Add-SPServiceApplicationProxyGroupMember -Member $proxy
Managed Metadata Service
다음 Microsoft PowerShell 스크립트는 분할 모드에서 Managed Metadata Service 응용 프로그램을 만든 후 사용자 지정 서비스 프록시 그룹에 추가하는 방법을 표시합니다.
$proxyGroupName = "Hosting Proxy Group"
$saAppPoolName = "SharePoint Web Services Default"
$mmsName = "Managed Metadata Service"
$mmsDBName = "HostingFarm_ManagedMetadata"
# Grab the Service Application Pool and Proxy Group
Write-Host "Getting Service Application Pool and Proxy Group..."
$saAppPool = $saAppPoolName | Get-SPServiceApplicationPool
$proxyGroup = Get-SPServiceApplicationProxyGroup $proxyGroupName
# Start the Managed Metadata Service Instance, create the Service Application and Proxy, add to Proxy Group
Write-Host "Creating $mmsName Application and Proxy..."
Get-SPServiceInstance | ? { $_.TypeName -eq "Managed Metadata Web Service" } | Start-SPServiceInstance
$mms = New-SPMetadataServiceApplication -PartitionMode -Name $mmsName -ApplicationPool $saAppPool -DatabaseName $mmsDBName
$proxy = New-SPMetadataServiceApplicationProxy -PartitionMode -Name "$mmsName Proxy" -ServiceApplication $mms
$proxyGroup | Add-SPServiceApplicationProxyGroupMember -Member $proxy
Machine Translation Service
Machine Translation Service는 분할 모드에서 해당 서비스 응용 프로그램을 만들어 다중 테넌시를 지원합니다. 테넌트별 구성이 없으며 서비스는 팜 수준에서 관리됩니다. 해당 데이터베이스는 결과적으로는 큐로 작동하므로 분할/테넌트를 인식해야 합니다.
다음 Microsoft PowerShell 스크립트는 분할 모드에서 Machine Translation Service 응용 프로그램을 만드는 방법을 표시합니다.
$proxyGroupName = "Hosting Proxy Group"
$saAppPoolName = "SharePoint Web Services Default"
$mtsName = "Machine Translation Service"
$mtsDBName = "HostingFarm_MachineTranslation"
# Grab the Service Application Pool and Proxy Group
Write-Host "Getting Service Application Pool and Proxy Group..."
$saAppPool = $saAppPoolName | Get-SPServiceApplicationPool
$proxyGroup = Get-SPServiceApplicationProxyGroup $proxyGroupName
# Start Machine Translation Service Instance, create the Service Application and Proxy, add to Proxy Group
Write-Host "Creating $mtsName Application & proxy..."
Get-SPServiceInstance | ? { $_.TypeName -eq "Machine Translation Service" } | Start-SPServiceInstance
$mts = New-SPTranslationServiceApplication -PartitionMode -Name $mtsName -ApplicationPool $saAppPool -DatabaseName $mtsDBName
Get-SPServiceApplicationProxy | ? {$_.Name -eq $mtsName} | Remove-SPServiceApplicationProxy -Confirm:$false
$proxy = New-SPTranslationServiceApplicationProxy -PartitionMode -Name "$mtsName Proxy" -ServiceApplication $mts
$proxyGroup | Add-SPServiceApplicationProxyGroupMember -Member $proxy
Secure Store Service
분할 모드로 구성된 경우 암호화 키 세대는 중앙 관리 또는 Windows PowerShell을 통해 수행되는 팜 수준 구성에 남아 있습니다. Secure Store Service 구성의 나머지는 테넌트 관리로 이동됩니다. 그러나 테넌트 관리 사이트 템플릿에는 테넌트 관리 사이트 템플릿 확장 섹션의 사용자 지정 기술을 사용하여 추가할 수 있는 이 페이지에 대한 링크가 포함되어 있지 않습니다.
다음 Microsoft PowerShell 스크립트는 분할 모드에서 Secure Store Service 응용 프로그램을 만든 후 사용자 지정 서비스 프록시 그룹에 추가하는 방법을 표시합니다.
$proxyGroupName = "Hosting Proxy Group"
$saAppPoolName = "SharePoint Web Services Default"
$sssName = "Secure Store Service"
$sssDBName = "HostingFarm_SecureStore"
$sssAuditing = $false
$sssSharing = $false
$sssAuditLogMaxSize = ""
# Grab the Service Application Pool and Proxy Group
Write-Host "Getting Service Application Pool and Proxy Group..."
$saAppPool = $saAppPoolName | Get-SPServiceApplicationPool
$proxyGroup = Get-SPServiceApplicationProxyGroup $proxyGroupName
# Start Secure Store Service Instance, create the Service Application and Proxy, add to Proxy Group
Write-Host "Creating $sssName Application & Proxy..."
Get-SPServiceInstance | ? { $_.TypeName -eq "Secure Store Service" } | Start-SPServiceInstance
$sss = New-SPSecureStoreServiceApplication -PartitionMode -Name $sssName -ApplicationPool $saAppPool -DatabaseName $sssDBName -auditingEnabled:$sssAuditing -AuditlogMaxSize $sssAuditLogMaxSize -Sharing:$sssSharing
$proxy = New-SPSecureStoreServiceApplicationProxy -Name "$sssName Proxy" -ServiceApplication $sss
$proxyGroup | Add-SPServiceApplicationProxyGroupMember -Member $proxy
Search Service
다음 Microsoft PowerShell 스크립트는 분할 모드에서 Search Service 응용 프로그램을 만드는 방법을 표시합니다.
참고
이 서비스 응용 프로그램용 스크립트는 PartitionMode 매개 변수가 아닌 Partitioned 매개 변수를 사용합니다.
$proxyGroupName = "Hosting Proxy Group"
$saAppPoolName = "SharePoint Web Services Default"
$searchServerName = "$ENV:COMPUTERNAME"
$searchName = "Search Service"
$searchDBName = "HostingFarm_Search"
# Grab the Service Application Pool and Proxy Group
Write-Host "Getting Service Application Pool and Proxy Group..."
$saAppPool = $saAppPoolName | Get-SPServiceApplicationPool
$proxyGroup = Get-SPServiceApplicationProxyGroup $proxyGroupName
# Start Search Service Instances, create the Service Application and Proxy, add to Proxy Group, configure Topology
Write-Host "Starting Search Service Instances..."
Start-SPEnterpriseSearchServiceInstance $searchServerName
Start-SPEnterpriseSearchQueryAndSiteSettingsServiceInstance $searchServerName
Write-Host "Creating Search Service Application and Proxy..."
$search = New-SPEnterpriseSearchServiceApplication -Partitioned -Name $searchName -ApplicationPool $saAppPool -DatabaseName $searchDBName
$proxy = New-SPEnterpriseSearchServiceApplicationProxy -Partitioned -Name "$searchName Proxy" -SearchApplication $search
$proxyGroup | Add-SPServiceApplicationProxyGroupMember -Member $proxy
# Clone the default Topology (which is empty) and create a new one and then activate it
Write-Host "Configuring Search Component Topology..."
$clone = $search.ActiveTopology.Clone()
$searchServiceInstance = Get-SPEnterpriseSearchServiceInstance
New-SPEnterpriseSearchAdminComponent -SearchTopology $clone -SearchServiceInstance $searchServiceInstance
New-SPEnterpriseSearchContentProcessingComponent -SearchTopology $clone -SearchServiceInstance $searchServiceInstance
New-SPEnterpriseSearchAnalyticsProcessingComponent -SearchTopology $clone -SearchServiceInstance $searchServiceInstance
New-SPEnterpriseSearchCrawlComponent -SearchTopology $clone -SearchServiceInstance $searchServiceInstance
New-SPEnterpriseSearchIndexComponent -SearchTopology $clone -SearchServiceInstance $searchServiceInstance
New-SPEnterpriseSearchQueryProcessingComponent -SearchTopology $clone -SearchServiceInstance $searchServiceInstance
$clone.Activate()
Write-Host "Search complete!"
Word Automation Services
Word Automation Services Service 응용 프로그램은 분할 모드를 지원합니다. 프록시를 만들기 위한 cmdlet은 없습니다.
다음 Microsoft PowerShell 스크립트는 분할 모드에서 Word Automation Services Service 응용 프로그램을 만드는 방법을 표시합니다.
$proxyGroupName = "Hosting Proxy Group"
$saAppPoolName = "SharePoint Web Services Default"
$wasName = "Word Automation Service"
$wasDBName = "HostingFarm_WordAutomation"
# Grab the Service Application Pool and Proxy Group
Write-Host "Getting Service Application Pool and Proxy Group..."
$saAppPool = $saAppPoolName | Get-SPServiceApplicationPool
$proxyGroup = Get-SPServiceApplicationProxyGroup $proxyGroupName
# Start Word Automation Service Instance, create the Service Application and Proxy, add to Proxy Group
Write-Host "Creating $wasName Application & Proxy..."
Get-SPServiceInstance | ? { $_.TypeName -eq "Word Automation Services" } | Start-SPServiceInstance
$was = New-SPWordConversionServiceApplication -PartitionMode -Name $wasName -ApplicationPool $saAppPool -DatabaseName $wasDBName
# we cannot change the name of this proxy as there is no New-SPWordConversionServiceApplicationProxy
$proxy = Get-SPServiceApplicationProxy | ? { $_.Name -eq $wasName }
$proxyGroup | Add-SPServiceApplicationProxyGroupMember -Member $proxy
User Profile Service
분할 모드에서 프로비저닝할 때 필요에 따라 PowerShell을 사용하여 User Profile Service를 만들 경우 Windows PowerShell을 SharePoint 팜 계정으로 실행하지 않을 때 문제가 나타납니다. 이 문제를 해결하고 사용자 프로필 동기화 서비스를 성공적으로 시작하기 위해 Start-Process cmdlet을 사용하고 스크립트 실행을 팜 계정으로 시뮬레이트합니다.
두 개의 스크립트가 필요합니다. 첫 번째 스크립트는 UPA를 만들고 두 번째 스크립트는 첫 번째 스크립트를 호출합니다.
다음 Microsoft PowerShell 스크립트는 파티션 모드에서 사용자 프로필 서비스 애플리케이션을 만들고 사용자 지정 서비스 프록시 그룹에 추가하는 방법을 보여줍니다.
참고
이 스크립트를 직접 실행하면 안 되며, 그렇지 않으면 사용자 프로필 동기화 서비스 instance 시작할 수 없습니다. 이 스크립트는 로컬로 저장해야 하며 해당 위치는 적어 두어야 합니다.
<#
partitionedUPAcreation.ps1
External dependency to create UPA under farm account creds
#>
asnp Microsoft.SharePoint.PowerShell
$proxyGroupName = "Hosting Proxy Group"
$saAppPoolName = "SharePoint Web Services Default"
$upaName = "User Profile Service"
$upaProfileDBName = "HostingFarm_UserProfile_Profile"
$upaSocialDBName = "HostingFarm_UserProfile_Social"
$upaSyncDBName = "HostingFarm_UserProfile_Sync"
# Grab the Proxy Group
$proxyGroup = Get-SPServiceApplicationProxyGroup -Identity $mtProxyName
# Grab the Appplication Pool for Service Application Endpoint
$saAppPool = Get-SPServiceApplicationPool $saAppPoolName
<# Creates UPA Service Application & Proxy, and User Profile Service Instance
If omitted, -ProfileSyncDBServer, -SocialDBServer & -ProfileDBServer are the SharePoint Default DB Server
If omitted, -SyncInstanceMachine is the local machine
#>
Write-Host "Creating $upaName Application & Proxy..."
$upa = New-SPProfileServiceApplication -PartitionMode -Name $upaName -ApplicationPool $saAppPoolName -ProfileDBName $upaProfileDBName -SocialDBName $upaSocialDBName -ProfileSyncDBName $upaSyncDBName
$proxy = New-SPProfileServiceApplicationProxy -PartitionMode -Name "$upaName Proxy" -ServiceApplication $upa
$proxyGroup | Add-SPServiceApplicationProxyGroupMember -Member $proxy
# Check it worked
Get-SPServiceApplication | ? {$_.Name -eq $upaName}
아래의 두 번째 스크립트는 UPA 만들기 스크립트를 호출한 후 필요한 서비스 인스턴스를 시작하는 데 필요한 작업을 수행합니다. UPA 만들기 스크립트의 위치는 $upaScriptFile 변수에 업로드해야 합니다. 또한 일부 필수 권한은 UPA에 설정됩니다.
$proxyGroupName = "Hosting Proxy Group"
$saAppPoolName = "SharePoint Web Services Default"
$upaScriptfile = "c:\partitionedUPAcreation.ps1"
$upaName = "User Profile Service"
$user = "FABRIKAM\Administrator"
$serviceUser = "FABRIKAM\spservices"
# Grab the Service Application Pool and Proxy Group
Write-Host "Getting Service Application Pool and Proxy Group..."
$saAppPool = $saAppPoolName | Get-SPServiceApplicationPool
$proxyGroup = Get-SPServiceApplicationProxyGroup $proxyGroupName
# Start User Profile Service Instance
Write-Host "Starting User Profile Service Instance..."
Get-SPServiceInstance | ? { $_.TypeName -eq "User Profile Service" } | Start-SPServiceInstance
Write-Host "Restarting SPTimerV4..."
Restart-Service SPTimerV4
# Grab the Farm Account credentials
Write-Host "Please enter the Farm Account Password:"
$farmAcct = (Get-SPFarm).DefaultServiceAccount
$cred = Get-Credential $farmAcct.Name
# Create a new process to initiate User Profile Service Application creation under UAC elevation
Write-Host "Creating new process for UPA creation..."
Start-Process $PSHOME\powershell.exe -Credential $cred -ArgumentList "-Command Start-Process $PSHOME\powershell.exe -ArgumentList `"'$upaScriptfile'`" -Verb Runas" -Wait
Get-Date
Write-Host "UPA Created!"
# Start the User Profile Synchronization Service Instance
Write-Host "Starting the UPS Service Instance..."
Get-Date
$upa = Get-SPServiceApplication | where-object {$_.Name -eq $upaName}
$upsInstanceName = "User Profile Synchronization Service"
[String]$password = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($cred.Password));
Get-SPServiceInstance | where-object {$_.TypeName -eq $upsInstanceName} | % {
$_.Status = [Microsoft.SharePoint.Administration.SPObjectStatus]::Provisioning
$_.IsProvisioned = $false
$_.UserProfileApplicationGuid = $upa.Id
$_.Update()
$upa.SetSynchronizationMachine($_.Server.Address, $_.Id, $cred.UserName, $password) # this can cause update conflicts
Start-SPServiceInstance $_
}
Write-Host "Waiting on $upsInstanceName to provision..."
Write-Host "Baseline time is 130 seconds"
[int]$time = 0
$ups = Get-SPServiceInstance | where-object {$_.TypeName -eq $upsInstanceName}
while(-not ($ups.Status -eq "Online")){
sleep 10;
Write-Host "Still waiting... ($time seconds elapsed)"
$ups = Get-SPServiceInstance | where-object {$_.TypeName -eq $upsInstanceName}
$time = $time + 10
}
Write-Host "$upsInstanceName provisioned, it took $time seconds."
Get-Date
Write-Host "UPS Service Instance Started"
# UPA Settings and Permissions, do this after UPS SI Started and Get it again to prevent update conflicts
Write-Host "Configuring NETBios Domain Names and UPA Permissions..."
$upa = Get-SPServiceApplication | where-object {$_.Name -eq $upaName}
$upa.NetBIOSDomainNamesEnabled=1
$upa.Update()
function Grant-ServiceAppPermission($app, $user, $perm, $admin) {
$sec = $app | Get-SPServiceApplicationSecurity -Admin:$admin
$claim = New-SPClaimsPrincipal -Identity $user -IdentityType WindowsSamAccountName
$sec | Grant-SPObjectSecurity -Principal $claim -Rights $perm
$app | Set-SPServiceApplicationSecurity -ObjectSecurity $sec -Admin:$admin
}
Grant-ServiceAppPermission $upa $user "Full Control" $false
Grant-ServiceAppPermission $upa $serviceUser "Full Control" $false
정보 권한 관리 구성
다중 테넌시에 대한 정보 권한 관리 지원은 SharePoint 중앙 관리 웹 사이트 또는 업데이트된 Microsoft PowerShell cmdlet을 사용하여 설정할 수 있습니다.
중앙 관리을 사용하여 정보 권한 관리 설정
이 절차를 수행하는 사용자 계정이 중앙 관리를 실행하는 컴퓨터에서 Farm Administrators SharePoint 그룹 및 Administrators 그룹의 구성원인지 확인합니다.
중앙 관리 웹 사이트에서 보안으로 이동합니다.
보안 페이지에서 정보 권한 관리 구성으로 이동합니다.
정보 권한 관리 페이지에서 이 RMS 서버 사용을 선택합니다.
테넌트가 테넌트 수준 IRM 설정을 구성하도록 허용하려면 다중 테넌트 구성에서 이 확인란을 선택합니다. 확인란에 확인 표시가 있는지 확인합니다.
Microsoft PowerShell을 사용하여 정보 권한 관리 설정
- 다음 멤버 자격이 있는지 확인합니다.
SQL Server 인스턴스에 대한 securityadmin 고정 서버 역할
업데이트하려는 모든 데이터베이스에 대한 db_owner 고정 데이터베이스 역할
PowerShell cmdlet을 실행 중인 서버의 관리자 그룹입니다.
관리자는 Add-SPShellAdmin cmdlet을 사용하여 SharePoint Server 2013 cmdlet 사용 권한을 부여할 수 있습니다.
참고
권한이 없는 경우 설치 관리자 또는 SQL Server 관리자에게 문의하여 권한을 요청하세요. PowerShell 권한에 대한 자세한 내용은 Add-SPShellAdmin을 참조하세요.
SharePoint 관리 셸을 엽니다.
PowerShell 명령 프롬프트에 다음 명령을 입력합니다.
Set-SPIRMSettings -IrmEnabled -UseActiveDirectoryDiscovery -SubscriptionScopeSettingsEnabled
테넌트 관리 사이트 내에는 IRM에 대한 기본 제공 구성 옵션이 없습니다. 이 구성을 적용하려면 다음 스크립트와 같이 Set-SPSiteSubscriptionIRMConfig cmdlet을 사용합니다.
$subscription=Get-SPSiteSubscription "http://www.contoso.com"
Set-SPSiteSubscriptionIRMConfig -identity $subscription -IrmEnabled -CertificateServerUrl "http://rms.contoso.com"
이러한 구성은 테넌트 프로비저닝의 일부로 수행됩니다.
테넌트 프로비저닝 및 관리
이 섹션에서는 테넌트를 프로비전하고 다중 테넌트 환경을 사용자 지정하기 위한 프로세스 및 접근 방식을 설명합니다.
테넌트 프로비저닝
테넌트를 만들려면 표의 단계를 따르세요.
Tasks |
Steps |
---|---|
1. 사이트 구독을 만듭니다. |
Microsoft PowerShell 명령 프롬프트에 다음 구문을 입력합니다.$sub = New-SPSiteSubscription |
2. 사이트 구독에 기능 팩을 할당하고 사용자 선택을 사용하여 사용자 지정 OU를 구성합니다. |
Microsoft PowerShell 명령 프롬프트에 다음 구문을 입력합니다.Set-SPSiteSubscriptionConfig -id $sub -FeaturePack $customerFeatures -UserAccountDirectoryPath "OU=$customerName,OU=Customers,DC=contoso,DC=com" |
3. 사이트 구독에 할당할 하나 이상의 사이트 모음을 만듭니다. |
Microsoft PowerShell 명령 프롬프트에 다음 구문을 입력합니다.Write-Host "Creating Member Site..." New-SPSite -url "http://$customerName.contoso.com" -SiteSubscription $sub -HostHeaderWebApplication $webApp -owneralias $customerTenantAdmin -owneremail $customerTenantAdminEmail -template sts#0 -ContentDatabase $contentDBName``````# create Tenant Admin site Write-Host "Creating Tenant Admin site..." New-SPSite -url "http://$customerName.contoso.com/admin" -SiteSubscription $sub -HostHeaderWebApplication $webApp -owneralias $customerTenantAdmin -owneremail $customerTenantAdminEmail -template tenantadmin#0 -AdministrationSiteType TenantAdministration -ContentDatabase $contentDBName``````Write-Host "Creating My Site Host..." New-SPSite -url "http://$customerName.contoso.com/mysites" -SiteSubscription $sub -HostHeaderWebApplication $webApp -owneralias $customerTenantAdmin -owneremail $customerTenantAdminEmail -template SPSMSITEHOST#0 -ContentDatabase $contentDBName |
다음 PowerShell 스크립트는 TENANTADMIN#0 서식 파일을 사용하는 테넌트 관리 사이트를 만드는 방법을 설명합니다. 테넌트가 엔터프라이즈 기능 팩을 사용하도록 구성된 경우 Microsoft PowerShell 스크립트는 더 많은 작업을 수행합니다. 즉, 내 사이트 컬렉션을 만듭니다.
Add-PSSnapin Microsoft.SharePoint.Powershell -EA 0
# farm details (update to reflect your environment)
$hostingMainURL = "http://$ENV:COMPUTERNAME"
$upaProxyName = "Tenant User Profile Service Proxy"
$mmsProxyName = "Tenant Managed Metadata Service"
$contentDBName = "HostingFarm_Content_Hosting"
$farm = Get-SPFarm
$foundationFeaturePack = $farm.Properties.Foundation_FeaturePack
#$standardFeaturePack = $farm.Properties.Standard_FeaturePack
#$enterpriseFeaturePack = $farm.Properties.Enterprise_FeaturePack
# tenant-specific information (vary by tenant)
$customerName = "Customer A"
$customerTenantAdmin = "CONTOSO\customerA-Admin"
$customerTenantAdminEmail = "admin@customerA.com"
$customerFeatures = $enterpriseFeatures
# Note:
# this script assumes that the Content Web App and necessary Managed Paths exist.
# grab the web app
$webApp = Get-SPWebApplication $hostingMainURL
# create new Site Subscription
Write-Host "Creating Site Subscription..."
$sub = New-SPSiteSubscription
# assign feature pack and set the OU to be used by the People
Write-Host "Assigning Feature Pack and configuring People Picker..."
Set-SPSiteSubscriptionConfig -id $sub -FeaturePack $customerFeatures -UserAccountDirectoryPath "OU=$customerName,OU=Customers,DC=contoso,DC=com"
# create the "main" member site (we need a site at the root to use Host Headers and Managed Paths in the following cmdlets)
Write-Host "Creating Member Site..."
New-SPSite -url "http://$customerName.contoso.com" -SiteSubscription $sub -HostHeaderWebApplication $webApp -owneralias $customerTenantAdmin -owneremail $customerTenantAdminEmail -template sts#0 -ContentDatabase $contentDBName
# create Tenant Admin site
Write-Host "Creating Tenant Admin site..."
New-SPSite -url "http://$customerName.contoso.com/admin" -SiteSubscription $sub -HostHeaderWebApplication $webApp -owneralias $customerTenantAdmin -owneremail $customerTenantAdminEmail -template tenantadmin#0 -AdministrationSiteType TenantAdministration -ContentDatabase $contentDBName
# everything else needs standard
if (!($customerFeatures -eq $foundationFeatures))
{
Write-Host "Tenant has SharePoint Server features"
# create a mysite host
Write-Host "Creating My Site Host..."
New-SPSite -url "http://$customerName.contoso.com/mysites" -SiteSubscription $sub -HostHeaderWebApplication $webApp -owneralias $customerTenantAdmin -owneremail $customerTenantAdminEmail -template SPSMSITEHOST#0 -ContentDatabase $contentDBName
# configure the MySites host, MySites path, Naming Resolution and Profile Sync OU for the Subscription
Write-Host "Configuring Tenant Profile Config..."
$upaProxy = Get-SPServiceApplicationProxy | where-object {$_.DisplayName -eq $upaProxyName}
Add-SPSiteSubscriptionProfileConfig -id $sub -SynchronizationOU $customerName -MySiteHostLocation "http://$customerName.contoso.com/mysites" -MySiteManagedPath "/mysites/personal" -SiteNamingConflictResolution "None" -ProfileServiceApplicationProxy $upaProxy
# create a site for the Content Type Gallery
Write-Host "Creating Content Type Gallery..."
New-SPSite -url "http://$customerName.contoso.com/cthub" -SiteSubscription $sub -HostHeaderWebApplication $webApp -owneralias $customerTenantAdmin -owneremail $customerTenantAdminEmail -template sts#0 -ContentDatabase $contentDBName
# configure the Content Type Gallery for the Subscription
Write-Host "Configuring Tenant Content Type Gallery..."
$mmsProxy = Get-SPServiceApplicationProxy | where-object {$_.DisplayName -eq $mmsProxyName}
# ContentTypeHub feature activation may fail - if so activate manually
Set-SPSiteSubscriptionMetadataConfig -identity $sub -serviceProxy $mmsProxy -huburi "http://$customerName.contoso.com/cthub" -SyndicationErrorReportEnabled
Write-Host "Activating Content Type Hub..."
Enable-SPFeature -Identity ContentTypeHub -url "http://$customerName.contoso.com/cthub"
}
Write-Host "Tenant Provisioning Script Completed!"
워크플로, 앱 및 IRM과 같은 다른 테넌트 구성을 포함하도록 이 방법을 추가로 사용자 지정할 수 있습니다. 이러한 스크립트는 함수 또는 사용자 지정 cmdlet으로 캡슐화되어 향후 테넌트에서 반복적으로 실행할 수 있습니다.
Workflow Service
SharePoint Server 2013은 완전한 선언적 작성, REST 및 Service Bus 메시징, 탄력적 확장성 및 관리되는 서비스 안정성과 같은 엔터프라이즈 기능을 포함하여 워크플로의 주요 발전을 제공합니다. SharePoint 2013은 .NET Framework 4.5의 Windows Workflow Foundation 구성 요소를 기반으로 하는 새 워크플로 서비스를 사용할 수 있습니다. 새 서비스는 워크플로 관리자 호출되며 엔터프라이즈에서 중심 역할을 하도록 설계되었습니다.
SharePoint 2013 워크플로 플랫폼은 새 Workflow Manager Service를 다운로드하여 설치한 후에 SharePoint Server 2013 팜과 통신하도록 구성한 후에만 사용할 수 있습니다. SharePoint 2013용 워크플로 관리자 서비스를 설치하고 구성하는 방법에 대한 자세한 내용은 SharePoint Server에 대한 워크플로 설치 및 구성을 참조하세요.
Workflow Service를 구성하려면 Register-SPWorkflowService cmdlet을 사용하여 팜을 분할 모드에서 워크플로 서비스 관리자에 등록합니다. 이 팜 등록을 수행하려면 SPSite 매개 변수를 사용하여 팜에서 기존 테넌트 사이트 모음의 URL을 전달하고 ScopeName 매개 변수를 사용하여 팜에 대해 명명된 워크플로 scope 정의합니다.
다음 Windows PowerShell 스크립트는 분할 모드에서 워크플로 서비스 관리자에 SharePoint 팜을 등록하는 방법을 보여줍니다.
Add-PSSnapin microsoft.sharepoint.powershell -ea SilentlyContinue
# Register the Farm with the Workflow Service and create a workflow scope
# Note: any tenant site will suffice
Register-SPWorkflowService -SPSite "http://tenant.contoso.com" -WorkflowHostUri "http://WFSvr01:12291" -PartitionMode -AllowOAuthHttp -Force -ScopeName "HostingFarm"
Write-Host "Farm Workflow Registration Script Completed!"
SharePoint 워크플로에 대해 특정 테넌트를 사용하도록 설정하려면 워크플로 서비스 프록시를 구성해야 합니다. 이 구성을 수행하면서 테넌트 루트 사이트 모음에 대한 참조를 가져와서 워크플로 서비스 프록시에 등록합니다.
다음 PowerShell 스크립트는 SharePoint 워크플로에 대해 테넌트를 사용하도록 설정하는 방법을 보여줍니다.
Add-PSSnapin microsoft.sharepoint.powershell -ea SilentlyContinue
#Get the Workflow Service Application Proxy
$wfProxy = Get-SPWorkflowServiceApplicationProxy
#Create a credential object
$user = New-Object System.Net.NetworkCredential ("domain\Admin", "Password")
#Get the SPSite object of the root site collection of the tenant
$site = Get-SPSite http://tenant.domain.com
#Set the Workflow address for the tenant site (reference our workflow scope)
$wfProxy.SetWorkflowServiceAddress($site,"http://WFSvr01:12291/HostingFarm")
#Register the proxy with tenant site collection
$wfProxy.Register($site,$user)
#Connect the tenant site collection to the proxy
$wfProxy.Connect($site)
Write-Host "Tenant Workflow Registration Script Completed!"
그런 다음, 워크플로 Service Manager 사용하도록 테넌트가 구성되면 SharePoint Designer 사용하여 다음 다이어그램과 같이 SharePoint 2013 워크플로 옵션을 사용하여 워크플로를 만들 수 있습니다.
Tenant Administration 사이트 서식 파일 확장
링크 추가 또는 제거
사용자 지정 작업 정의 스키마를 사용하여 테넌트 관리 사이트의 기본 페이지에서 링크를 추가 및 제거합니다.
다음 기능 정의에서는 새 그룹, 여러 링크를 추가하는 방법 및 사이트 모음 관리 페이지에 대한 링크를 제거하는 방법을 보여 줍니다.
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<CustomActionGroup
Id="TenantAdmin_HostingUserAccounts"
Location="Microsoft.SharePoint.TenantAdministration"
Title="User Accounts"
Sequence="90"
ImageUrl="_layouts/images/SiteSettings_UsersAndPermissions_48x48.png">
<UrlAction
Url="" />
</CustomActionGroup>
<CustomAction
Id="TenantAdmin_HostingUserAccounts_AddUser"
GroupId="TenantAdmin_HostingUserAccounts"
Location="Microsoft.SharePoint.TenantAdministration"
Sequence="10"
Title="Create User">
<UrlAction
Url="_layouts/UserAccountsWebParts/UA_AddUsers.aspx" />
</CustomAction>
<CustomAction
Id="TenantAdmin_HostingUserAccounts_ManageUsers"
GroupId="TenantAdmin_HostingUserAccounts"
Location="Microsoft.SharePoint.TenantAdministration"
Sequence="30"
Title="Manage Users">
<UrlAction
Url="_layouts/UserAccountsWebParts/UA_ManageUsers.aspx" />
</CustomAction>
<HideCustomAction
GroupId = "TenantAdmin_Sites"
HideActionId = "TenantAdmin_Sites_ManageSiteCollections"
Location="Microsoft.SharePoint.TenantAdministration" />
</Elements>
기본 제공 링크의 기본 ID와 같은 사용자 지정 작업에 대한 자세한 내용은 사용자 지정 작업 정의 스키마를 참조하세요.
리본 사용자 지정
SharePoint Server 2013의 서버 리본은 서버 리본 XML 및 ECMAScript(JavaScript, JScript)를 사용하여 사용자 지정할 수 있습니다. 이 XML은 리본의 컨트롤을 정의합니다. ECMAScript는 페이지 또는 페이지의 개체에 대해 작업을 수행합니다. SharePoint FoundationECMAScript 개체 모델에 있는 ECMAScript 또는 기본 제공 ECMAScript 함수를 사용할 수 있습니다. 페이지에 자체 ECMAScript를 추가하고 이를 사용하여 리본과 상호 작용할 수도 있습니다.
서버 리본을 사용자 지정할 때 컨트롤, 그룹 및 탭을 추가, 대체 및 제거할 수 있습니다. 리본 사용자 지정은 기능의 서버 리본 XML을 사용하여 정의하고 솔루션 패키지(.wsp 파일)에 배포할 수 있습니다. 리본 사용자 지정 범위는 RegistrationId 및 RegistrationType 특성을 사용하여 특정 목록 유형으로 지정할 수 있습니다. Feature.xml 파일의 Scope 특성을 사용하여 사이트 또는 특정 웹 응용 프로그램으로 사용자 지정 범위를 지정할 수도 있습니다.
다음 XML은 사이트 모음 관리 페이지에서 디스크 할당량 단추의 기능을 대체하는 방법을 보여줍니다.
<Elements xmlns="http://schemas.microsoft.com/sharepoint/" >
<CustomAction Id="Ribbon.Library.Actions.ReplacementButton"
Location="CommandUI.Ribbon"
Title="Replace a Ribbon Button">
<CommandUIExtension>
<CommandUIDefinitions>
<CommandUIDefinition
Location="Ribbon.SiteCollections.Manage.DiskQuota">
<Button Id="Ribbon.SiteCollections.Manage.DiskQuota.Replacement"
Command="ReplacementButtonCommand"
Image32by32="/_layouts/1033/images/formatmap32x32.png?vk=4536"
Image32by32Left="-256"
Image32by32Top="-224"
LabelText="Disk Quota"
TemplateAlias="o1" />
</CommandUIDefinition>
</CommandUIDefinitions>
<CommandUIHandlers>
<CommandUIHandler
Command="ReplacementButtonCommand"
CommandAction="javascript:
function demoCallback(dialogResult, returnValue)
{
}
var options = {
url: 'HostingTenantAdmin/DiskQuota.aspx',
tite: 'Manage Disk Quota',
allowMaximize: true,
showClose: true,
width: 610,
height: 450,
dialogReturnValueCallback: demoCallback };
SP.UI.ModalDialog.showModalDialog(options);" />
</CommandUIHandlers>
</CommandUIExtension>
</CustomAction>
</Elements>
서버 리본을 사용자 지정하는 방법에 대한 자세한 내용은 서버 리본 사용자 지정을 참조하세요.
사용자 지정 속성을 사용하여 사이트 구독 확장
Site Subscription Service 응용 프로그램은 관리 사용자 지정 속성과 테넌트 사용자 지정 속성을 모두 저장할 수 있습니다. 지원되는 속성 유형에는 다음 값이 포함됩니다.
string
int
long
bool
Guid
DateTime
You can use custom properties to extend tenant management functionality, such as tenant quota management.
다음 PowerShell 스크립트는 사용자 지정 속성 액세스 방법을 보여줍니다.
Add-PSSnapin microsoft.sharepoint.powershell -ea SilentlyContinue
#-----------------------------------------------------
# Load Assemblies
#-----------------------------------------------------
[void] [Reflection.Assembly]::Load("Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c")
#-----------------------------------------------------
# Functions
#-----------------------------------------------------
function GetSPSiteSubscription([string]$url)
{
[Microsoft.SharePoint.SPSiteSubscription]$sub = Get-SPSiteSubscription $url;
return $sub;
}
function GetSiteSubAdminProperties([string]$url)
{
[Microsoft.SharePoint.SPSiteSubscription]$sub = GetSPSiteSubscription -url $url;
[Microsoft.SharePoint.SPSiteSubscriptionSettingsManager] $manager = [Microsoft.SharePoint.SPSiteSubscriptionSettingsManager]::Local;
if ($manager -eq $null)
{
throw("Bad Manager!");
}
[Microsoft.SharePoint.SPSiteSubscriptionPropertyCollection]$props = $manager.GetAdminProperties($sub);
if ($props -eq $null)
{
throw("Bad Props!");
}
return $props;
}
function AddOrSetSiteSubAdminProperty([string]$url, [string]$theKey, $theValue)
{
[Microsoft.SharePoint.SPSiteSubscription]$sub = GetSPSiteSubscription -url $url;
[Microsoft.SharePoint.SPSiteSubscriptionSettingsManager] $manager = [Microsoft.SharePoint.SPSiteSubscriptionSettingsManager]::Local;
if ($manager -eq $null)
{
throw("Bad Manager!");
}
[Microsoft.SharePoint.SPSiteSubscriptionPropertyCollection]$props = $manager.GetAdminProperties($sub);
if ($props -eq $null)
{
throw("Bad Props!");
}
if ($props.ContainsKey($theKey) -eq $true)
{
$props.SetValue($theKey, $theValue);
}
else
{
$props.Add($theKey, $theValue);
}
$props.Update();
}
function GetSiteSubAdminProperty([string]$url, [string]$theKey)
{
[Microsoft.SharePoint.SPSiteSubscription]$sub = GetSPSiteSubscription -url $url;
[Microsoft.SharePoint.SPSiteSubscriptionSettingsManager] $manager = [Microsoft.SharePoint.SPSiteSubscriptionSettingsManager]::Local;
if ($manager -eq $null)
{
throw("Bad Manager!");
}
[Microsoft.SharePoint.SPSiteSubscriptionPropertyCollection]$props = $manager.GetAdminProperties($sub);
if ($props -eq $null)
{
throw("Bad Props!");
}
$theValue = "";
if ($props.ContainsKey($theKey) -eq $true)
{
foreach ($prop in $props)
{
if ($prop.Key -eq $theKey)
{
$theValue = $prop.Value;
break;
}
}
return $theValue;
}
else
{
return $null;
}
}
function RemoveSiteSubAdminProperty([string]$url, [string]$theKey)
{
[Microsoft.SharePoint.SPSiteSubscription]$sub = GetSPSiteSubscription -url $url;
[Microsoft.SharePoint.SPSiteSubscriptionSettingsManager] $manager = [Microsoft.SharePoint.SPSiteSubscriptionSettingsManager]::Local;
if ($manager -eq $null)
{
throw("Bad Manager!");
}
[Microsoft.SharePoint.SPSiteSubscriptionPropertyCollection]$props = $manager.GetAdminProperties($sub);
if ($props -eq $null)
{
throw("Bad Props!");
}
if ($props.ContainsKey($theKey) -eq $true)
{
$props.Remove($theKey);
$props.Update();
}
}
function GetSiteSubTenantProperties($url)
{
[Microsoft.SharePoint.SPSiteSubscription]$sub = GetSPSiteSubscription -url $url;
[Microsoft.SharePoint.SPSiteSubscriptionSettingsManager] $manager = [Microsoft.SharePoint.SPSiteSubscriptionSettingsManager]::Local;
if ($manager -eq $null)
{
throw("Bad Manager!");
}
[Microsoft.SharePoint.SPSiteSubscriptionPropertyCollection]$props = $manager.GetProperties($sub);
if ($props -eq $null)
{
throw("Bad Props!");
}
return $props;
}
function AddOrSetSiteSubTenantProperty([string]$url, [string]$theKey, $theValue)
{
[Microsoft.SharePoint.SPSiteSubscription]$sub = GetSPSiteSubscription -url $url;
[Microsoft.SharePoint.SPSiteSubscriptionSettingsManager] $manager = [Microsoft.SharePoint.SPSiteSubscriptionSettingsManager]::Local;
if ($manager -eq $null)
{
throw("Bad Manager!");
}
[Microsoft.SharePoint.SPSiteSubscriptionPropertyCollection]$props = $manager.GetProperties($sub);
if ($props -eq $null)
{
throw("Bad Props!");
}
if ($props.ContainsKey($theKey) -eq $true)
{
$props.SetValue($theKey, $theValue);
}
else
{
$props.Add($theKey, $theValue);
}
$props.Update();
}
function GetSiteSubTenantProperty([string]$url, [string]$theKey)
{
[Microsoft.SharePoint.SPSiteSubscription]$sub = GetSPSiteSubscription -url $url;
[Microsoft.SharePoint.SPSiteSubscriptionSettingsManager] $manager = [Microsoft.SharePoint.SPSiteSubscriptionSettingsManager]::Local;
if ($manager -eq $null)
{
throw("Bad Manager!");
}
[Microsoft.SharePoint.SPSiteSubscriptionPropertyCollection]$props = $manager.GetProperties($sub);
if ($props -eq $null)
{
throw("Bad Props!");
}
$theValue = "";
if ($props.ContainsKey($theKey) -eq $true)
{
foreach ($prop in $props)
{
if ($prop.Key -eq $theKey)
{
$theValue = $prop.Value;
break;
}
}
return $theValue;
}
else
{
return $null;
}
}
function RemoveSiteSubTenantProperty([string]$url, [string]$theKey)
{
[Microsoft.SharePoint.SPSiteSubscription]$sub = GetSPSiteSubscription -url $url;
[Microsoft.SharePoint.SPSiteSubscriptionSettingsManager] $manager = [Microsoft.SharePoint.SPSiteSubscriptionSettingsManager]::Local;
if ($manager -eq $null)
{
throw("Bad Manager!");
}
[Microsoft.SharePoint.SPSiteSubscriptionPropertyCollection]$props = $manager.GetProperties($sub);
if ($props -eq $null)
{
throw("Bad Props!");
}
if ($props.ContainsKey($theKey) -eq $true)
{
$props.Remove($theKey);
$props.Update();
}