負荷分散されたクライアント アクセス サービスの Kerberos 認証を構成する

クライアント アクセス サービスを実行している負荷分散メールボックス サーバーで Kerberos 認証を使用するには、この記事で説明する構成手順を完了する必要があります。

Active Directory ドメイン サービスで代替サービス アカウント資格情報を作成する

同じ名前空間と URL を共有するクライアント アクセス サービスを実行するすべての Exchange サーバーでは、同じ 代替サービス アカウント資格情報 または (ASA 資格情報) を使用する必要があります。 通常、Exchange の各バージョンのフォレストには 1 つのアカウントがあれば十分です。

重要

Exchange 2010 と Exchange 2016 とでは、同じ ASA 資格情報を共有できません。 ASA 資格情報が Exchange 2010 用に作成された場合は、Exchange 2016 用の新しい資格情報を作成する必要があります。

CNAME レコードは共有名前空間でサポートされていますが、Microsoft は A レコードを使用することをお勧めします。 これにより、クライアントは、サーバー FQDN ではなく、共有名に基づいて Kerberos チケット要求を常に正しく発行できるようになります。

注:

グループ管理サービス アカウント (gMSA) は、オンプレミスのExchange Server環境ではサポートされていないため、このシナリオでは使用できません。

ASA 資格情報を設定するときに、以下のガイドラインに留意してください。

  • アカウントの種類: ユーザー アカウントではなく、コンピューター アカウントを作成することをお勧めします。 コンピューター アカウントは対話型ログオンを許可しないため、ユーザー アカウントよりもセキュリティ ポリシーが単純になる可能性があります。 コンピューター アカウントを作成する場合、パスワードが期限切れになることはありませんが、パスワードを定期的に更新することをお勧めします。 ローカル グループ ポリシーを使用して、コンピューター アカウントの最大存続期間を指定したり、現在のポリシーに適合しないコンピューター アカウントを定期的に削除するスクリプトを指定したりできます。 また、パスワードを変更する必要がある場合は、ローカル セキュリティ ポリシーによっても決定されます。 コンピューター アカウントを使用することをお勧めしますが、ユーザー アカウントを作成することもできます。

  • アカウント名: アカウントの名前の要件はありません。 名前付けスキームに準拠している任意の名前を使用できます。

  • アカウント グループ: ASA 資格情報に使用するアカウントには、特別なセキュリティ特権は必要ありません。 コンピューター アカウントを使用している場合、アカウントはドメイン コンピューター セキュリティ グループのメンバーである必要があります。 ユーザー アカウントを使用している場合、アカウントは Domain Users セキュリティ グループのメンバーである必要があります。

  • アカウント パスワード: アカウントの作成時に指定したパスワードが使用されます。 したがって、アカウントを作成するときには、複雑なパスワードを使用し、組織のパスワード要件に準拠していることを確認する必要があります。

