PolyBase Kerberos 연결 문제 해결Troubleshoot PolyBase Kerberos connectivity

적용 대상: SQL Server(Windows 전용) Azure SQL Database Azure Synapse Analytics 병렬 데이터 웨어하우스

PolyBase에 기본 제공된 대화형 진단을 사용하면 Kerberos 보안 Hadoop 클러스터에 대해 PolyBase를 사용할 때 인증 문제를 해결할 수 있습니다.You can use interactive diagnostics that have been built into PolyBase to help troubleshoot authentication problems, when using PolyBase against a Kerberos-secured Hadoop cluster.

이 문서는 기본 제공 진단을 활용하여 이러한 문제의 디버깅 프로세스를 살펴보기 위한 가이드입니다.This article serves as a guide to walk through the debugging process of such issues by leveraging these built-in diagnostics.

ヒント

이 가이드의 단계를 수행하는 대신, Kerberos 보안 HDFS 클러스터에 외부 테이블을 만드는 중 HDFS Kerberos 오류가 발생할 경우 PolyBase에 대한 HDFS Kerberos 연결 문제를 해결하기 위해 HDFS Kerberos 테스터를 실행하도록 선택할 수 있습니다. .Instead of following the steps in this guide, you can choose to run the HDFS Kerberos Tester to troubleshoot HDFS Kerberos connections for PolyBase, when you experience HDFS Kerberos failure while creating an external table in a Kerberos secured HDFS cluster. 이 도구는 HDFS Kerberos 설정 문제, 즉 사용자 이름/암호의 잘못된 구성과 클러스터 Kerberos 설정의 잘못된 구성 확인에 집중할 수 있도록 SQL Server 이외의 문제를 제외하는 데 도움이 됩니다.This tool will assist in ruling out non-SQL Server issues, to help you concentrate on resolving HDFS Kerberos setup issues, namely identifying issues with username/password misconfigurations, and cluster Kerberos setup misconfigurations.
이 도구는 SQL ServerSQL Server와는 독립적입니다.This tool is completely independent from SQL ServerSQL Server. Jupyter Notebook으로 제공되며, Azure Data Studio가 필요합니다.It is available as a Jupyter Notebook and requires Azure Data Studio.

필수 구성 요소Prerequisites

  1. PolyBase가 설치된 SQL Server 2016(13.x)SQL Server 2016 (13.x) RTM CU6/SQL Server 2016(13.x)SQL Server 2016 (13.x) SP1 CU3/SQL Server 2017(14.x)SQL Server 2017 (14.x) 이상SQL Server 2016(13.x)SQL Server 2016 (13.x) RTM CU6 / SQL Server 2016(13.x)SQL Server 2016 (13.x) SP1 CU3 / SQL Server 2017(14.x)SQL Server 2017 (14.x) or higher with PolyBase installed
  2. Kerberos(Active Directory 또는 MIT)로 보호된 Hadoop 클러스터(Cloudera 또는 Hortonworks)A Hadoop cluster (Cloudera or Hortonworks) secured with Kerberos (Active Directory or MIT)

소개Introduction

먼저 Kerberos 프로토콜을 개략적으로 이해할 수 있도록 도와드립니다.It helps to first understand the Kerberos protocol at a high level. 관련된 행위자는 다음 세 가지입니다.There are three actors involved:

  1. Kerberos 클라이언트(SQL Server)Kerberos client (SQL Server)
  2. 보안 리소스(HDFS, MR2, YARN, 작업 기록 등)Secured resource (HDFS, MR2, YARN, Job History, etc.)
  3. 키 배포 센터(Active Directory에서는 도메인 컨트롤러라고 함)Key distribution center (referred to as a domain controller in Active Directory)

