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

製品: Exchange Server 2013

概要: Exchange 2013 で負荷分散されたクライアント アクセス サーバーで Kerberos 認証を使用する方法について説明します。

負荷分散されたクライアント アクセス サーバーで Kerberos 認証を使用するには、この記事で説明する構成手順を完了する必要があります。

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

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

重要

Exchange 2010 と Exchange 2013 は、同じ ASA 資格情報を共有できません。 Exchange 2013 の新しい ASA 資格情報を作成する必要があります。

重要

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

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

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

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

  • アカウント グループ: ASA 資格情報に使用するアカウントには、特別なセキュリティ特権は必要ありません。 コンピューター アカウントを使用する場合、そのアカウントのみが Domain Computers セキュリティ グループのメンバーである必要があります。 ユーザー アカウントを使用する場合、そのアカウントのみが 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 EXCH2013ASA -AccountPassword (Read-Host 'Enter password' -AsSecureString) -Description 'Alternate Service Account credentials for Exchange' -Enabled:$True -SamAccountName EXCH2013ASA
    

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

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

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

    例:

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

    EXCH2013ASA はアカウントの名前で、変更する属性は 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 値を決定する際には、次のシナリオを考慮してください。

  • Single Active Directory site

  • Multiple Active Directory sites

これらの各シナリオでは、クライアント アクセス サーバー メンバーによって使用される内部 URL、外部 URL、自動検出の内部 URI に負荷分散された完全修飾ドメイン名 (FQDN) がデプロイされていることを前提としています。 詳細については、「プロキシとリダイレクトについて」を参照してください。

単一の Active Directory サイト

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

単一 AD および Kerberos 認証を持つ CAS 配列。

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

  • http/mail.corp.tailspintoys.com

  • http/autodiscover.corp.tailspintoys.com

複数の Active Directory サイト

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

複数の AD サイトと Kerberos 認証を持つ CAS 配列。

前の図の 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 2013 クライアント アクセス サーバーに ASA 資格情報を展開する

  • 以降の Exchange 2013 クライアント アクセス サーバーに ASA 資格情報を展開する

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

最初の Exchange 2013 クライアント アクセス サーバーに ASA 資格情報を展開する

  1. Exchange 2013 サーバーで Exchange 管理シェルを開きます。

  2. 次のコマンドを実行して、ASA 資格情報を最初の Exchange 2013 クライアント アクセス サーバーに展開します。

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

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

========== Starting at 01/12/2015 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\EXCH2013ASA$
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 cas-1
Setting a new password on Alternate Serice Account in Active Directory

Password change
Do you want to change password for tailspin\EXCH2013ASA$ 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\EXCH2013ASA$ ...
Resetting a password in the Active Directory for tailspin\EXCH2013ASA$ ...
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\EXCH2013ASA$   1/12/2015 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/2015 10:19:22 AM, tailspin\EXCH2013ASA$
    ...

========== Finished at 01/12/2015 10:20:00 ==========

    THE SCRIPT HAS SUCCEEDED

ASA 資格情報を別の Exchange 2013 クライアント アクセス サーバーに展開する

  1. Exchange 2013 サーバーで Exchange 管理シェルを開きます。

  2. ディレクトリを に変更します $env:\Scripts

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

    .\RollAlternateServiceAccountPassword.ps1 -ToSpecificServer cas-2.corp.tailspintoys.com -CopyFrom cas-1.corp.tailspintoys.com
    
  4. ASA 資格情報をデプロイするクライアント アクセス サーバーごとに手順 3 を繰り返します。

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

========== Starting at 01/12/2015 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\EXCH2013ASA$
System.Security.SecureString

Prior to pushing new credentials, all existing credentials will be removed from the destination servers.
Pushing credentials to server cas-2
Retrieving the current Alternate Service Account configuration from servers in scope
Alternate Service Account properties:

StructuralObjectClass QualifiedUserName Last Pwd Update       SPNs
--------------------- ----------------- ---------------       ----
computer              tailspin\EXCH2013ASA$   1/12/2015 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/2015 10:37:59 AM, tailspin\EXCH2013ASA$
    ...

    ========== Finished at 01/12/2015 10:38:13 ==========

        THE SCRIPT HAS SUCCEEDED

ASA 資格情報の展開の確認

  • Exchange 2013 サーバーで Exchange 管理シェルを開きます。

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

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

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

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

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

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

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

重要

「最初の Exchange 2013 クライアント アクセス サーバーへの 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 ごとにこの手順を繰り返します。

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

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

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

    setspn -S <SPN> <Account>$
    

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

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

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

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

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

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

    setspn -L <Account>$
    

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

    setspn -L tailspin\EXCH2013ASA$
    

    このコマンドは 1 度実行するだけで十分です。

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

  1. Exchange 2013 サーバーで Exchange 管理シェルを開きます。

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

    Get-OutlookAnywhere -server CAS-1 | Set-OutlookAnywhere -InternalClientAuthenticationMethod  Negotiate
    
  3. HTTP クライアント経由で MAPI に対して Kerberos 認証を有効にするには、Exchange 2013 クライアント アクセス サーバーで次を実行します。

    Get-MapiVirtualDirectory -Server CAS-1 | Set-MapiVirtualDirectory -IISAuthenticationMethods Ntlm, Negotiate
    
  4. Kerberos 認証を有効にする Exchange 2013 クライアント アクセス サーバーごとに、手順 2 と 3 を繰り返します。

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

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

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

クライアント アクセス サーバー上の Microsoft Exchange Service Host サービス (MSExchangeServiceHost) は、ASA 資格情報の管理を担当します。 このサービスが実行されていない場合、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. 最新のログ ファイルを開き、「 Negotiate」という語句を検索します。 ログ ファイルの行は、次の例のような形式になっています。

    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 2013 サーバーで Exchange 管理シェルを開き、次のコマンドを実行します。

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