기본 Apache hadoop3.3.1 클러스터 설치 및 구성 Kerberos

Kerberos를 설치하려면 내 다른 기사를 읽어보세요. hadoop을 직접 구성해 보겠습니다.

CDH 구성 Kerberos 및 Sentry_cdh kerberos 구성에 대한 자세한 설명_Mumunu의 블로그-CSDN 블로그

 Kerberos를 배포한 후 먼저 사용자를 추가하고 인증 파일을 생성합니다.

KDC에서 인증이 필요한 사용자를 추가하는 것은 특정 사용자에 따라 다릅니다(hadoop 클러스터는 주로 hdfs에서 관리하므로 hdfs 계정 및 HTTP 계정 생성 외에도 hive, hbase 및 dwetl도 hadoop 클러스터에 액세스합니다. 사용자는 아래와 같이 이런 방식으로 추가 항목을 추가할 수 있습니다.

형식은 다음과 같습니다: 사용자 이름/호스트 호스트 이름@HADOOP.COM

kadmin.local -q "addprinc -randkey HTTP/[email protected]"
所有需要加入集群的节点都需要一个对应的账密和keytab
kadmin.local -q "addprinc -randkey HTTP/[email protected]"
kadmin.local -q "addprinc -randkey HTTP/[email protected]"
像这样 下面省略

kadmin.local -q "addprinc -randkey hive/[email protected]"

kadmin.local -q "addprinc -randkey hbase/[email protected]"

kadmin.local -q "addprinc -randkey hdfs/[email protected]"

kadmin.local -q "addprinc -randkey presto/[email protected]"

kadmin.local -q "addprinc -randkey dwetl/[email protected]"

2、按用户批量生成 keytab

kadmin.local -q "xst -k /export/common/kerberos5/hdfs.keytab HTTP/[email protected]"
kadmin.local -q "xst -k /export/common/kerberos5/hdfs.keytab HTTP/[email protected]"
kadmin.local -q "xst -k /export/common/kerberos5/hdfs.keytab HTTP/[email protected]"

kadmin.local -q "xst -k /export/common/kerberos5/hive.keytab hive/[email protected]"

kadmin.local -q "xst -k /export/common/kerberos5/hbase.keytab hbase/[email protected]"

kadmin.local -q "xst -k /export/common/kerberos5/hdfs.keytab hdfs/[email protected]"

kadmin.local -q "xst -k /export/common/kerberos5/presto-server.keytab presto/[email protected]"

kadmin.local -q "xst -k /export/common/kerberos5/dwetl.keytab dwetl/[email protected]"

해당 사용자의 keytab 파일은 현재 /export/common/kerberos5 디렉터리에 생성됩니다. 그런 다음 kdc 및 클라이언트를 포함하여 각 시스템에 hadoop.keytab을 배포합니다(참고: 배포 후에는 다른 사용자가 키탭에 액세스하므로 해당 권한을 키탭 파일에 할당해야 합니다).

HTTPS 보안 전송 프로토콜을 사용하도록 HDFS 구성

A. 키 쌍 생성

Keytool은 사용자가 자신의 공개/개인 키 쌍과 관련 인증서를 관리할 수 있게 해주는 Java 데이터 인증서 관리 도구입니다.

  • -keystore 키 저장소의 이름과 위치를 지정합니다(생성된 다양한 정보는 .keystore 파일에 저장됩니다).
  • - genkey(또는 -genkeypair) 키 쌍 생성
  • -alias 생성된 키 쌍의 별칭을 지정하세요. 그렇지 않은 경우 기본값은 mykey입니다.
  • -keyalg 키 알고리즘 RSA/DSA를 지정합니다. 기본값은 DSA입니다.

키 저장소 비밀번호와 키 저장소에 대한 해당 정보를 생성합니다.

[root@hadoop102 ~]# keytool -keystore /etc/security/keytab/keystore -alias jetty -genkey -keyalg RSA输入密钥库口令:  
再次输入新口令: 
您的名字与姓氏是什么?[Unknown]:  
您的组织单位名称是什么?[Unknown]:  
您的组织名称是什么?[Unknown]:  
您所在的城市或区域名称是什么?[Unknown]:  
您所在的省/市/自治区名称是什么?[Unknown]:  
该单位的双字母国家/地区代码是什么?[Unknown]:  
CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown是否正确?[否]:  y
输入 <jetty> 的密钥口令
(如果和密钥库口令相同, 按回车):  
再次输入新口令:

B. 키스토어 파일의 소유자 및 접근 권한을 수정합니다.

[root@hadoop102 ~]# chown -R root:hadoop /etc/security/keytab/keystore
[root@hadoop102 ~]# chmod 660 /etc/security/keytab/keystore

알아채다:

  • 키스토어의 비밀번호는 6자 이상이어야 하며, 순수 숫자, 문자 또는 숫자와 문자의 조합 등을 사용할 수 있습니다.
  • hdfs 사용자(HDFS 시작 사용자)에게 생성된 키 저장소 파일에 대한 읽기 권한이 있는지 확인하십시오.

C. 클러스터 내 각 노드의 동일한 경로에 인증서를 배포합니다.

[root@hadoop102 ~]# xsync /etc/security/keytab/keystore

2. 클러스터 구성 파일
1.hdfs를 수정하고 다음 구성
core-site.xml을 추가합니다.

<property>
<name>hadoop.security.authorization</name>
<value>true</value>
</property>
 
<property>
<name>hadoop.security.authentication</name>
<value>kerberos</value>
</property>


hdfs-site.xml

<!-- kerberos start -->
<!-- namenode -->
 
<property>
<name>dfs.namenode.keytab.file</name>
<value>/export/common/kerberos5/hdfs.keytab</value>
</property>
 
<property>
<name>dfs.namenode.kerberos.principal</name>
<value>hdfs/[email protected]</value>
</property>
 
<property>
<name>dfs.namenode.kerberos.internal.spnego.principal</name>
<value>HTTP/[email protected]</value>
</property>
 
<property>
<name>dfs.namenode.kerberos.internal.spnego.keytab</name>
<value>/export/common/kerberos5/HTTP.keytab</value>
</property>

<property>
<name>dfs.web.authentication.kerberos.principal</name>
<value>HTTP/[email protected]</value>
</property>
 
<property>
<name>dfs.web.authentication.kerberos.keytab</name>
<value>/export/common/kerberos5/HTTP.keytab</value>
</property>
 
<!-- datanode -->
<property>
<name>dfs.datanode.keytab.file</name>
<value>/export/common/kerberos5/hdfs.keytab</value>
</property>
 
<property>
<name>dfs.datanode.kerberos.principal</name>
<value>hdfs/[email protected]</value>
</property>
 
<property>
<name>dfs.http.policy</name>
<value>HTTPS_ONLY</value>
</property>
 
<!-- <property>
<name>dfs.https.port</name>
<value>50470</value>
</property> -->
 
<property>
<name>dfs.data.transfer.protection</name>
<value>integrity</value>
</property>
 
<property>
<name>dfs.block.access.token.enable</name>
<value>true</value>
</property>
 
<property> 
<name>dfs.datanode.data.dir.perm</name>
<value>700</value>
</property>
 
<!--
<property>
<name>dfs.datanode.https.address</name>
<value>0.0.0.0:50475</value>
</property> -->
 
 
 
<!-- journalnode -->
<property>
<name>dfs.journalnode.keytab.file</name>
<value>/export/common/kerberos5/hdfs.keytab</value>
</property>
 
<property>
<name>dfs.journalnode.kerberos.principal</name>
<value>hdfs/[email protected]</value>
</property>
 
<property>
<name>dfs.journalnode.kerberos.internal.spnego.principal</name>
<value>HTTP/[email protected]</value>
</property>

<property>
<name>dfs.journalnode.kerberos.internal.spnego.keytab</name>
<value>/export/common/kerberos5/HTTP.keytab</value>
</property>
 
<!-- kerberos end-->


 hadoop_env.sh

export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=${JAVA_HOME}/lib -Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.krb5.realm=HADOOP.COM -Djava.security.krb5.kdc=192.168.0.49:88"


ssl-server.xml(hadoop 구성 디렉터리: /export/common/hadoop/conf, Empower hdfs:hadoop에 위치)

         

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at
       http://www.apache.org/licenses/LICENSE-2.0
   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->
 
<configuration>
 
 
 
<property>
  <name>ssl.server.truststore.location</name>
  <value>/etc/security/keytab/keystore</value>
  <description>Truststore to be used by NN and DN. Must be specified.
  </description>
</property>
 
<property>
  <name>ssl.server.truststore.password</name>
  <value>123456</value>
  <description>Optional. Default value is "".
  </description>
</property>
 
<property>
  <name>ssl.server.truststore.type</name>
  <value>jks</value>
  <description>Optional. The keystore file format, default value is "jks".
  </description>
</property>
 
<property>
  <name>ssl.server.truststore.reload.interval</name>
  <value>10000</value>
  <description>Truststore reload check interval, in milliseconds.
  Default value is 10000 (10 seconds).
  </description>
</property>
 
<property>
  <name>ssl.server.keystore.location</name>
  <value>/etc/security/keytab/keystore</value>
  <description>Keystore to be used by NN and DN. Must be specified.
  </description>
</property>
 
<property>
  <name>ssl.server.keystore.password</name>
  <value>123456</value>
  <description>Must be specified.
  </description>
</property>
 
<property>
  <name>ssl.server.keystore.keypassword</name>
  <value>123456</value>
  <description>Must be specified.
  </description>
</property>
 
<property>
  <name>ssl.server.keystore.type</name>
  <value>jks</value>
  <description>Optional. The keystore file format, default value is "jks".
  </description>
</property>
 
<property>
  <name>ssl.server.exclude.cipher.list</name>
  <value>TLS_ECDHE_RSA_WITH_RC4_128_SHA,SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA,
  SSL_RSA_WITH_DES_CBC_SHA,SSL_DHE_RSA_WITH_DES_CBC_SHA,
  SSL_RSA_EXPORT_WITH_RC4_40_MD5,SSL_RSA_EXPORT_WITH_DES40_CBC_SHA,
  SSL_RSA_WITH_RC4_128_MD5</value>
  <description>Optional. The weak security cipher suites that you want excluded
  from SSL communication.</description>
</property>
 
</configuration>


 
 ssl-client.xml(hadoop 구성 디렉터리: /export/common/hadoop/conf, Empower hdfs:hadoop에 위치)

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at
       http://www.apache.org/licenses/LICENSE-2.0
   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->
 
<configuration>
 
<property>
  <name>ssl.client.truststore.location</name>
  <value>/etc/security/keytab/keystore</value>
  <description>Truststore to be used by clients like distcp. Must be
  specified.
  </description>
</property>
 
<property>
  <name>ssl.client.truststore.password</name>
  <value>123456</value>
  <description>Optional. Default value is "".
  </description>
</property>
 
 
 
<property>
  <name>ssl.client.truststore.type</name>
  <value>jks</value>
  <description>Optional. The keystore file format, default value is "jks".
  </description>
</property>
 
 
 
<property>
  <name>ssl.client.truststore.reload.interval</name>
  <value>10000</value>
  <description>Truststore reload check interval, in milliseconds.
  Default value is 10000 (10 seconds).
  </description>
</property>
 
<property>
  <name>ssl.client.keystore.location</name>
  <value>/etc/security/keytab/keystore</value>
  <description>Keystore to be used by clients like distcp. Must be
  specified.
  </description>
</property>
 
<property>
  <name>ssl.client.keystore.password</name>
  <value>123456</value>
  <description>Optional. Default value is "".
  </description>
</property>
 
<property>
  <name>ssl.client.keystore.keypassword</name>
  <value>123456</value>
  <description>Optional. Default value is "".
  </description>
</property>
 
<property>
  <name>ssl.client.keystore.type</name>
  <value>jks</value>
  <description>Optional. The keystore file format, default value is "jks".
  </description>
</property>


</configuration>



2.yarn  은 다음 구성을 추가합니다.

<!-- resourcemanager -->
<property>
<name>yarn.web-proxy.principal</name>
<value>HTTP/[email protected]</value>
</property>
 
<property>
<name>yarn.web-proxy.keytab</name>
<value>/export/common/kerberos5/HTTP.keytab</value>
</property>
 
<property>
<name>yarn.resourcemanager.principal</name>
<value>hdfs/[email protected]</value>
</property>
 
<property>
<name>yarn.resourcemanager.keytab</name>
<value>/export/common/kerberos5/hdfs.keytab</value>
</property>
 
<!-- nodemanager -->
<property>
<name>yarn.nodemanager.principal</name>
<value>hdfs/[email protected]</value>
</property>
 
<property>
<name>yarn.nodemanager.keytab</name>
<value>/export/common/kerberos5/hdfs.keytab</value>
</property>
 
<property>
<name>yarn.nodemanager.container-executor.class</name>
<value>org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor</value>
</property>
 
<property>
<name>yarn.nodemanager.linux-container-executor.group</name>
<value>hdfs</value>
</property>
 
<!-- timeline kerberos -->
<property>
<name>yarn.timeline-service.http-authentication.type</name>
<value>kerberos</value>
<description>Defines authentication used for the timeline server HTTP endpoint. Supported values are: simple | kerberos | #AUTHENTICATION_HANDLER_CLASSNAME#</description>
 
</property>
<property>
<name>yarn.timeline-service.principal</name>
<value>hdfs/[email protected]</value>
</property>
 
<property>
<name>yarn.timeline-service.keytab</name>
<value>/export/common/kerberos5/hdfs.keytab</value>
</property>
 
<property>
<name>yarn.timeline-service.http-authentication.kerberos.principal</name>
<value>HTTP/[email protected]</value>
</property>
 
<property> 
  <name>yarn.timeline-service.http-authentication.kerberos.keytab</name>
  <value>/export/common/kerberos5/HTTP.keytab</value>
</property>
 
<property>
<name>yarn.nodemanager.container-localizer.java.opts</name>
<value>-Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.krb5.realm=HADOOP.COM -Djava.security.krb5.kdc=192.168.0.49 :88</value>
</property>
 
<property>
<name>yarn.nodemanager.health-checker.script.opts</name>
<value>-Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.krb5.realm=HADOOP.COM -Djava.security.krb5.kdc=192.168.0.49:88</value>
</property>


mapred-site.xml

<property>
<name>mapreduce.map.java.opts</name>
<value>-Xmx1638M -Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.krb5.realm=HADOOP.COM -Djava.security.krb5.kdc=192.168.0.49:88</value>
</property>
 
<property>
<name>mapreduce.reduce.java.opts</name>
<value>-Xmx3276M -Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.krb5.realm=HADOOP.COM -Djava.security.krb5.kdc=192.168.0.49:88</value>
</property>
 
<property>
<name>mapreduce.jobhistory.keytab</name>
<value>/export/common/kerberos5/hdfs.keytab</value>
</property>
 
<property>
<name>mapreduce.jobhistory.principal</name>
<value>hdfs/[email protected]</value>
</property>
 
<property>
<name>mapreduce.jobhistory.webapp.spnego-keytab-file</name>
<value>/export/common/kerberos5/HTTP.keytab</value>
</property>
 
<property>
<name>mapreduce.jobhistory.webapp.spnego-principal</name>
<value>HTTP/[email protected]</value>
</property>
 
<property>
<name>mapred.child.java.opts</name>
<value>-Xmx1024m -Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.krb5.realm=HADOOP.COM -Djava.security.krb5.kdc=192.168.0.49:88</value>
</property>
 
<property>
<name>yarn.app.mapreduce.am.command-opts</name>
<value>-Xmx3276m -Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.krb5.realm=HADOOP.COM -Djava.security.krb5.kdc=192.168.0.49:88</value>
</property>


3.hive는 다음 구성
hive-site.xml을 추가합니다.

<!--hiveserver2-->
<property>
<name>hive.server2.authentication</name>
<value>KERBEROS</value>
</property>

<property>
<name>hive.server2.authentication.kerberos.principal</name>
<value>hdfs/[email protected]</value>
</property>

<property>
<name>hive.server2.authentication.kerberos.keytab</name>
<value>/export/common/kerberos5/hdfs.keytab</value>
</property>

<!-- metastore -->

<property>
<name>hive.metastore.sasl.enabled</name>
<value>true</value>
</property>

<property>
<name>hive.metastore.kerberos.keytab.file</name>
<value>/export/common/kerberos5/hdfs.keytab</value>
</property>

<property>
<name>hive.metastore.kerberos.principal</name>
<value>hdfs/[email protected]</value>
</property>


4.hbase는 다음 구성 
hbase-site.xml을 추가합니다.

<!-- hbase配置kerberos安全认证start -->
 
    <property>
        <name>hbase.security.authentication</name>
        <value>kerberos</value>
    </property>
    <!-- 配置hbase rpc安全通信 -->
 
    <property>
        <name>hbase.rpc.engine</name>
        <value>org.apache.hadoop.hbase.ipc.SecureRpcEngine</value>
    </property>
    <!-- hmaster配置kerberos安全凭据认证 -->
 
    <property>
        <name>hbase.master.kerberos.principal</name>
        <value>hdfs/[email protected]</value>
    </property> -->
    <!-- hmaster配置kerberos安全证书keytab文件位置 -->
 
    <property>
        <name>hbase.master.keytab.file</name>
        <value>/export/common/kerberos5/hdfs.keytab</value>
    </property> -->
    <!-- regionserver配置kerberos安全凭据认证 -->
 
    <property>
        <name>hbase.regionserver.kerberos.principal</name>
        <value>hdfs/[email protected]</value>
    </property> -->
    <!-- regionserver配置kerberos安全证书keytab文件位置 -->
 
    <property>
        <name>hbase.regionserver.keytab.file</name>
        <value>/export/common/kerberos5/hdfs.keytab</value>
    </property>
 
<!--
    <property>
        <name>hbase.thrift.keytab.file</name>
        <value>/soft/conf/hadoop/hdfs.keytab</value>
    </property>

     <property>
         <name>hbase.thrift.kerberos.principal</name>
         <value>hdfs/[email protected]</value>
     </property>

     <property>
         <name>hbase.rest.keytab.file</name>
         <value>/soft/conf/hadoop/hdfs.keytab</value>
     </property>

     <property>
         <name>hbase.rest.kerberos.principal</name>
         <value>hdfs/[email protected]</value>
     </property>

     <property>
         <name>hbase.rest.authentication.type</name>
         <value>kerberos</value>
     </property>

     <property>
         <name>hbase.rest.authentication.kerberos.principal</name>
         <value>HTTP/[email protected]</value>
     </property>

     <property>
         <name>hbase.rest.authentication.kerberos.keytab</name>
         <value>/soft/conf/hadoop/HTTP.keytab</value>
     </property>
-->
<!-- hbase配置kerberos安全认证end -->


 

3. Kerberos 관련 명령
: 종료 권한: kdestroy

기본 kdc는 kadmin 관리를 엽니다: kadmin.local

현재 시스템에서 사용되는 Kerberos 계정 보기: klist

keytab을 사용하여 사용자 자격 증명을 가져옵니다.

kinit -kt /export/common/kerberos5/kadm5.keytab admin/[email protected]

키탭 내용 보기:

klist -k -e /export/common/kerberos5/hdfs.keytab

키탭 파일 생성:

kadmin.local -q "xst -k /export/common/kerberos5/hdfs.keytab admin/[email protected]"

Kerberos 인증 시간 연장: kinit -R

kdc 데이터베이스 삭제: rm -rf /export/common/kerberos5/principal (이 경로는 생성 시 새로 생성된 데이터베이스 경로입니다.)

4. 빠른 테스트
hdfs 테스트: hdfs 사용자로 전환하고 hdfs dfs -ls / 명령을 입력합니다. 인증이 필요합니다. 명령을 다시 입력하세요.

“kinit -kt /export/common/kerberos5/hdfs.keytab hdfs/`호스트 이름 | awk '{print tolower($0)}'`”

결과를 확인하면 hdfs와의 통합이 성공한 것입니다.

또한 몇 가지 중요한 변경 사항에 유의하십시오. 1. 작업을 제출한 사용자의 운영 체제 계정으로 작업을 시작하고 실행할 수 있으며, 노드 관리를 실행하는 사용자가 반드시 그런 것은 아닙니다. 이는 운영 체제를 사용하여 실행 중인 작업을 격리하여 서로 지시를 보낼 수 없도록 할 수 있다는 의미이며, 이러한 방식으로 로컬 파일 시스템의 보안을 통해 작업 데이터와 같은 로컬 정보의 개인 정보를 보호할 수 있습니다.

(yarn.nodemanager.container-executor.class를 org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor로 설정해야 합니다.)
 

추천

출처blog.csdn.net/h952520296/article/details/130869070