Kerberos가 Hadoop 클러스터에서 구성되면 각 Hadoop 보안 리소스는 고유한 SPN(서비스 사용자 이름) 을 사용하여 KDC(키 배포 센터) 에 등록됩니다.Each Hadoop secured resource is registered in the Key Distribution Center (KDC) with a unique Service Principal Name (SPN) when Kerberos is configured on the Hadoop cluster. 목표는 클라이언트가 임시 사용자 티켓인 TGT(허용 티켓) 를 얻어, 액세스하려는 특정 SPN에 대해 또 다른 임시 티켓인 ST(서비스 티켓) 를 KDC에서 요청하는 것입니다.The goal is for the client to obtain a temporary user ticket, called a Ticket Granting Ticket (TGT), in order to request another temporary ticket, called a Service Ticket (ST), from the KDC against the particular SPN that it wants to access.

PolyBase에서 Kerberos 보안 리소스에 대해 인증이 요청되면 다음과 같은 4번 왕복 핸드셰이크가 수행됩니다.In PolyBase, when authentication is requested against any Kerberos-secured resource, the following four-round-trip handshake takes place:

  1. SQL ServerSQL Server가 KDC에 연결하고 사용자의 TGT를 가져옵니다.connects to the KDC and obtains a TGT for the user. TGT는 KDC 프라이빗 키를 사용하여 암호화됩니다.The TGT is encrypted using the KDC private key.
  2. SQL ServerSQL Server가 Hadoop 보안 리소스인 HDFS를 호출하고 ST가 필요한 SPN을 확인합니다.calls the Hadoop secured resource, HDFS, and determines which SPN it needs an ST for.
  3. SQL ServerSQL Server가 KDC로 돌아가고, TGT를 다시 전달하고, ST를 요청하여 해당하는 특정 보안 리소스에 액세스합니다.goes back to the KDC, passes the TGT back, and requests an ST to access that particular secured resource. ST는 보안 서비스의 프라이빗 키를 사용하여 암호화됩니다.The ST is encrypted using the secured service's private key.
  4. SQL ServerSQL Server가 ST를 Hadoop에 전달하고 인증되어 해당 서비스에 대해 세션이 만들어집니다.forwards the ST to Hadoop and gets authenticated to have a session created against that service.

PolyBase SQL Server

인증 관련 문제는 위 4단계 중 하나 이상에 속합니다.Issues with authentication fall into one or more of the above four steps. 더 빠르게 디버그할 수 있도록 PolyBase에서는 실패 지점을 식별하는 데 도움이 되는 통합 진단 도구를 도입했습니다.To help with faster debugging, PolyBase has introduced an integrated diagnostics tool to help identify the point of failure.

문제 해결Troubleshooting

PolyBase에는 Hadoop 클러스터의 속성이 포함된 다음과 같은 구성 XML 파일이 있습니다.PolyBase has the following configuration XML files containing properties of the Hadoop cluster:

  • core-site.xmlcore-site.xml
  • hdfs-site.xmlhdfs-site.xml
  • hive-site.xmlhive-site.xml
  • jaas.confjaas.conf
  • mapred-site.xmlmapred-site.xml
  • yarn-site.xmlyarn-site.xml

이러한 파일은 다음 위치에 있습니다.These files are located under:

