为安全HDFS配置PXF
为您的HDFS文件系统启用Kerberos时,作为HDFS客户端的PXF需要principal文件和keytab文件来验证对HDFS的访问。要在安全的HDFS上读取或写入文件,必须创建和部署PXF的Kerberos主体和keytab文件,并确保Kerberos身份验证已启用并起作用。
准备
在你配置PXF去访问需要安全访问的HDFS文件系统之前,确保你已经做到:
使用默认的PXF服务器配置配置了Hadoop连接器。
按照Configuring PXF章节秒速初始化、配置和启动PXF,包括PXF功能和Hadoop用户模拟功能启用
根据特定分发的说明为Hadoop集群启用Kerberos,并验证配置。
确保HDFS的配置参数
dfs.block.access.token.enable
已经被设置成了true
。你可以在你hadoop集群的hdfs-site.xml
配置文件中找到该配置。注意每个Greenplum数据库segment主机(<seghost>)和Kerberos密钥分发中心(KDC) <kdc-server>主机的主机名或IP地址
注意群集所在的Kerberos <realm> 的名称。
过程
按照如下流程为有安全的HDFS配置PXF。您将在Kerberos KDC服务器和Greenplum数据库segment主机上执行操作。
登录到Kerberos KDC服务主机执行如下操作:
使用
root
账户登录到 Kerberos KDC 服务主机。$ ssh root@<kdc-server> root@kdc-server$
如果你的集群主机不存在配置文件的话,需要在KDC服务主机上分发
/etc/krb5.conf
配置文件到GPDB的每一个的segment节点,例如:root@kdc-server$ scp /etc/krb5.conf seghost:/etc/krb5.conf
使用
kadmin.local
命令为GPDB的每个segment节点主机创建一个Kerberos PXF服务主体。服务主体的格式应为gpadmin/<seghost>@<realm>
,其中<seghost>是segment主机系统的DNS可解析的全限定主机名(hostname -f
命令的输出)。例如,以下命令在名为EXAMPLE.COM的Kerberos领域中为名为host1.example.com,host2.example.com
和host3.example.com
的主机创建PXF服务主体:root@kdc-server$ kadmin.local -q "addprinc -randkey -pw changeme gpadmin/host1.example.com@EXAMPLE.COM" root@kdc-server$ kadmin.local -q "addprinc -randkey -pw changeme gpadmin/host2.example.com@EXAMPLE.COM" root@kdc-server$ kadmin.local -q "addprinc -randkey -pw changeme gpadmin/host3.example.com@EXAMPLE.COM"
为每个Kerberos PXF服务主体生成一个密钥表文件。 将密钥表文件保存在任何方便的位置(本示例使用目录
/etc/security/keytabs
)。 您将在以后的步骤中将keytab文件部署到它们各自的Greenplum数据库segment主机。 例如:root@kdc-server$ kadmin.local -q "xst -norandkey -k /etc/security/keytabs/pxf-host1.service.keytab gpadmin/host1.example.com@EXAMPLE.COM" root@kdc-server$ kadmin.local -q "xst -norandkey -k /etc/security/keytabs/pxf-host2.service.keytab gpadmin/host2.example.com@EXAMPLE.COM" root@kdc-server$ kadmin.local -q "xst -norandkey -k /etc/security/keytabs/pxf-host3.service.keytab gpadmin/host3.example.com@EXAMPLE.COM"
根据需要重复
xst
命令用以在每个PXF服务主体上生成一个秘钥表。列出principals:
root@kdc-server$ kadmin.local -q "listprincs"
将每个PXF服务主体的密钥表文件复制到其各自的segment主机。 例如,以下命令在
PXF_CONF=/usr/local/greenplum-pxf
时,将在步骤4中生成的每个主体复制到segment主机上的PXF默认keytab目录中root@kdc-server$ scp /etc/security/keytabs/pxf-host1.service.keytab host1.example.com:/usr/local/greenplum-pxf/keytabs/pxf.service.keytab root@kdc-server$ scp /etc/security/keytabs/pxf-host2.service.keytab host2.example.com:/usr/local/greenplum-pxf/keytabs/pxf.service.keytab root@kdc-server$ scp /etc/security/keytabs/pxf-host3.service.keytab host3.example.com:/usr/local/greenplum-pxf/keytabs/pxf.service.keytab
Note the file system location of the keytab file on each PXF host; you will need this information for a later configuration step.
更改
pxf.service.keytab
文件的属主和权限。 这些文件必须仅由gpadmin
用户拥有并可读。 例如:root@kdc-server$ ssh host1.example.com chown gpadmin:gpadmin /usr/local/greenplum-pxf/keytabs/pxf.service.keytab root@kdc-server$ ssh host1.example.com chmod 400 /usr/local/greenplum-pxf/keytabs/pxf.service.keytab root@kdc-server$ ssh host2.example.com chown gpadmin:gpadmin /usr/local/greenplum-pxf/keytabs/pxf.service.keytab root@kdc-server$ ssh host2.example.com chmod 400 /usr/local/greenplum-pxf/keytabs/pxf.service.keytab root@kdc-server$ ssh host3.example.com chown gpadmin:gpadmin /usr/local/greenplum-pxf/keytabs/pxf.service.keytab root@kdc-server$ ssh host3.example.com chmod 400 /usr/local/greenplum-pxf/keytabs/pxf.service.keytab
在每个GPDB的segment节点执行以下步骤:
登录segment节点,例如:
$ ssh gpadmin@<seghost>
如果在Greenplum的各个segment节点上Kerberos客户端包还没有被安装,那么首先安装他们。您必须具有超级用户权限才能安装操作系统软件包。 例如:
root@seghost$ rpm -qa | grep krb root@seghost$ yum install krb5-libs krb5-workstation
打开
pxf-env.sh
用户配置文件。例如使用vi命令打开PXF_CONF=/usr/local/greenplum-pxf
:gpadmin@seghost$ vi /usr/local/greenplum-pxf/conf/pxf-env.sh
更新
PXF_KEYTAB
和PXF_PRINCIPAL
配置. 指定keytab 文件 和 Kerberos principal的位置。这些设置的默认值如下所示:export PXF_KEYTAB="${PXF_CONF}/keytabs/pxf.service.keytab" export PXF_PRINCIPAL="gpadmin/_HOST@EXAMPLE.COM"
PXF automatically replaces
_HOST
with the FQDN of the segment host.在segment上重启PXF服务:
gpadmin@seghost$ $GPHOME/pxf/bin/pxf restart