コンピューター アカウントとして ASA 資格情報を作成するには

  1. ドメインに参加しているコンピューターで、Windows PowerShell または Exchange 管理シェル を実行します。

    Import-Module コマンドレットを使用して、Active Directory モジュールをインポートします。

    Import-Module ActiveDirectory
    
  2. New-ADComputer コマンドレットを次のコマンドレット構文で使用して、新しい Active Directory コンピューター アカウントを作成します。

    New-ADComputer [-Name] <string> [-AccountPassword <SecureString>] [-AllowReversiblePasswordEncryption <System.Nullable[boolean]>] [-Description <string>] [-Enabled <System.Nullable[bool]>]
    

    例:

    New-ADComputer -Name EXCH2016ASA -AccountPassword (Read-Host 'Enter password' -AsSecureString) -Description 'Alternate Service Account credentials for Exchange' -Enabled:$True -SamAccountName EXCH2016ASA
    

    EXCH2016ASA がアカウントの名前である場合、Exchange の代替サービス アカウント資格情報の説明は任意であり、SamAccountName パラメーターの値 (この場合は EXCH2016ASA) はディレクトリ内で一意である必要があります。

  3. このコマンドレットの構文を使用して Kerberos で使用される AES 256 暗号化の暗号を有効にするには、 Set-ADComputer コマンドレットを使用します。

    Set-ADComputer [-Name] <string> [-add @{<attributename>="<value>"]
    

    例:

    Set-ADComputer EXCH2016ASA -add @{"msDS-SupportedEncryptionTypes"="28"}
    

    EXCH2016ASA はアカウントの名前であり、変更する属性は msDS-SupportedEncryptionTypes で、10 進値が 28 で、RC4-HMAC、AES128-CTS-HMAC-SHA1-96、AES256-CTS-HMAC-SHA1-96 の暗号が有効になります。

これらのコマンドレットの詳細については、「Import-Module」および「New-ADComputer」を参照してください。

クロス フォレスト シナリオ

フォレスト間またはリソース フォレストの展開があり、Exchange を含む Active Directory フォレストの外部にあるユーザーがいる場合は、フォレスト間のフォレストの信頼関係を構成する必要があります。 また、展開内の各フォレストに対して、フォレスト内のすべての名前サフィックスとフォレスト間の信頼を有効にするルーティング規則を設定する必要があります。 フォレスト間の信頼の管理の詳細については、「 パートナー組織の構成」を参照してください。

サービス プリンシパル名を識別して ASA 資格情報に関連付ける

ASA 資格情報を作成したら、Exchange サービス プリンシパル名 (SPN) を ASA 資格情報に関連付ける必要があります。 Exchange SPN の一覧は構成によって異なりますが、少なくとも以下が含まれている必要があります。

  • http/: Outlook Anywhere、MAPI over HTTP、Exchange Web Services、自動検出、オフライン アドレス帳にこの SPN を使用します。

SPN 値は、個々のサーバーではなく、ネットワーク ロード バランサーのサービス名と一致する必要があります。 使用する SPN 値を決定する際には、次のシナリオを考慮してください。

これらの各シナリオでは、クライアント アクセス サービスを実行しているメンバーによって使用される内部 URL、外部 URL、自動検出内部 URI に、負荷分散される完全修飾ドメイン名 (FQDN) が展開されていることを前提としています。

単一の Active Directory サイト

単一の Active Directory サイトが存在する場合、環境は以下の図のようになります。

複数の AD サイト。

前の図の内部 Outlook クライアントで使用されている FQDN に基づいて、次の SPN を ASA 資格情報に関連付ける必要があります。

  • http/mail.corp.tailspintoys.com
  • http/autodiscover.corp.tailspintoys.com

複数の Active Directory サイト

複数の Active Directory サイトが存在する場合、環境は以下の図のようになります。

複数の AD サイト。

前の図の Outlook クライアントによって使用される FQDN に基づいて、次の SPN を、ADSite 1 でクライアント アクセス サービスを実行しているメールボックス サーバーによって使用される ASA 資格情報に関連付ける必要があります。

  • http/mail.corp.tailspintoys.com
  • http/autodiscover.corp.tailspintoys.com

また、ADSite 2 でクライアント アクセス サービスを実行しているメールボックス サーバーで使用される ASA 資格情報に、次の SPN を関連付ける必要があります。

  • http/mailsdc.corp.tailspintoys.com
  • http/autodiscoversdc.corp.tailspintoys.com

クライアント アクセス サービスを実行している各サーバーの ASA 資格情報を構成して確認する

アカウントを作成したら、アカウントがすべての AD DS ドメイン コントローラーにレプリケートされていることを確認する必要があります。 具体的には、アカウントは、ASA 資格情報を使用するクライアント アクセス サービスを実行している各サーバーに存在する必要があります。 次に、展開されているクライアント アクセス サービスを実行している各サーバーの ASA 資格情報として、アカウントを構成します。

以下の手順のいずれかに従って、Exchange 管理シェル で ASA 資格情報を構成します。

  • クライアント アクセス サービスを実行している最初の Exchange サーバーに ASA 資格情報を展開する
  • クライアント アクセス サービスを実行している後続の Exchange サーバーに ASA 資格情報を展開する

ASA 資格情報を展開するためのサポートされている唯一の方法は、RollAlternateServiceAcountPassword.ps1 スクリプトを使用することです。 スクリプトを実行するために必要なアクセス許可の詳細については、「 シェルでのRollAlternateserviceAccountCredential.ps1 スクリプトの使用」を参照してください。 スクリプトの実行が完了したら、対象のサーバーのすべてが適切に更新されていることを確認することを推奨します。

クライアント アクセス サービスを実行している最初の Exchange サーバーに ASA 資格情報を展開する

  1. Exchange 2016 または Exchange 2019 サーバーで Exchange 管理シェルを開きます。

  2. ディレクトリを Exchange 2016 インストール ディレクトリ>\V15\Scripts に<変更します。

  3. 次のコマンドを実行して、クライアント アクセス サービスを実行している最初の Exchange 2016 または Exchange 2019 サーバーに ASA 資格情報を展開します。

    .\RollAlternateServiceAccountPassword.ps1 -ToSpecificServer cas-1.corp.tailspintoys.com -GenerateNewPasswordFor tailspin\EXCH2016ASA$
    
  4. 代替サービス アカウントのパスワードを変更するかどうかを確認するメッセージが表示されたら、 [はい] で応答します。

RollAlternateServiceAccountPassword.ps1 スクリプトを実行すると表示される出力の例を次に示します。

========== Starting at 01/12/2016 10:17:47 ==========
Creating a new session for implicit remoting of "Get-ExchangeServer" command...
Destination servers that will be updated:
Name                                                        PSComputerName
----                                                        --------------
cas-1                                                   cas-1.corp.tailspintoys.com
Credentials that will be pushed to every server in the specified scope (recent first):
UserName
Password
--------
--------
tailspin\EXCH2016ASA$
System.Security.SecureString
Prior to pushing new credentials, all existing credentials that are invalid or no longer work will be removed from  the destination servers.
Pushing credentials to server mbx-1
Setting a new password on Alternate Service Account in Active Directory
Password change
Do you want to change password for tailspin\EXCH2016ASA$ in Active Directory at this time?
[Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"): y
Preparing to update Active Directory with a new password for tailspin\EXCH2016ASA$ ...
Resetting a password in the Active Directory for tailspin\EXCH2016ASA$ ...
New password was successfully set to Active Directory.
Retrieving the current Alternate Service Account configuration from servers in scope
Alternate Service Account properties:
StructuralObjectClass QualifiedUserName Last Pwd Update       SPNs
--------------------- ----------------- ---------------       ----
computer              tailspin\EXCH2016ASA$   1/12/2016 10:19:53 AM
Per-server Alternate Service Account configuration as of the time of script completion:
   Array: {mail.corp.tailspintoys.com}
Identity  AlternateServiceAccountConfiguration
--------  ------------------------------------
cas-1 Latest: 1/12/2016 10:19:22 AM, tailspin\EXCH2016ASA$
          ...
========== Finished at 01/12/2016 10:20:00 ==========
        THE SCRIPT HAS SUCCEEDED

クライアント アクセス サービスを実行している別の Exchange サーバーに ASA 資格情報を展開する

  1. Exchange 2016 または Exchange 2019 サーバーで Exchange 管理シェルを開きます。

  2. ディレクトリを Exchange 2016 インストール ディレクトリ>\V15\Scripts に<変更します。

  3. 次のコマンドを実行して、クライアント アクセス サービスを実行している別の Exchange 2016 または Exchange 2019 サーバーに ASA 資格情報を展開します。

    .\RollAlternateServiceAccountPassword.ps1 -ToSpecificServer cas-2.corp.tailspintoys.com -CopyFrom cas-1.corp.tailspintoys.com
    
  4. ASA 資格情報を展開したい、クライアント アクセス サービスを実行している各サーバーについて、手順 3 を繰り返します。

RollAlternateServiceAccountPassword.ps1 スクリプトを実行すると表示される出力の例を次に示します。

========== Starting at 01/12/2016 10:34:35 ==========
Destination servers that will be updated:
Name                                                        PSComputerName
----                                                        --------------
cas-2                                                   cas-2.corp.tailspintoys.com
Credentials that will be pushed to every server in the specified scope (recent first):
UserName
Password
--------
--------
tailspin\EXCH2016ASA$
System.Security.SecureString
Prior to pushing new credentials, all existing credentials will be removed from the destination servers.
Pushing credentials to server mbx-2
Retrieving the current Alternate Service Account configuration from servers in scope
Alternate Service Account properties:
StructuralObjectClass QualifiedUserName Last Pwd Update       SPNs
--------------------- ----------------- ---------------       ----
computer              tailspin\EXCH2016ASA$   1/12/2016 10:19:53 AM
Per-server Alternate Service Account configuration as of the time of script completion:
   Array: cas-2.corp.tailspintoys.com
Identity  AlternateServiceAccountConfiguration
--------  ------------------------------------
cas-2 Latest: 1/12/2016 10:37:59 AM, tailspin\EXCH2016ASA$
          ...
========== Finished at 01/12/2016 10:38:13 ==========
        THE SCRIPT HAS SUCCEEDED

ASA 資格情報の展開の確認

  • Exchange 2016 または Exchange 2019 サーバーで Exchange 管理シェルを開きます。

  • クライアント アクセス サービスを実行しているサーバー上の設定を確認するには、次のコマンドを実行します。

    Get-ClientAccessServer CAS-3 -IncludeAlternateServiceAccountCredentialStatus | Format-List Name, AlternateServiceAccountConfiguration
    
  • ASA 資格情報の展開を確認したい、クライアント アクセス サービスを実行している各サーバーについて、手順 2 を繰り返します。

上記の Get-ClientAccessServer コマンドを実行し、以前の ASA 資格情報が設定されていない場合に表示される出力の例を次に示します。

Name                                 : CAS-1
AlternateServiceAccountConfiguration : Latest: 1/12/2016 10:19:22 AM, tailspin\EXCH2016ASA$
                                       Previous: <Not set>
                                          ...

上記の Get-ClientAccessServer コマンドを実行し、ASA 資格情報が以前に設定されていた場合に表示される出力の例を次に示します。 以前の ASA 資格情報と、設定された日時が返されます。

Name                                 : CAS-3
AlternateServiceAccountConfiguration : Latest: 1/12/2016 10:19:22 AM, tailspin\EXCH2016ASA$
                                       Previous: 7/15/2015 12:58:35 PM, tailspin\oldSharedServiceAccountName$
                                          ...

サービス プリンシパル名 (SPN) を ASA 資格情報に関連付ける

重要

クライアント アクセス サービスを実行する最初の Exchange サーバーに ASA 資格情報を展開する」で説明したように、その資格情報を少なくとも 1 つのExchange Serverに展開するまで、SPN を ASA 資格情報に関連付けないでください。 さもないと、Kerberos 認証エラーが発生します。

SPN を ASA 資格情報に関連付ける前に、ターゲット SPN がまだフォレスト内の別のアカウントに関連付けられていないことを確認する必要があります。 ASA 資格情報は、これらの SPN が関連付けられているフォレスト内の唯一のアカウントである必要があります。 コマンド ラインから setspn コマンドを実行することによって、フォレスト内にその SPN が関連付けられた他のアカウントがないことを確認できます。

setspn コマンドを実行して SPN がフォレスト内でアカウントに既に関連付けられていないことを確認する

  1. [開始] を押します。 [検索] ボックスに「 Command Prompt」と入力し、その結果表示されるリストで [コマンド プロンプト] を選択します。

  2. コマンド プロンプトで、以下のコマンドを入力します。

    setspn -F -Q <SPN>
    

    この <SPN> には、ASA 資格情報に関連付ける SPN を入力します。 たとえば、次のように入力します。

    setspn -F -Q http/mail.corp.tailspintoys.com
    

    コマンドは何も返さないはずです。 何かを返した場合は、別のアカウントが既に SPN に関連付けられています。 ASA 資格情報に関連付ける SPN ごとに、この手順を 1 回繰り返します。

setspn コマンドを使用して SPN を ASA 資格情報に関連付ける

  1. [開始] を押します。 [ 検索 ] ボックスに「 Command Prompt」と入力し、結果の一覧で [コマンド プロンプト ] を選択します。

  2. コマンド プロンプトで、以下のコマンドを入力します。

    setspn -S <SPN> <Account>$
    

    ここで <、SPN> は ASA 資格情報に関連付ける SPN で、 <アカウント> は ASA 資格情報に関連付けられているアカウントです。 以下に例を示します。

    setspn -S http/mail.corp.tailspintoys.com tailspin\EXCH2016ASA$
    

    ASA 資格情報に関連付ける SPN ごとに、このコマンドを 1 回実行します。

setspn コマンドを使用して SPN を ASA 資格情報に関連付けたことを確認する

  1. [開始] を押します。 [ 検索 ] ボックスに「 Command Prompt」と入力し、結果の一覧で [コマンド プロンプト ] を選択します。

  2. コマンド プロンプトで、以下のコマンドを入力します。

    setspn -L <Account>$
    

    この <Account> には、ASA 資格情報に関連付けるアカウントを入力します。 以下に例を示します。

    setspn -L tailspin\EXCH2016ASA$
    

    このコマンドは 1 回だけ実行する必要があります。

Outlook クライアントに対して Kerberos 認証を有効にする

  1. Exchange 2016 または Exchange 2019 サーバーで Exchange 管理シェルを開きます。

  2. Outlook Anywhere クライアントに対して Kerberos 認証を有効にするには、クライアント アクセス サービスを実行している Exchange 2016 または Exchange 2019 サーバーで次のコマンドを実行します。

    Get-OutlookAnywhere -Server CAS-1 | Set-OutlookAnywhere -InternalClientAuthenticationMethod  Negotiate
    
  3. HTTP クライアント経由で MAPI に対して Kerberos 認証を有効にするには、クライアント アクセス サービスを実行している Exchange 2016 または Exchange 2019 サーバーで次のコマンドを実行します。

    Get-MapiVirtualDirectory -Server CAS-1 | Set-MapiVirtualDirectory -IISAuthenticationMethods Ntlm,Negotiate
    

    Exchange Onlineを使用するハイブリッド環境、または OAuth を内部で使用する場合は、クライアント アクセス サービスを実行している Exchange 2016 または Exchange 2019 サーバーで次のコマンドを実行します。

    $mapidir = Get-MapiVirtualDirectory -Server CAS-1
    $mapidir | Set-MapiVirtualDirectory -IISAuthenticationMethods ($mapidir.IISAuthenticationMethods +='Negotiate')
    
  4. Kerberos 認証を有効にするクライアント アクセス サービスを実行している Exchange 2016 または Exchange 2019 サーバーごとに、手順 2 と 3 を繰り返します。

Exchange クライアント Kerberos 認証を確認する

Kerberos と ASA 資格情報を正常に構成したら、これらのタスクで説明されているように、クライアントが正常に認証できることを確認します。

Microsoft Exchange Service Host サービスが実行していることを確認する

クライアント アクセス サービスを実行しているサーバー上の Microsoft Exchange Service Host サービス (MSExchangeServiceHost) は、ASA 資格情報の管理を担当します。 MSExchangeServiceHost が実行されていないと、Kerberos 認証を実行できません。 既定では、このサービスは、コンピューターの起動時に自動的に開始するように構成されています。

Microsoft Exchange Service Host サービスが開始していることを確認するには

  1. [スタート] をクリックし、「 services.msc」と入力して、リストから [services.msc] を選択します。

  2. [サービス] ウィンドウに表示されるサービスのリストで、 Microsoft Exchange Service Host サービスを探します。

  3. サービスの状態が [実行中] である必要があります。 状態が [実行中] ではない場合は、そのサービスを右クリックし、 [開始] をクリックします。

クライアント アクセス サービスを実行しているサーバーから Kerberos を確認する

クライアント アクセス サービスを実行している各サーバーで ASA 資格情報を構成した場合は、 Set-ClientAccessServer コマンドレットを実行しました。 このコマンドレットを実行した後、ログを使用して Kerberos 接続の成功を確認できます。

HttpProxy ログ ファイルを使用して Kerberos が正しく動作していることを確認する

  1. テキスト エディターで HttpProxy ログが格納されているフォルダーを参照します。 既定では、このログは次のフォルダーに格納されています。

    %ExchangeInstallPath%\Logging\HttpProxy\RpcHttp

  2. 最新のログ ファイルを開き、[ ネゴシエート] という単語を探します。 ログ ファイルの行は、次の例のような形式になっています。

    2014-02-19T13:30:49.219Z,e19d08f4-e04c-42da-a6be-b7484b396db0,15,0,775,22,,RpcHttp,mail.corp.tailspintoys.com,/rpc/rpcproxy.dll,,Negotiate,True,tailspin\Wendy,tailspintoys.com,MailboxGuid~ad44b1e0-e44f-4a16-9396-3a437f594f88,MSRPC,192.168.1.77,EXCH1,200,200,,RPC_OUT_DATA,Proxy,exch2.tailspintoys.com,15.00.0775.000,IntraForest,MailboxGuidWithDomain,,,,76,462,1,,1,1,,0,,0,,0,0,16272.3359,0,0,3,0,23,0,25,0,16280,1,16274,16230,16233,16234,16282,?ad44b1e0-e44f-4a16-9396-3a437f594f88@tailspintoys.com:6001,,BeginRequest=2014-02-19T13:30:32.946Z;BeginGetRequestStream=2014-02-19T13:30:32.946Z;OnRequestStreamReady=2014-02-19T13:30:32.946Z;BeginGetResponse=2014-02-19T13:30:32.946Z;OnResponseReady=2014-02-19T13:30:32.977Z;EndGetResponse=2014-02-19T13:30:32.977Z;,PossibleException=IOException;
    

    AuthenticationType 値が Negotiate である場合、サーバーは Kerberos 認証接続を正常に作成しています。

ASA 資格情報を管理する

ASA 資格情報のパスワードを定期的に更新する必要がある場合は、この記事の ASA 資格情報を構成する手順を使用します。 定期的なパスワードの保守を実行するスケジュールされたタスクのセットアップを検討してください。 指定されたときにパスワード ロールオーバーが行われていることを確認し、可能性のある認証の停止を防止するために、スケジュールされたタスクを監視してください。

Kerberos 認証をオフにする

Kerberos の使用を停止するようにクライアント アクセス サービスを実行しているサーバーを構成するには、ASA 資格情報から SPN の関連付けを解除または削除します。 SPN が削除された場合、Kerberos 認証はクライアントによって試行されません。ネゴシエート認証を使用するように構成されているクライアントでは、代わりに NTLM が使用されます。 Kerberos のみを使用するように構成されているクライアントは接続できません。 SPN が削除されたら、アカウントも削除する必要があります。

ASA 資格情報を削除するには

  1. Exchange 2016 または Exchange 2019 サーバーで Exchange 管理シェルを開き、次のコマンドを実行します。

    Set-ClientAccessServer CAS-1 -RemoveAlternateServiceAccountCredentials
    
  2. この手順はすぐに実行する必要はありませんが、最後的には、すべてのクライアント コンピューターを再起動して Kerberos チケット キャッシュをコンピューターから消去する必要があります。