\[System Drive\]:{install path}\{MSSQL##.INSTANCENAME}\MSSQL\Binn\PolyBase\Hadoop\conf

예를 들어 SQL Server 2016(13.x)SQL Server 2016 (13.x)의 기본값은 C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Binn\PolyBase\Hadoop\conf입니다.For example, the default for SQL Server 2016(13.x)SQL Server 2016 (13.x) is C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Binn\PolyBase\Hadoop\conf.

core-site.xml 을 업데이트하고 아래 세 가지 속성을 추가합니다.Update core-site.xml, add the three properties below. 환경에 따라 값을 설정합니다.Set the values according to the environment:

<property>
    <name>polybase.kerberos.realm</name>
    <value>CONTOSO.COM</value>
</property>
<property>
    <name>polybase.kerberos.kdchost</name>
    <value>kerberos.contoso.com</value>
</property>
<property>
    <name>hadoop.security.authentication</name>
    <value>KERBEROS</value>
</property>

注意

polybase.kerberos.realm 속성 값은 모두 대문자여야 합니다.The value for polybase.kerberos.realm property needs to be all upper case.

나중에 푸시다운 작업이 필요한 경우 다른 XML도 업데이트해야 하지만 이 파일만 구성해도 HDFS 파일 시스템에 액세스할 수는 있습니다.The other XMLs will later need to be updated as well if pushdown operations are desired, but with just this file configured, the HDFS file system should at least be able to be accessed.

이 도구는 SQL ServerSQL Server와 독립적으로 실행되므로, SQL Server가 실행되고 있지 않아도 되고 구성 XML을 업데이트하는 경우 SQL Server를 다시 시작하지 않아도 됩니다.The tool runs independently of SQL ServerSQL Server, so it does not need to be running, nor does it need to be restarted if updates are made to the configuration XMLs. 이 도구를 실행하려면 SQL ServerSQL Server가 설치된 호스트에서 다음 명령을 실행합니다.To run the tool, execute the following commands on the host with SQL ServerSQL Server installed:

> cd C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Binn\PolyBase  
> java -classpath ".\Hadoop\conf;.\Hadoop\*;.\Hadoop\HDP2_2\*" com.microsoft.polybase.client.HdfsBridge {Name Node Address} {Name Node Port} {Service Principal} {Filepath containing Service Principal's Password} {Remote HDFS file path (optional)}

인수Arguments

인수Argument DescriptionDescription
Name Node AddressName Node Address 이름 노드의 IP 또는 FQDN입니다.The IP or FQDN of the name node. CREATE EXTERNAL DATA SOURCE T-SQL의 "LOCATION" 인수를 가리킵니다.Refers to the "LOCATION" argument in your CREATE EXTERNAL DATA SOURCE T-SQL. 참고: SQL Server 2019 버전의 도구를 사용하려면 hdfs:// 가 IP 또는 FQDN 앞에 와야 합니다.Note: The SQL Server 2019 version of the tool requires hdfs:// to precede the IP or FQDN.
Name Node PortName Node Port 이름 노드의 포트입니다.The port of the name node. CREATE EXTERNAL DATA SOURCE T-SQL의 "LOCATION" 인수를 가리킵니다.Refers to the "LOCATION" argument in your CREATE EXTERNAL DATA SOURCE T-SQL. 예: 8020For example, 8020.
Service PrincipalService Principal KDC의 관리 서비스 사용자입니다.The admin service principal to your KDC. CREATE DATABASE SCOPED CREDENTIAL T-SQL에서 "IDENTITY" 인수와 일치합니다.Matches the "IDENTITY" argument in your CREATE DATABASE SCOPED CREDENTIAL T-SQL.
Service PasswordService Password 암호를 콘솔에 입력하는 대신 파일에 저장하고 여기에 파일 경로를 전달합니다.Instead of typing your password at the console, store it in a file and pass the file path here. 파일의 내용이 CREATE DATABASE SCOPED CREDENTIAL T-SQL에서 "SECRET" 인수로 사용하는 내용과 일치해야 합니다.The contents of the file should match what you use as your "SECRET" argument in your CREATE DATABASE SCOPED CREDENTIAL T-SQL.
원격 HDFS 파일 경로(선택 사항)Remote HDFS file path (optional) 액세스할 기존 파일의 경로입니다.The path of an existing file to access. 지정하지 않으면 루트 “/”가 사용됩니다.If not specified, the root "/" will be used.

예제Example

java -classpath ".\Hadoop\conf;.\Hadoop\*;.\Hadoop\HDP2_2\*" com.microsoft.polybase.client.HdfsBridge 10.193.27.232 8020 admin_user C:\temp\kerberos_pass.txt

출력에는 향상된 디버깅을 위해 자세한 정보가 포함되어 있지만, MIT 또는 AD 중 무엇을 사용하든 네 개의 기본 검사점만 살펴보면 됩니다.The output is verbose for enhanced debugging, but there are only four main checkpoints to look for regardless of whether you are using MIT or AD. 이들 검사점은 위에서 설명한 4개 단계에 해당합니다.They correspond to the four steps outlined above.

다음은 MIT KDC 출력의 일부입니다.The following excerpts are from an MIT KDC. MIT 및 AD의 전체 샘플 출력은 이 문서 끝에 있는 참조에서 확인할 수 있습니다.You may refer to complete sample outputs from both MIT and AD at the end of this article in the References.

검사점 1Checkpoint 1

Server Principal = krbtgt/MYREALM.COM@MYREALM.COM인 티켓의 16진수 덤프여야 합니다.There should be a hex dump of a ticket with Server Principal = krbtgt/MYREALM.COM@MYREALM.COM. KDC에 인증되고 TGT를 받은 SQL ServerSQL Server를 나타냅니다.It indicates that SQL ServerSQL Server successfully authenticated against the KDC and received a TGT. 이 덤프가 없으면 Hadoop이 아닌 KDC와 SQL ServerSQL Server 간에 문제가 있습니다.If not, the problem lies strictly between SQL ServerSQL Server and the KDC, and not Hadoop.

PolyBase는 AD와 MIT 간의 트러스트 관계를 지원하지 않으며 Hadoop 클러스터에 구성된 동일한 KDC에 대해 구성해야 합니다.PolyBase does not support trust relationships between AD and MIT and must be configured against the same KDC as configured in the Hadoop cluster. 이러한 환경에서는 해당 KDC에 서비스 계정을 수동으로 만들고 해당 계정을 사용하여 인증을 수행하면 됩니다.In such environments, manually creating a service account on that KDC and using that to perform authentication will work.

|>>> KrbAsReq creating message 
 >>> KrbKdcReq send: kdc=kerberos.contoso.com UDP:88, timeout=30000, number of retries =3, #bytes=143 
 >>> KDCCommunication: kdc=kerberos.contoso.com UDP:88, timeout=30000,Attempt =1, #bytes=143 
 >>> KrbKdcReq send: #bytes read=646 
 >>> KdcAccessibility: remove kerberos.contoso.com 
 >>> EType: sun.security.krb5.internal.crypto.Des3CbcHmacSha1KdEType 
 >>> KrbAsRep cons in KrbAsReq.getReply myuser 
 [2017-04-25 21:34:33,548] INFO 687[main] - com.microsoft.polybase.client.KerberosSecureLogin.secureLogin(KerberosSecureLogin.java:97) - Subject: 
 Principal: admin_user@CONTOSO.COM 
 Private Credential: Ticket (hex) = 
 0000: 61 82 01 48 30 82 01 44 A0 03 02 01 05 A1 0E 1B a..H0..D........ 
 0010: 0C 41 50 53 48 44 50 4D 53 2E 43 4F 4D A2 21 30 .CONTOSO.COM.!0 
 0020: 1F A0 03 02 01 02 A1 18 30 16 1B 06 6B 72 62 74 ........0...krbt 
 0030: 67 74 1B 0C 41 50 53 48 44 50 4D 53 2E 43 4F 4D gt..CONTOSO.COM 
 0040: A3 82 01 08 30 82 01 04 A0 03 02 01 10 A1 03 02 ....0........... 
 *[...Condensed...]* 
 0140: 67 6D F6 41 6C EB E0 C3 3A B2 BD B1 gm.Al...:... 
 Client Principal = admin_user@CONTOSO.COM 
 Server Principal = krbtgt/CONTOSO.COM@CONTOSO.COM 
 *[...Condensed...]* 
 [2017-04-25 21:34:34,500] INFO 1639[main] - com.microsoft.polybase.client.HdfsBridge.main(HdfsBridge.java:1579) - Successfully authenticated against KDC server. 

검사점 2Checkpoint 2

PolyBase가 HDFS에 액세스하려고 시도하며 요청에 필요한 서비스 티켓이 포함되어 있지 않으므로 액세스에 실패합니다.PolyBase will make an attempt to access the HDFS and fail because the request did not contain the necessary Service Ticket.

 [2017-04-25 21:34:34,501] INFO 1640[main] - com.microsoft.polybase.client.HdfsBridge.main(HdfsBridge.java:1584) - Attempting to access external filesystem at URI: hdfs://10.193.27.232:8020 
 Found ticket for admin_user@CONTOSO.COM to go to krbtgt/CONTOSO.COM@CONTOSO.COM expiring on Wed Apr 26 21:34:33 UTC 2017 
 Entered Krb5Context.initSecContext with state=STATE_NEW 
 Found ticket for admin_user@CONTOSO.COM to go to krbtgt/CONTOSO.COM@CONTOSO.COM expiring on Wed Apr 26 21:34:33 UTC 2017 
 Service ticket not found in the subject 

검사점 3Checkpoint 3

두 번째 16진수 덤프는 SQL ServerSQL Server가 TGT를 사용하여 KDC에서 이름 노드 SPN에 적용되는 서비스 티켓을 가져왔음을 나타냅니다.A second hex dump indicates that SQL ServerSQL Server successfully used the TGT and acquired the applicable Service Ticket for the name node's SPN from the KDC.

 >>> KrbKdcReq send: kdc=kerberos.contoso.com UDP:88, timeout=30000, number of retries =3, #bytes=664 
 >>> KDCCommunication: kdc=kerberos.contoso.com UDP:88, timeout=30000,Attempt =1, #bytes=664 
 >>> KrbKdcReq send: #bytes read=669 
 >>> KdcAccessibility: remove kerberos.contoso.com 
 >>> EType: sun.security.krb5.internal.crypto.Des3CbcHmacSha1KdEType 
 >>> KrbApReq: APOptions are 00100000 00000000 00000000 00000000 
 >>> EType: sun.security.krb5.internal.crypto.Des3CbcHmacSha1KdEType 
 Krb5Context setting mySeqNumber to: 1033039363 
 Created InitSecContextToken: 
 0000: 01 00 6E 82 02 4B 30 82 02 47 A0 03 02 01 05 A1 ..n..K0..G...... 
 0010: 03 02 01 0E A2 07 03 05 00 20 00 00 00 A3 82 01 ......... ...... 
 0020: 63 61 82 01 5F 30 82 01 5B A0 03 02 01 05 A1 0E ca.._0..[....... 
 0030: 1B 0C 41 50 53 48 44 50 4D 53 2E 43 4F 4D A2 26 ..CONTOSO.COM.& 
 0040: 30 24 A0 03 02 01 00 A1 1D 30 1B 1B 02 6E 6E 1B 0$.......0...nn. 
 0050: 15 73 68 61 73 74 61 2D 68 64 70 32 35 2D 30 30 .hadoop-hdp25-00 
 0060: 2E 6C 6F 63 61 6C A3 82 01 1A 30 82 01 16 A0 03 .local....0..... 
 0070: 02 01 10 A1 03 02 01 01 A2 82 01 08 04 82 01 04 ................ 
 *[...Condensed...]* 
 0240: 03 E3 68 72 C4 D2 8D C2 8A 63 52 1F AE 26 B6 88 ..hr.....cR..&.. 
 0250: C4 . 

검사점 4Checkpoint 4

마지막으로 대상 경로의 파일 속성이 확인 메시지와 함께 출력되어야 합니다.Finally, the file properties of the target path should be printed along with a confirmation message. 이 파일 속성은 SQL ServerSQL Server가 ST를 사용하여 Hadoop에서 인증되었고 보안 리소스에 대한 액세스 권한이 세션에 부여되었음을 확인합니다.The file properties confirm SQL ServerSQL Server was authenticated by Hadoop using the ST and a session was granted to access the secured resource.

이 지점에 도달하면 (i) 세 행위자가 제대로 통신할 수 있고, (ii) core-site.xml과 jaas.conf가 적절하며, (iii) KDC가 자격 증명을 인식했음을 나타냅니다.Reaching this point confirms that: (i) the three actors are able to communicate correctly, (ii) the core-site.xml and jaas.conf are correct, and (iii) your KDC recognized your credentials.

 [2017-04-25 21:34:35,096] INFO 2235[main] - com.microsoft.polybase.client.HdfsBridge.main(HdfsBridge.java:1586) - File properties for "/": FileStatus{path=hdfs://10.193.27.232:8020/; isDirectory=true; modification_time=1492028259862; access_time=0; owner=hdfs; group=hdfs; permission=rwxr-xr-x; isSymlink=false} 
 [2017-04-25 21:34:35,098] INFO 2237[main] - com.microsoft.polybase.client.HdfsBridge.main(HdfsBridge.java:1587) - Successfully accessed the external file system. 

일반 오류Common errors

도구가 실행되고 대상 경로의 파일 속성이 출력되지 않은 경우(검사점 4), 중간에 예외가 throw되었을 수 있습니다.If the tool was run and the file properties of the target path were not printed (Checkpoint 4), there should be an exception thrown midway. 이 예외를 검토하고 검토 4단계 흐름에서 이 예외가 발생한 상황을 고려하세요.Review it and consider the context of where in the four-step flow it occurred. 발생할 수 있는 다음의 일반 오류를 순서대로 고려하세요.Consider the following common issues that may have occurred, in order:

예외 및 메시지Exception and messages 원인Cause
org.apache.hadoop.security.AccessControlExceptionorg.apache.hadoop.security.AccessControlException
단순 인증을 사용할 수 없습니다.SIMPLE authentication is not enabled. 사용 가능:[TOKEN, KERBEROS]Available:[TOKEN, KERBEROS]
core-site.xml에서 hadoop.security.authentication 속성이 “KERBEROS”로 설정되어 있지 않습니다.The core-site.xml doesn't have the hadoop.security.authentication property set to "KERBEROS".
javax.security.auth.login.LoginExceptionjavax.security.auth.login.LoginException
Kerberos 데이터베이스에서 클라이언트를 찾을 수 없음 (6) - CLIENT_NOT_FOUNDClient not found in Kerberos database (6) - CLIENT_NOT_FOUND
지정된 관리 서비스 사용자가 core-site.xml에 지정된 영역에 없습니다.The admin Service Principal supplied does not exist in the realm specified in core-site.xml.
javax.security.auth.login.LoginExceptionjavax.security.auth.login.LoginException
체크섬 실패Checksum failed
관리 서비스 사용자가 있지만 암호가 잘못되었습니다.Admin Service Principal exists, but bad password.
네이티브 구성 이름: C:\Windows\krb5.iniNative config name: C:\Windows\krb5.ini
기본 구성에서 로드됨Loaded from native config
이 메시지는 Java의 krb5LoginModule이 머신에서 사용자 지정 클라이언트 구성을 검색했음을 나타냅니다.This message indicates that Java's krb5LoginModule detected custom client configurations on your machine. 문제를 일으킬 수 있는 사용자 지정 클라이언트 설정을 확인합니다.Check your custom client settings as they may be causing the issue.
javax.security.auth.login.LoginExceptionjavax.security.auth.login.LoginException
java.lang.IllegalArgumentExceptionjava.lang.IllegalArgumentException
잘못된 사용자 이름 admin_user@CONTOSO.COM: org.apache.hadoop.security.authentication.util.KerberosName$NoMatchingRule: admin_user@CONTOSO.COM에 적용된 규칙 없음Illegal principal name admin_user@CONTOSO.COM: org.apache.hadoop.security.authentication.util.KerberosName$NoMatchingRule: No rules applied to admin_user@CONTOSO.COM
Hadoop 클러스터당 적절한 규칙을 사용하여 “hadoop.security.auth_to_local” 속성을 core-site.xml에 추가합니다.Add the property "hadoop.security.auth_to_local" to core-site.xml with the appropriate rules per the Hadoop cluster.
java.net.ConnectExceptionjava.net.ConnectException
다음 URI의 외부 파일 시스템에 액세스하려는 중: hdfs://10.193.27.230:8020Attempting to access external filesystem at URI: hdfs://10.193.27.230:8020
IAAS16981207/10.107.0.245에서 10.193.27.230:8020 사이의 호출이 연결 예외로 실패Call From IAAS16981207/10.107.0.245 to 10.193.27.230:8020 failed on connection exception
KDC에 대한 인증에 성공했지만 Hadoop 이름 노드에 액세스하지 못했습니다.Authentication against the KDC was successful, but it failed to access the Hadoop name node. 이름 노드 IP 및 포트를 확인합니다.Check the name node IP and port. Hadoop에서 방화벽이 사용되지 않는지 확인합니다.Verify the firewall is disabled on Hadoop.
java.io.FileNotFoundExceptionjava.io.FileNotFoundException
파일이 없음: /test/data.csvFile does not exist: /test/data.csv
인증에 성공했지만 지정한 위치가 없습니다.Authentication was successful, but the location specified does not exist. 경로를 확인하거나 먼저 루트 “/”를 사용하여 테스트합니다.Check the path or test with root "/" first.

디버깅 팁Debugging tips

MIT KDCMIT KDC

관리자를 포함하여 KDC에 등록된 모든 SPN은 KDC 호스트나 구성된 KDC 클라이언트에서 kadmin.local > (관리자 로그인) > listprincs 를 실행하여 확인할 수 있습니다.All the SPNs registered with the KDC, including the admins, can be viewed by running kadmin.local > (admin login) > listprincs on the KDC host or any configured KDC client. Kerberos가 Hadoop 클러스터에서 제대로 구성되면 클러스터에서 사용 가능한 각 서비스(예: nn, dn, rm, yarn, spnego 등)에 SPN이 하나씩 있어야 합니다. 해당 keytab 파일(암호 대체)은 기본적으로 /etc/security/keytabs 에서 볼 수 있습니다.If Kerberos is properly configured on the Hadoop cluster, there should be one SPN for each one of the services available in the cluster (for example: nn, dn, rm, yarn, spnego, etc.) Their corresponding keytab files (password substitutes) can be seen under /etc/security/keytabs, by default. 이 파일은 KDC 프라이빗 키를 사용하여 암호화됩니다.They are encrypted using the KDC private key.

kinit를 사용하여 KDC에서 로컬로 관리자 자격 증명을 확인하는 것도 좋습니다.Also consider using kinit to verify the admin credentials on the KDC locally. 예제 사용량은 kinit identity@MYREALM.COM입니다.An example usage would be: kinit identity@MYREALM.COM. 암호를 묻는 메시지가 표시되면 ID가 있는 것입니다.A prompt for a password indicates the identity exists.
KDC 로그는 기본적으로 /var/log/krb5kdc.log 에서 확인할 수 있으며, 이 로그에는 모든 티켓 요청과 요청한 클라이언트 IP가 포함되어 있습니다.The KDC logs are available in /var/log/krb5kdc.log, by default, which includes all of the requests for tickets including the client IP that made the request. 도구가 실행된 SQL ServerSQL Server 머신 IP에서 보낸 요청이 두 개 있어야 합니다. 먼저 인증 서버에서 보낸 TGT 요청이 AS_REQ 로 표시되고, 그다음에 허용 티켓 서버에서 보낸 ST 요청이 TGS_REQ 로 표시됩니다.There should be two requests from the SQL ServerSQL Server machine's IP wherein the tool was run: first for the TGT from the Authenticating Server as an AS_REQ, followed by a TGS_REQ for the ST from the Ticket Granting Server.

 [root@MY-KDC log]# tail -2 /var/log/krb5kdc.log 
 May 09 09:48:26 MY-KDC.local krb5kdc[2547](info): **AS_REQ** (3 etypes {17 16 23}) 10.107.0.245: ISSUE: authtime 1494348506, etypes {rep=16 tkt=16 ses=16}, admin_user@CONTOSO.COM for **krbtgt/CONTOSO.COM@CONTOSO.COM** 
 May 09 09:48:29 MY-KDC.local krb5kdc[2547](info): **TGS_REQ** (3 etypes {17 16 23}) 10.107.0.245: ISSUE: authtime 1494348506, etypes {rep=16 tkt=16 ses=16}, admin_user@CONTOSO.COM for **nn/hadoop-hdp25-00.local@CONTOSO.COM** 

Active DirectoryActive Directory

Active Directory에서는 [제어판] > [Active Directory 사용자 및 컴퓨터] > MyRealm > MyOrganizationalUnit 으로 이동하여 SPN을 확인할 수 있습니다.In Active Directory, the SPNs can be viewed by browsing to Control Panel > Active Directory Users and Computers > MyRealm > MyOrganizationalUnit. Kerberos가 Hadoop 클러스터에서 제대로 구성되면 각각의 서비스(예: nn, dn, rm, yarn, spnego 등)에 사용할 수 있는 SPN이 하나씩 있습니다.If Kerberos is properly configured on the Hadoop cluster, there is one SPN for each one of the services available (for example: nn, dn, rm, yarn, spnego, etc.)

일반 디버깅 팁General debugging tips

SQL Server PolyBase 기능과 독립적으로 Java 환경을 통해 로그를 살펴보고 Kerberos 문제를 디버그하는 데 유용합니다.It is helpful to have some java experience to look into the logs and debug the Kerberos issues, which are independent of SQL server PolyBase feature.

Kerberos를 액세스하는 문제가 여전히 발생하는 경우 아래 단계를 수행하여 디버그하세요.If you are still having issues accessing Kerberos, follow the steps below to debug:

  1. SQL ServerSQL Server 외부에서 Kerberos HDFS 데이터에 액세스할 수 있는지 확인합니다.Make sure you can access the Kerberos HDFS data from outside SQL ServerSQL Server. 다음 작업 중 하나를 수행할 수 있습니다.You can either:

    • 고유한 Java 프로그램을 작성하거나Write your own java program or

    • PolyBase 설치 폴더에서 HdfsBridge 클래스를 사용하세요.Use HdfsBridge class from PolyBase installation folder. 예를 들면 다음과 같습니다.For example:

      -classpath ".\Hadoop\conf;.\Hadoop\*;.\Hadoop\HDP2_2\*" com.microsoft.polybase.client.HdfsBridge 10.193.27.232 8020 admin_user C:\temp\kerberos_pass.txt
      

    위의 예제에서 admin_user는 도메인 파트가 아닌 사용자 이름만 포함합니다.In the example above, admin_user includes only the user name - not any domain part.

  2. PolyBase 외부에서 Kerberos HDFS 데이터에 액세스할 수 없는 경우:If you can't access Kerberos HDFS data from outside PolyBase:

    • Kerberos 인증에는 Active Directory Kerberos 인증 및 MIT Kerberos 인증이라는 두 가지 종류가 있습니다.There are two types of Kerberos authentication: Active directory Kerberos authentication, and MIT Kerberos authentication.
    • 사용자가 도메인 계정에 있고 HDFS에 액세스하는 동안 동일한 사용자 계정을 사용하는지 확인합니다.Make sure the user exists in domain account and use the same user account while trying to access HDFS.
  3. Active Directory Kerberos의 경우 Windows에서 klist 명령을 사용하여 캐시된 티켓을 볼 수 있는지 확인합니다.For active directory Kerberos, make sure you can see cached ticket using klist command on Windows.

    • PolyBase 머신에 로그인하고 명령 프롬프트에서 klistklist tgt를 실행하여 KDC, 사용자 이름 및 암호화 형식이 올바른지 확인합니다.Log in into PolyBase machine and run klist and klist tgt in command prompt to see if the KDC, username, and encryption types are correct.
  4. KDC에서 AES256을 지원할 수 있는 경우 JCE 정책 파일을 설치했는지 확인합니다.If KDC can only support AES256, make sure JCE policy files are installed.

참고 항목See also

Integrating PolyBase with Cloudera using Active Directory Authentication(Active Directory 인증을 사용하여 PolyBase와 Cloudera 통합)Integrating PolyBase with Cloudera using Active Directory Authentication
Cloudera’s Guide to setting up Kerberos for CDH(CDH의 Kerberos 설정에 대한 Cloudera 가이드)Cloudera's Guide to setting up Kerberos for CDH
Hortonworks’ Guide to Setting up Kerberos for HDP(HDP의 Kerberos 설정에 대한 Hortonworks 가이드)Hortonworks' Guide to Setting up Kerberos for HDP
PolyBase 문제 해결 PolyBase troubleshooting
PolyBase 오류 및 가능한 해결 방법PolyBase errors and possible solutions