SharePoint Server から Microsoft 365 の SharePoint へのサーバー間認証を構成する
適用対象:2016 2019 Subscription Edition SharePoint in Microsoft 365
この記事は、SharePoint ハイブリッド ソリューションを構成する手順のロードマップの一部です。 この記事にある手順を実行するときは、必ずロードマップに従っていることを確認してください。
注:
SharePoint ハイブリッド構成ウィザードを使用して、Microsoft 365 で SharePoint Server と SharePoint の間でサーバー間認証を確立することをお勧めします。 何らかの理由でハイブリッド構成ウィザードを使用できない場合は、この記事の手順に従ってサーバー間認証を有効にします。
Microsoft では、アクセス許可が可能な限りで少ないロールを使用することをお勧めします。 アクセス許可の低いアカウントを使用すると、組織のセキュリティが向上します。 グローバル管理者は高い特権を持つロールであり、既存のロールを使用できない場合の緊急時に限定する必要があります。
サーバー間認証を構成する
この記事では、SharePoint Server と Microsoft 365 の SharePoint を統合する SharePoint ハイブリッド環境展開プロセスについて説明します。
ヒント
信頼性の最も高い結果を得るために、この記事で示す順序で手順を実行してください。
Web アプリケーションの設定を確認する
SharePoint ハイブリッドでは、フェデレーション ユーザーは、NTLM による統合 Windows 認証を使用するように構成された SharePoint Server Web アプリケーションから Microsoft 365 の SharePoint に要求を送信できます。
たとえば、ソリューションで使用する社内の検索センター サイトが、NTLM による 統合 Windows 認証を使用するよう構成されていることを確認する必要があります。 構成されていない場合、NTLM による統合 Windows 認証を使用するように Web アプリケーションを再構成するか、この要件を満たす Web アプリケーションで検索センター サイトを使用する必要があります。 また、Microsoft 365 の SharePoint から検索結果が返されることを期待するユーザーがフェデレーション ユーザーであることを確認する必要もあります。
Web アプリケーションが要件を満たしていることを確認するには
この手順を実行するユーザー アカウントが Farm Admins SharePoint グループのメンバーであることを確認します。
サーバーの全体管理で [アプリケーション構成の管理] を選択し、[Web アプリケーションの管理] を選択します。
[名前] 列で、確認する Web アプリケーションを選択してから、リボンで [認証プロバイダー] を選択します。
[認証プロバイダー] ダイアログ ボックスの [ゾーン] 列で、検索センター サイトが関連付けられているゾーンを選択します。
[認証の編集] ダイアログ ボックスで、以下の図で示すように統合 Windows 認証および NTLM が選択されていることを確認します。
HTTP で OAuth を構成する (必要な場合)
既定では、SharePoint Server の OAuth には HTTPS が必要です。 SSL ではなく HTTP を使用するようプライマリ Web アプリケーションを構成する場合、 SharePoint Server ファームにある各 Web サーバーで HTTP での OAuth を有効にする必要があります。
注:
SSL を使用するようにプライマリ Web アプリケーションを構成している場合、この手順は必要ありません。
HTTP での OAuth を有効にするには、SharePoint Server ファーム内の各 Web サーバー上で、SharePoint 2016 管理シェル コマンド プロンプトからファーム管理者アカウントとして次のコマンドを実行します。
$serviceConfig = Get-SPSecurityTokenServiceConfig
$serviceConfig.AllowOAuthOverHttp = $true
$serviceConfig.Update()
HTTP での OAuth をテスト用に有効にした状態から、SSL を使用するように環境を再構成する場合は、 SharePoint Server ファーム内の各 Web サーバー上で、SharePoint 2016 管理シェル コマンド プロンプトからファーム管理者アカウントとして次のコマンドを実行することにより、HTTP での OAuth を無効にできます。
$serviceConfig = Get-SPSecurityTokenServiceConfig
$serviceConfig.AllowOAuthOverHttp = $false
$serviceConfig.Update()
社内の SharePoint Server と Microsoft 365 の SharePoint 間のサーバー間認証を構成する
このセクションは、次の間でサーバー間認証を設定するのに役立ちます。
SharePoint Server
Microsoft 365 の SharePoint
Microsoft Entra ID
ハイブリッド環境用にサーバー間認証を設定すると、Microsoft Entra ID を信頼されたトークン署名サービスとして使用する、オンプレミスの SharePoint ファームと Microsoft 365 テナントの SharePoint との間に信頼関係が作成されます。 必要な PowerShell モジュールとスナップインを追加することで、このプロセスはオンプレミスの SharePoint Web サーバー上の 1 つの PowerShell ウィンドウで行うことができます。
ヒント
実行した手順、実行した PowerShell コマンドレット、発生したエラーの記録を保持することをお勧めします。 完了したら、ウィンドウを閉じる前に、PowerShell バッファーのすべてのコンテンツをキャプチャしてください。 これで、実行した手順の履歴がわかり、トラブルシューティングを行う必要がある場合や、プロセスをほかの人に説明するときなどに役立ちます。 これは、設定が複数の段階で起こった場合に、メモリをリフレッシュするためにも役立つことがあります。
以下は、このセクションで完了する必要がある手順の概要です。
SharePoint Server ファームの Web サーバーにオンライン サービス管理ツールをインストールします。
サーバー間認証を構成します。
後の手順で使用する変数を設定します。
組み込みの SharePoint Server STS 証明書を Microsoft 365 の SharePoint にアップロードします。
サービス プリンシパル名 (SPN) を Azure に追加します。
社内の SharePoint Server に Microsoft 365 の SharePoint アプリケーションのプリンシパル オブジェクト ID を登録します。
社内の SharePoint Server ファームと Microsoft 365 の SharePoint 間の共通の認証領域を構成します。
オンプレミスで Microsoft Entra アプリケーション プロキシを構成します。
オンライン サービス管理ツールをインストールして、Windows PowerShell ウィンドウを構成する
続行するには、社内の SharePoint Server Web サーバーにこれらのツールをインストールする必要があります。
Microsoft Graph PowerShell
Microsoft 365 の SharePoint 管理シェル
これは、SharePoint ファーム内の Web サーバーで最も簡単に実行できます。これは、SharePoint Server がインストールされていないサーバーよりも、Web サーバーに Microsoft.SharePoint.PowerShell スナップインを読み込む方が簡単であるためです。
SharePoint Server、Microsoft 365 の SharePoint、および Microsoft Entra ID への認証には、異なるユーザー アカウントが必要です。 使用するアカウントを特定する方法については、「ハイブリッドの構成とテストに必要なアカウント」を参照してください。
注:
このセクションの手順を簡単に完了するために、SharePoint Server Web サーバーで PowerShell コマンド プロンプト ウィンドウを開き、SharePoint Server、Microsoft 365 の SharePoint、Microsoft Entra ID に接続できるモジュールとスナップインを追加します。 (この記事の後半でこれを行う方法の詳細な手順について説明します)。その後、このウィンドウを開いたままにして、この記事の残りの PowerShell 手順をすべて使用します。
オンライン サービス管理ツールをインストールして PowerShell ウィンドウを構成するには、以下の手順を実行します。
Microsoft 365 の SharePoint 管理シェルをインストールします:
Microsoft 365 の SharePoint 管理シェル (64 ビット版)
詳細については、「Microsoft 365 の SharePoint 管理シェルの概要」を参照してください。
PowerShell のウィンドウを開きます。
バッファーが一杯になってコマンド履歴を失うことがないように、PowerShell ウィンドウのバッファー サイズを増やします:
PowerShell ウィンドウの左上隅を選択し、[プロパティ] を選択します。
[PowerShell プロパティ] ウィンドウで、[レイアウト] タブを選択します。
[画面バッファのサイズ] で、[高さ] フィールドを「9999」に設定し、[OK] を選択します。
この手順では、PowerShell セッションで使用できるように、ダウンロードしたモジュールを読み込みます。 次のコマンドを PowerShell セッションにコピーして、 Enter キーを押します。
Add-PSSnapin Microsoft.SharePoint.PowerShell Import-Module Microsoft.PowerShell.Utility Import-Module Microsoft.Graph
構成手順のいずれかを後でもう一度実行する必要が生じた場合は、これらのコマンドをもう一度実行して、PowerShell で必要なモジュールとスナップインを読み込んでください。
PowerShell コマンド プロンプトから次のコマンドを入力して、Microsoft 365 の SharePoint にサインインします。
Connect-MgGraph -Scopes "Group.ReadWrite.All","RoleManagement.ReadWrite.Directory","Organization.ReadWrite.All"
サインインするように要求されます。 Microsoft 365 グローバル管理者アカウントを使用してサインインする必要があります。 Microsoft Graph に接続する他の方法を調べることができます。
この記事のすべての手順を完了するまで、PowerShell ウィンドウを開いたままにしておきます。 これは、以下のセクションにあるさまざまな手順で必要となります。
サーバー間 (S2S) 認証を構成する
Microsoft 365 で Microsoft Entra ID と SharePoint をリモートで管理できるようにするためのツールをインストールしたら、サーバー間認証を設定する準備ができました。
作成する変数について
このセクションでは、次の手順で設定する変数について説明します。 これらの変数には、残りの構成手順の多くで使用する重要な情報が含まれています。
変数 | 注釈 |
---|---|
$spcn | パブリック ドメインのルート ドメイン名。 この値は URL の形式にしないでください。これは ドメイン名のみで、 プロトコルは必要ありません。 たとえば、 adventureworks.com など。 |
$spsite | 社内のプライマリ Web アプリケーションの内部 URL (例: http://sharepoint 、 https://sharepoint.adventureworks.com など)。 この値は、適切なプロトコルを使用した完全な URL です ( http: // または https:// )。 これは、ハイブリッド機能に使用している Web アプリケーションの内部 URL です。 たとえば、http://sharepoint or https://sharepoint.adventureworks.com など。 |
$site | 社内のプライマリ Web アプリケーションのオブジェクト。 この変数を設定するコマンドが、 $spsite 変数で指定したサイトのオブジェクトを取得します。 この変数は自動的に設定されます。 |
$spoappid | Microsoft 365 アプリケーション プリンシパル ID の SharePoint は、常に 00000003-0000-0ff1-ce00-000000000000 です。 この一般的な値は、Microsoft 365 組織内の Microsoft 365 オブジェクトの SharePoint を識別します。 |
$spocontextID | Microsoft 365 テナントの SharePoint のコンテキスト ID (ObjectID)。 この値は、Microsoft 365 テナントの SharePoint を識別する一意の GUID です。 この値は、変数を設定するコマンドを実行すると、自動的に削除されます。 |
$metadataEndpoint | Microsoft Entra テナントに接続するために Microsoft Entra ID プロキシによって使用される URL。 この変数に値を入力する必要はありません。 |
手順 1: 変数を設定する
設定する必要がある変数の確認が終わったら、次の手順を使用してそれらを設定します。 最もよく使用される変数を事前入力しておくと残りの手順を迅速に実行できます。 これらの変数は、PowerShell セッションを閉じない限り、入力が保持されます。 山かっこ (<>) が表示される場所に正確な情報を提供するように注意し、コマンドを実行する前に山かっこを常に削除してください。 山かっこの 外側 でコードを変更しないでください。
注:
これらの構成手順を後で実行する必要がある場合は、この手順で次の PowerShell コマンドを実行し、重要な変数を再入力することから開始する必要があります。
以下の変数の宣言をコピーし、メモ帳などのテキスト エディターに貼り付けます。 それぞれの組織に固有の入力値を設定します。 オンライン サービス管理ツールを使用して構成した PowerShell コマンドプロンプトから、次のコマンドを実行します。
$spcn="*.<public_root_domain_name>.com"
$spsite=Get-Spsite <principal_web_application_URL>
$site=Get-Spsite $spsite
$spoappid="00000003-0000-0ff1-ce00-000000000000"
$spocontextID = (Get-MgOrganization).Id
$metadataEndpoint = "https://accounts.accesscontrol.windows.net/" + $spocontextID + "/metadata/json/1"
これらの変数を入力したら、PowerShell ウィンドウに変数名を入力すると、値が表示されます。 たとえば、「 $metadataEndpoint
」と入力すると、次のような値が返されます。
https://accounts.accesscontrol.windows.net/00fceb75-246c-4ac4-a0ad-7124xxxxxxxx/metadata/json/1
手順 2: STS 証明書を Microsoft 365 の SharePoint にアップロードする
この手順では、SharePoint Server ファームの STS 証明書を Microsoft 365 の SharePoint テナントにアップロードします。これにより、SharePoint Server と Microsoft 365 の SharePoint がサービス アプリケーションに接続して相互に利用できるようになります。
この手順のコマンドは、オンプレミスの STS 証明書 (公開キーのみ) を、Microsoft 365 組織の Microsoft 365 プリンシパル オブジェクト の SharePoint に追加します。
PowerShell コマンド プロンプトで、以下のコマンドを入力します。
$Cert = (Get-SPSecurityTokenServiceConfig).LocalLoginProvider.SigningCertificate
$principal = Get-MgServicePrincipal -Filter "AppId eq '$spoappid’” -Property "Id,DisplayName,KeyCredentials,AppId"
$existingCerts = $principal.KeyCredentials
$keyCredentials = @(@{ Type = "AsymmetricX509Cert"; Usage = "Verify"; Key = $Cert.RawData; KeyId = New-Guid; StartDateTime = $Cert.NotBefore; EndDateTime = $Cert.NotAfter; })
$noUpdate = $false
foreach($existingCert in $existingCerts) {
if ([string]$existingCert.Key -eq [string]$Cert.RawData) {
$noUpdate = $true
break
}
else {
$existingCert.Key = $null
$keyCredentials += $existingCert
}
}
if (-Not $noUpdate) {
Update-MgServicePrincipal -ServicePrincipalId $principal.Id -KeyCredentials $keyCredentials
}
手順 3: パブリック ドメイン名の SPN を Microsoft Entra ID に追加する
この手順では、Microsoft Entra テナントにサービス プリンシパル名 (SPN) を追加します。 Microsoft 365 プリンシパル オブジェクトの SharePoint と会社のパブリック DNS 名前空間が SPN を形成します。
Active Directory の SPN 関数と同様に、この SPN を作成すると、Microsoft 365 の SharePoint Server と SharePoint 間の相互認証をサポートするために使用されるオブジェクトが Microsoft Entra ID に登録されます。 SPN の基本的な構文は次のとおりです。
<サービスの種類>/<インスタンス名>
ここで、
<サービスの種類> は、Microsoft 365 プリンシパル オブジェクトの SharePoint であり、Microsoft 365 テナントのすべての SharePoint で同じです。
<インスタンス名> は、会社のパブリック DNS ドメイン名前空間の URL です。この値は、セキュア チャネル SSL 証明書が SAN 証明書であっても、常にワイルドカードで表示されます。
次に例を示します:
00000003-0000-0ff1-ce00-000000000000/*.<public domain name>.com
証明書の共通名が sharepoint.adventureworks.com されている場合、SPN の構文は次のようになります。
00000003-0000-0ff1-ce00-000000000000/*.adventureworks.com
ワイルドカード値を使用すると、Microsoft 365 の SharePoint は、そのドメイン内 の任意のホスト との接続を検証できます。 これは将来、外部エンドポイントのホスト名を変更したり (トポロジに含まれている場合)、SharePoint Server Web アプリケーションを必要に応じて変更したりする場合に便利です。
SPN を Microsoft Entra ID に追加するには、Microsoft Graph PowerShell コマンド プロンプトに次のコマンドを入力します。
$msp = Get-MgServicePrincipal -Filter "AppId eq '$spoappid'"
$params =@{
"servicePrincipalNames"="$spoappid/$spcn"
}
Update-MgServicePrincipal -ServicePrincipalId $msp.Id -BodyParameter $params
SPN が設定されたことを検証するには、Microsoft Graph PowerShell コマンド プロンプトに次のコマンドを入力します。
$msp = Get-MgServicePrincipal -Filter "AppId eq '$spoappid'"
$spns = $msp.ServicePrincipalNames
$spns
Microsoft 365 組織で Microsoft 365 の SharePoint 用に設定されている現在の SPN 一覧が表示されます。SPN の 1 つには、Microsoft 365 の SharePoint アプリケーション プリンシパル ID で始まるパブリック ルート ドメイン名が含まれている必要があります。 この登録はワイルドカード登録で、次の例のようになります。
00000003-0000-0ff1-ce00-000000000000/*.<public domain name>.com
これには、パブリック ルート ドメイン名が含まれる SPN が 1 つだけ示されます。
手順 4: Microsoft 365 の SharePoint アプリケーション プリンシパル オブジェクト ID を SharePoint Server に登録する
この手順では、Microsoft 365 の SharePoint アプリケーション プリンシパル オブジェクト ID を、社内 Microsoft 365 の SharePoint の [アプリケーション構成の管理] サービスを使用して登録します。これにより、SharePoint Server が OAuth を使用した Microsoft 365 の SharePoint に認証できるようになります。
PowerShell コマンド プロンプトで、以下のコマンドを入力します。
$spoappprincipalID = (Get-MgServicePrincipal -Filter "AppId eq '$spoappid'").Id
$sponameidentifier = "$spoappprincipalID@$spocontextID"
$appPrincipal = Register-SPAppPrincipal -site $site.rootweb -nameIdentifier $sponameidentifier -displayName "SharePoint"
この手順を検証するには、PowerShell コマンド プロンプトで、以下のように $appPrincipal 変数を入力します。
$appPrincipal | fl
手順が正常に完了している場合は、 SharePoint Online という名前で、登録されたアプリケーション プリンシパルの説明が次のように表示されます。
手順 5: Microsoft 365 の SharePoint の認証領域を設定する
この手順では、SharePoint Server ファームの認証領域を組織の Microsoft 365 組織のコンテキスト ID に設定します。
次のコマンドを PowerShell コマンド プロンプトから入力します。
Set-SPAuthenticationRealm -realm $spocontextID
この手順を検証するには、PowerShell コマンド プロンプトで次のコマンドを入力します。
$spocontextID
Get-SPAuthenticationRealm
各コマンドが正常に実行されている場合、 Microsoft 365 の SharePoint テナントのコンテキスト ID を示す GUID が表示されます。 これらの GUID はすべて同じになります。
重要
ファームの認証領域値を指定するファーム セットアップ スクリプトを構成した場合は、この新しい値を使用して、セットアップ スクリプトを更新してから実行する必要があります。 > ファーム セットアップ スクリプトの領域値の要件の詳細については、「 SharePoint Server でのサーバー間認証の計画」を参照してください。 この SharePoint ファームをハイブリッド構成に参加するよう設定したので、SharePoint ファームの認証領域値は、常にテナントのコンテキスト ID と一致している必要があります。 この値を変更すると、ファームはハイブリッド機能に参加できなくなります。
手順 6: Microsoft Entra ID のオンプレミス プロキシを構成する
この手順では、SharePoint Server ファームに Microsoft Entra ID プロキシ サービスを作成します。 これにより、Microsoft Entra ID は、SharePoint Server が Microsoft 365 の SharePoint からの要求トークンの署名と認証に使用する 信頼されたトークン発行者 として使用できます。
PowerShell コマンド プロンプトで、次のコマンドを入力します。
New-SPAzureAccessControlServiceApplicationProxy -Name "ACS" -MetadataServiceEndpointUri $metadataEndpoint -DefaultProxyGroup
New-SPTrustedSecurityTokenIssuer -MetadataEndpoint $metadataEndpoint -IsTrustBroker:$true -Name "ACS"
New-SPAzureAccessControlServiceApplicationProxy コマンドを検証するには、以下の手順を実行します。
SharePoint 2016 サーバーの全体管理の Web サイトをブラウザーで参照して、[セキュリティ]>[一般的なセキュリティ]>[信頼関係の管理] の順に選択します。
名前が [ACS] で始まり、種類が [信頼済みサービス コンシューマー] であるエントリが存在することを確認します。
この手順を検証するには、PowerShell コマンド プロンプトで次のコマンドを入力します。
Get-SPTrustedSecurityTokenIssuer
ファームの信頼できるトークン発行元の説明が表示されるはずです。 RegisteredIssuerName プロパティの値は、次のとおりです。
00000001-0000-0000-c000-000000000000@<context ID>
ここで、
- <context ID> は、Microsoft 365 テナントの SharePoint のコンテキスト ID です。これは、$spocontextID変数の値です。
手順 7: ハイブリッド フェデレーション検索を更新する
2021 年 10 月以降、新しい Microsoft 365 検索エンジンを使用して、既存の SharePoint ハイブリッド構成を操作および認証するために、追加の手順が必要です。
このスクリプトは、SharePoint オンプレミスがインストールされているサーバー (2013、2016、または 2019) で実行する必要があります。 スクリプトは、必要なモジュールの依存関係 (MSOnline、AzureAD) を実行するサーバーにインストールしようとします。
構成スクリプトをダウンロードします。
スクリプトがダウンロードされたディレクトリから、次のコマンドを使用して、SharePoint オンプレミス ファーム管理者アカウントを使用してスクリプトを実行します。
Update-FederatedHybridSearchForM365.ps1 -HybridWebApp YourHybridWebApplication -Force
パラメーター値の詳細については、次のコマンドを実行します。
Get-Help .\Update-FederatedHybridSearchForM365.ps1
メッセージが表示されたら、Microsoft 365 グローバル管理者アカウントを使用してログインします。
スクリプトの実行が完了するまで待ちます。問題が発生した場合は、Microsoft サポートにお問い合わせください。
スクリプトの実行後、この変更が実装されると、ユーザーに変更は表示されません。
手順 8 (SharePoint Server 2013 の場合のみ必要): 新しいアプリ プリンシパル クエリAsUserIgnoreAppPrincipal アクセス許可を付与する
SharePoint Server 2013 では、フェデレーション クエリごとに非表示の制約が必要です。 リバース プロキシは、想定どおりに内部オンプレミス検索サイトではなく、リバース プロキシ サイト自体でインデックスが作成されたドキュメントを返します。 これを回避するには、SharePoint Server 2013 管理サイトで次の手順を実行する必要があります。
[
<CentralAdminURL>/_layouts/appinv.aspx
] に移動し、 c3959f3a-5ad4-4d2b-b1f0-bc70f9a5d0a1 を検索します。 ここでは、Greenland Federated Search Bot Skill が表示されます。[アプリ ドメイン] フィールドに項目がある場合は、そのままにし、空の場合は localhost を使用します。
[リダイレクト URL] で、 https://localhost.
[アクセス許可要求 XML] フィールドに、次の XML 抜粋を貼り付けます。
<AppPermissionRequests> <AppPermissionRequest Scope="http://sharepoint/search" Right="QueryAsUserIgnoreAppPrincipal" /> </AppPermissionRequests>
構成ページは、次のスクリーンショットのようになります。 最後に、[作成] を選択します。
検証と次の手順
このトピックのタスクと、その検証手順の終了後に、SSO およびディレクトリ同期の設定を確認する必要があります。
実行した手順の履歴がある場合、PowerShell バッファーのすべての内容をファイルに取得することができます。 これは、トラブルシューティングなどの理由で構成履歴を参照する場合に必要です。 また、構成が数日にわたるとき、または複数の人が関わっている場合に、作業を中断した所から再開するときにも役立ちます。
この記事の構成タスクを完了して検証したら、 構成ロードマップに進んでください。