在 Active Directory 中创建主体和 Keytab
Active Directory 存储有关 Windows 域成员的信息,包括用户和主机。
Vertica 使用 Kerberos 协议访问此信息,以便对 Vertica 数据库的 Windows 用户进行身份验证。Kerberos 协议使用主体来识别用户,并使用 keytab 文件来存储他们的加密信息。您需要将 keytab 文件安装到 Vertica 中,使 Vertica 数据库能够以加密方式验证 Windows 用户。
此过程描述:
-
创建 Vertica 服务主体。
-
导出这些主体的 keytab 文件
-
在 Vertica 数据库中安装 keytab 文件。这将允许 Vertica 对 Windows 用户进行身份验证,并授予其访问 Vertica 数据库的权限。
-
为 Vertica 服务创建一个 Windows 帐户(主体),并为群集中的每个节点/主机创建一个 Vertica 主机。此过程将为在该节点上运行的主机
verticanode01
和服务vertica
创建 Windows 帐户。创建这些帐户时,请选择以下选项:
-
用户无法更改密码
-
密码永不过期
注意
您可以取消选择密码永不过期。但是,如果更改这些用户密码,则必须重新创建 keytab 文件并将其重新安装到 Vertica 中。这包括重复整个过程。 -
-
如果您在 HDFS 上使用受 Kerberos 身份验证保护的外部表,则必须启用“委派 (Delegation)”。为此,请访问 Active Directory 用户和计算机对话框,右键单击
Vertica
服务的 Windows 帐户(主体),然后选择“委派 (Delegation)”。信任此用户以委派给任何服务。 -
运行以下命令为主机
verticanode01.dc.com
节点/主机创建密钥表:$ ktpass -out ./host.verticanode01.dc.com.keytab -princ host/verticanode01.dc.com@DC.COM -mapuser verticanode01 -mapop set -pass secret -ptype KRB5_NT_SRV_HST
-
运行以下命令为
vertica
服务创建 Keytab:
$ ktpass -out ./vertica.verticanode01dc.com.keytab -princ vertica/verticanode01.dc.com@DC.COM -mapuser vertica -mapop set -pass secret -ptype KRB5_NT_PRINCIPAL
有关 Keytab 文件的详细信息,请参阅 Technet.Microsoft.com
-
运行以下命令以验证服务主体名称是否正确映射。您必须为群集中的每个节点运行以下命令:
$ setspn -L vertica Registered ServicePrincipalNamefor CN=vertica,CN=Users,DC=dc,DC=com vertica/verticanode01.dc.com $ setspn -L verticanode01 Registered ServicePrincipalNamefor CN=verticanode01,CN=Users,DC=dc,DC=com host/verticanode01.dc.com
-
将您刚才创建的密钥表
vertica.verticanode01.dc.com.keytab
和host.verticanode01.dc.com.keytab
复制到 Linux 主机verticanode01.dc.com
。 -
将多个 Keytab 文件组合成一个 Keytab:
[release@vertica krbTest]$ /usr/kerberos/sbin/ktutil ktutil: rkt host.verticanode01.dc.com.keytab ktutil: rkt vertica.verticanode01.dc.com.keytab ktutil: list slot KVNO Principal ---- ---- --------------------------------------------------------------------- 1 3 host/verticanode01.dc.com@DC.COM 2 16 vertica/verticanode01.dc.com@DC.COM ktutil: wkt verticanode01.dc.com.keytab ktutil: exit
这将创建一个 Keytab 文件,其中包含用于身份验证的服务器主体。
-
将新的 Keytab 文件复制到编录目录。例如:
$ cp verticanode01.dc.com.keytab /home/dbadmin/VMart/v_vmart_nodennnn_catalog
-
测试 Keytab 文件检索票证的能力,确保它可以从 Vertica 节点运行:
$ kinit vertica/verticanode01.dc.com -k -t verticanode01.dc.com.keytab $ klist Ticket cache: KFILE:/tmp/krb_ccache_1003 Default principal: vertica/verticanode01.dc.com@DC.COM Valid starting Expires Service principal 04/08/2017 13:35:25 04/08/2017 23:35:25 krbtgt/DC.COM@DC.COM renew until 04/15/2017 14:35:25
当票证过期或未自动取回时,您需要手动运行 kinit 命令。请参阅获取 Kerberos 票证并对 Vertica 进行身份验证。
-
对 Keytab 文件设置正确的权限和所有权:
$ chmod 600 verticanode01.dc.com.keytab $ chown dbadmin:verticadba verticanode01.dc.com.keytab
-
使用 ALTER DATABASE 设置以下 Kerberos 参数 通知 Vertica 有关 Kerberos 主体的信息:
KerberosKeytabFile=<CATALOGDIR>/verticanode01.dc.com.keytab KerberosRealm=DC.COM KerberosServiceName=vertica KerberosTicketDuration = 0 KerberosHostname=verticanode01.dc.com
-
重新启动 Vertica 服务器。
-
按如下所示测试 Kerberos 设置,确保所有客户端都使用 gss 身份验证方法。
从 Vertica:=> CREATE USER windowsuser1; CREATE USER => CREATE AUTHENTICATION v_kerberos method 'gss' host '0.0.0.0/0'; CREATE AUTHENTICATION => ALTER AUTHENTICATION v_kerberos enable; ALTER AUTHENTICATION => GRANT AUTHENTICATION v_kerberos to windowsuser1; GRANT AUTHENTICATION
从操作系统命令行:
$ kinit windowsuser1 $ vsql -U windowsuser1 -k vertica -K verticanode01.dc.com -h verticanode01.dc.com -c "select client_authentication_name, authentication_method from sessions;" client_authentication_name | authentication_method-- ----------------------------+----------------------- v_kerberos | GSS-Kerberos (1 row)
-
运行 KERBEROS_CONFIG_CHECK 以验证 Kerberos 配置。KERBEROS_CONFIG_CHECK 验证以下内容:
-
kinit 和 kb5.conf 文件是否存在。
-
keytab 文件是否存在且已设置
-
数据库中设置的 Kerberos 配置参数:
-
KerberosServiceName
-
KerberosHostname
-
KerberosRealm
-
Vertica 主体
-
-
Kerberos 可以读取 Vertica 密钥
-
Kerberos 可以获得 Vertica 主体的票证
-
Vertica 可以使用 kinit 初始化密钥
-