부하 분산된 클라이언트 액세스 서버에 대해 Kerberos 인증 구성

적용 대상: Exchange Server 2013

요약: Exchange 2013에서 부하 분산된 클라이언트 액세스 서버에서 Kerberos 인증을 사용하는 방법을 설명합니다.

부하 분산된 클라이언트 액세스 서버에서 Kerberos 인증을 사용하려면 이 문서에 설명된 구성 단계를 완료해야 합니다.

Active Directory Domain Services 대체 서비스 계정 자격 증명 만들기

동일한 네임스페이스와 URL을 공유하는 모든 클라이언트 액세스 서버는 동일한 대체 서비스 계정 자격 증명을 사용해야 합니다. 일반적으로 각 버전의 Exchange에 대해 포리스트에 대한 단일 계정을 갖기에 충분합니다. 대체 서비스 계정 자격 증명 또는 ASA 자격 증명.

중요

Exchange 2010 및 Exchange 2013은 동일한 ASA 자격 증명을 공유할 수 없습니다. Exchange 2013에 대한 새 ASA 자격 증명을 만들어야 합니다.

중요

CNAME 레코드는 공유 네임스페이스에 대해 지원되지만 A 레코드를 사용하는 것이 좋습니다. 이렇게 하면 클라이언트가 서버 FQDN이 아닌 공유 이름을 기반으로 Kerberos 티켓 요청을 올바르게 발급합니다.

ASA 자격 증명을 설정할 때 다음 지침을 염두에 두세요.

  • 계정 유형: 사용자 계정 대신 컴퓨터 계정을 만드는 것이 좋습니다. 컴퓨터 계정은 대화형 로그온을 허용하지 않으며 사용자 계정보다 더 간단한 보안 정책을 가질 수 있습니다. 컴퓨터 계정을 만드는 경우 암호는 만료되지 않지만 암호를 정기적으로 업데이트하는 것이 좋습니다. 로컬 그룹 정책을 사용하여 컴퓨터 계정 및 스크립트가 현재 정책을 충족하지 않는 컴퓨터 계정을 주기적으로 삭제할 수 있는 최대 기간을 지정할 수 있습니다. 또한 로컬 보안 정책은 암호를 변경해야 하는 시점을 결정합니다. 컴퓨터 계정을 사용하는 것이 좋긴 하지만 사용자 계정을 만들 수 있습니다.

  • 계정 이름: 계정 이름에 대한 요구 사항은 없습니다. 명명 체계를 준수하는 모든 이름을 사용할 수 있습니다.

  • 계정 그룹: ASA 자격 증명에 사용하는 계정에는 특별한 보안 권한이 필요하지 않습니다. 컴퓨터 계정을 사용하는 경우 계정은 도메인 컴퓨터 보안 그룹의 구성원이어야 합니다. 사용자 계정을 사용하는 경우 계정은 도메인 사용자 보안 그룹의 구성원이어야 합니다.

  • 계정 암호: 계정을 만들 때 제공하는 암호가 사용됩니다. 따라서 계정을 만들 때 복잡한 암호를 사용하고 암호가 조직의 암호 요구 사항을 준수하는지 확인해야 합니다.

ASA 자격 증명을 컴퓨터 계정으로 만들려면

  1. 도메인에 가입된 컴퓨터에서 Windows PowerShell 또는 Exchange 관리 셸을 실행합니다.

    Import-Module cmdlet을 사용하여 Active Directory 모듈을 가져옵니다.

    Import-Module ActiveDirectory
    
  2. New-ADComputer cmdlet을 사용하여 이 cmdlet 구문을 사용하여 새 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. Set-ADComputer cmdlet을 사용하여 다음 cmdlet 구문을 사용하여 Kerberos에서 사용하는 AES 256 암호화 암호화 지원을 사용하도록 설정합니다.

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

    예제:

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

    여기서 EXCH2013ASA 는 계정의 이름이고 수정할 특성은 10진수 값이 28인 msDS-SupportedEncryptionTypes 이며, RC4-HMAC, AES128-CTS-HMAC-SHA1-96, AES256-CTS-HMAC-SHA1-96 암호화를 사용하도록 설정합니다.

이러한 cmdlet에 대한 자세한 내용은 Import-ModuleNew-ADComputer를 참조하세요.

포리스트 간 시나리오

포리스트 간 또는 리소스 포리스트 배포가 있고 Exchange가 포함된 Active Directory 포리스트 외부에 있는 사용자가 있는 경우 포리스트 간에 포리스트 트러스트 관계를 구성해야 합니다. 또한 배포의 각 포리스트에 대해 포리스트 내의 모든 이름 접미사와 포리스트 간에 트러스트를 사용하도록 설정하는 라우팅 규칙을 설정해야 합니다. 포리스트 간 트러스트 관리에 대한 자세한 내용은 파트너 조직 구성을 참조하세요.

ASA 자격 증명과 연결할 서비스 주체 이름 식별

ASA 자격 증명을 만든 후에는 EXCHANGE SPN(서비스 사용자 이름)을 ASA 자격 증명과 연결해야 합니다. Exchange SPN 목록은 구성에 따라 다를 수 있지만 적어도 다음을 포함해야 합니다.

http/: Outlook Anywhere, HTTP를 통한 MAPI, Exchange Web Services, 자동 검색 및 오프라인 주소록에 이 SPN을 사용합니다.

SPN 값은 개별 서버 대신 네트워크 부하 분산 장치의 서비스 이름과 일치해야 합니다. 사용해야 하는 SPN 값을 계획하는 데 도움이 되도록 다음 시나리오를 고려하세요.

  • 단일 Active Directory 사이트

  • 여러 Active Directory 사이트

이러한 각 시나리오에서 내부 URL, 외부 URL 및 클라이언트 액세스 서버 멤버가 사용하는 자동 검색 내부 URI에 대해 부하 분산된 FQDN(정규화된 도메인 이름)이 배포되었다고 가정합니다. 자세한 내용은 프록시 및 리디렉션 이해를 참조하세요.

단일 Active Directory 사이트

단일 Active Directory 사이트가 있는 경우 환경은 다음 그림의 환경과 유사할 수 있습니다.

단일 AD 및 Kerberos 인증을 사용하는 CAS 배열입니다.

이전 그림의 내부 Outlook 클라이언트에서 사용하는 FQDN을 기반으로 다음 SPN을 ASA 자격 증명과 연결해야 합니다.

  • 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

또한 다음 SPN을 ADSite 2의 클라이언트 액세스 서버에서 사용하는 ASA 자격 증명과 연결해야 합니다.

  • 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. 다음 명령을 실행하여 첫 번째 Exchange 2013 클라이언트 액세스 서버에 ASA 자격 증명을 배포합니다.

    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

다른 Exchange 2013 클라이언트 액세스 서버에 ASA 자격 증명 배포

  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$
                                           ...

ASA 자격 증명과 SPN(서비스 사용자 이름) 연결

중요

첫 번째 Exchange 2013 클라이언트 액세스 서버에 ASA 자격 증명 배포의 앞부분에서 설명한 대로 해당 자격 증명을 하나 이상의 Exchange Server 배포할 때까지 SPN을 ASA 자격 증명과 연결하지 마세요. 그렇지 않으면 Kerberos 인증 오류가 발생합니다.

SPN을 ASA 자격 증명과 연결하기 전에 대상 SPN이 포리스트의 다른 계정과 아직 연결되어 있지 않은지 확인해야 합니다. ASA 자격 증명은 이러한 SPN이 연결된 포리스트의 유일한 계정이어야 합니다. 명령줄에서 setspn 명령을 실행하여 포리스트의 다른 계정이 SPN과 연결되어 있지 않은지 확인할 수 있습니다.

setspn 명령을 실행하여 SPN이 포리스트의 계정과 아직 연결되어 있지 않은지 확인합니다.

  1. 시작을 누릅니다. 검색 상자에 명령 프롬프트를 입력한 다음, 결과 목록에서 명령 프롬프트를 선택합니다.

  2. 명령 프롬프트에 다음 명령을 입력합니다.

    setspn -F -Q <SPN>
    

    여기서 <SPN> 은 ASA 자격 증명과 연결하려는 SPN입니다. 예시:

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

    명령은 아무 것도 반환하지 않습니다. 항목을 반환하는 경우 다른 계정이 이미 SPN과 연결되어 있습니다. ASA 자격 증명과 연결하려는 각 SPN에 대해 이 단계를 한 번 반복합니다.

setspn 명령을 사용하여 SPN을 ASA 자격 증명과 연결

  1. 시작을 누릅니다. 검색 상자에 명령 프롬프트를 입력한 다음, 결과 목록에서 명령 프롬프트를 선택합니다.

  2. 명령 프롬프트에 다음 명령을 입력합니다.

    setspn -S <SPN> <Account>$
    

    여기서 <SPN> 은 ASA 자격 증명과 연결하려는 SPN이고 <Account> 는 ASA 자격 증명과 연결된 계정입니다. 예시:

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

    ASA 자격 증명과 연결하려는 각 SPN에 대해 이 명령을 한 번 실행합니다.

setspn 명령을 사용하여 SPN을 ASA 자격 증명과 연결했는지 확인합니다.

  1. 시작을 누릅니다. 검색 상자에 명령 프롬프트를 입력한 다음, 결과 목록에서 명령 프롬프트를 선택합니다.

  2. 명령 프롬프트에 다음 명령을 입력합니다.

    setspn -L <Account>$
    

    여기서 <계정은> ASA 자격 증명과 연결된 계정입니다. 예시:

    setspn -L tailspin\EXCH2013ASA$
    

    이 명령을 한 번만 실행하면 됩니다.

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 서비스 호스트 서비스가 실행 중인지 확인

클라이언트 액세스 서버의 MICROSOFT Exchange 서비스 호스트 서비스(MSExchangeServiceHost)는 ASA 자격 증명 관리를 담당합니다. 이 서비스가 실행되고 있지 않으면 Kerberos 인증이 불가능합니다. 기본적으로 서비스는 컴퓨터가 시작될 때 자동으로 시작되도록 구성됩니다.

Microsoft Exchange 서비스 호스트 서비스가 시작되었는지 확인하려면

  1. 시작을 클릭하고 services.msc를 입력한 다음 목록에서 services.msc를 선택합니다.

  2. 서비스 창의 서비스 목록에서 Microsoft Exchange 서비스 호스트 서비스를 찾습니다.

  3. 서비스의 상태는 실행 중이어야 합니다. 상태가 실행 중이 아니면 서비스를 마우스 오른쪽 단추로 클릭한 다음 시작을 클릭합니다.

클라이언트 액세스 서버에서 Kerberos 유효성 검사

각 클라이언트 액세스 서버에서 ASA 자격 증명을 구성한 경우 set-ClientAccessServer cmdlet을 실행했습니다. 이 cmdlet을 실행한 후에는 로그를 사용하여 성공적인 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 티켓 캐시를 지워야 합니다.