这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

为 Kerberos 身份验证配置 Vertica

Kerberos 针对设备提供强大的加密身份验证,使客户端和服务器能够以更安全的方式进行通信。从而解决了网络安全问题。

您的系统必须安装和配置一个或多个 Kerberos 密钥分发中心 (KDC)。必须可以从 Vertica 分析型数据库群集中的每个节点访问 KDC。

KDC 必须使用 GSS-API 支持 Kerberos 5。有关详细信息,请参阅 MIT Kerberos 分发页面

此部分内容

1 - 在 Linux KDC 中创建 Vertica 主体和 Keytab

Vertica 使用服务主体进行系统级别的操作。这些主体用于标识 Vertica 服务,并按如下方式使用:

  • 当 Kerberized Vertica 客户端向数据库进行身份验证时,它们会请求访问此服务。

  • Tuple Mover 等系统进程向 Hadoop 等外部服务进行身份验证时,它们会使用此标识。

按如下所示创建主体和密钥:

  1. 启动 Kerberos 5 数据库管理实用程序(kadminkadmin.local)可在 Linux KDC 中创建 Vertica 主体。

    • 如果要访问远程服务器中的 KDC,请使用 kadmin。如果掌握 Kerberos 管理员密码,则可以在安装了 Kerberos 5 客户端包的任何计算机上使用 kadmin。启动 kadmin 时,实用程序会提示您输入 Kerberos 管理员密码。您可能需要具备客户端的 root 权限才能运行 kadmin

    • 在以下情况下可以使用 kadmin.local

      • KDC 位于您当前已登录的计算机中。

      • 您对该服务器具有 root 权限。

    kadmin.local 不需要管理员登录凭据。

    有关 kadminkadmin.local 命令的详细信息,请参阅 kadmin 文档

  2. 在每个节点中,为 Vertica 创建一个服务主体。主机名必须与操作系统提供的值匹配。以下示例为名为 vertica 的节点创建了服务主体 v_vmart_node0001.example.com

    $ sudo /usr/kerberos/sbin/kadmin.local
    kadmin.local add_principal vertica/v_vmart_node0001.example.com
    

    为每个主体重复执行一次 ktadd 命令。您可以为每个主体用户创建单独的 Keytab,也可以将它们全部添加到一个 Keytab 文件(例如 krb5.keytab)。如要使用一个文件,请参阅 MIT Kerberos 文档中有关 -glob 选项的文档。

    您必须为使用 Kerberos 身份验证的每个 Vertica 分析数据库用户创建一个用户主体。例如:

    $ sudo /usr/kerberos/sbin/kadmin.local
    kadmin.local add_principal [options] VerticaUser1
    
  3. 将每个 Keytab 文件复制到相应群集节点中的 /etc 文件夹。在所有节点中使用相同的路径和文件名。

  4. 在每个节点中,让 Keytab 文件可供正在运行数据库进程的文件所有者(通常是 Linux dbadmin 用户)读取。例如,您可以按照以下方式,将这些文件的所有权更改为 dbadmin:

    $ sudo chown dbadmin *.keytab
    

    创建 Keytab 文件之后,可以使用 klist 命令查看存储在文件中的密钥:

    $ sudo /usr/kerberos/bin/klist -ke -t
    Keytab name: FILE:/etc/krb5.keytab
    KVNO    Timestamp        Principal
    ---- ------------------- --------------------------------------------------------------------------
    4     08/15/2017 7:35:41 vertica/v_vmart_node0001.example.com@EXAMPLE.COM (aes256-cts-hmac-sha1-96)
    4     08/15/2017 7:35:41 vertica/v_vmart_node0001.example.com@EXAMPLE.COM (aes128-cts-hmac-sha1-96)
    
  5. 在 Vertica 上运行以下命令,以确保正确设置 Kerberos 参数:

    => select parameter_name, current_value from configuration_parameters where parameter_name like 'Ker%';
    parameter_name         |                      current_value
    -----------------------+---------------------------------------------------------------------
    KerberosHostname       | v_vmart_node0001.example.com
    KerberosKeytabFile     | /etc/krb5.keytab
    KerberosRealm          | EXAMPLE.COM
    KerberosTicketDuration | 0
    KerberosServiceName    | vertica
    (5 rows)
    
  6. 确保所有客户端都使用 gss 身份验证方法。

    从 Vertica:

    => CREATE USER bob;
    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 bob;
    GRANT AUTHENTICATION
    

    从操作系统命令行:

    $ kinit bob
    
    $ vsql -U bob -k vertica -K v_vmart_node0001.example.com -h v_vmart_node0001 -c "select client_authentication_name,
    authentication_method from sessions;"
     client_authentication_name | authentication_method--
    ----------------------------+-----------------------
     v_kerberos                 |    GSS-Kerberos
    
    (1 row)
    
  7. 在 Vertica 上,运行 KERBEROS_CONFIG_CHECK 以验证 Kerberos 配置。KERBEROS_CONFIG_CHECK 验证以下内容:

    • kinit 和 kb5.conf 文件是否存在。

    • keytab 文件是否存在且已设置

    • 数据库中设置的 Kerberos 配置参数:

      • KerberosServiceName

      • KerberosHostname

      • KerberosRealm

      • Vertica 主体

    • Kerberos 可以读取 Vertica 密钥

    • Kerberos 可以获得 Vertica 主体的票证

    • Vertica 可以使用 kinit 初始化密钥

2 - 指定 KDC 信息并配置领域

Kerberos 领域中的每个客户端和 Vertica 分析型数据库服务器都必须具有有效且配置相同的 Kerberos 配置 (krb5.conf) 文件。如果没有该文件,客户端不知道如何到达 KDC。

如果使用 Microsoft Active Directory,则无需执行此步骤。请参阅适用于您的平台的 Kerberos 文档,详细了解有关在 Active Directory 上的 Kerberos 配置文件信息。

您至少需要在 krb5.conf 文件中配置以下部分。

  • [libdefaults]—Kerberos 5 库使用的设置
  • [realms]—领域专用联系信息和设置
  • [domain_realm]—将服务器主机名映射到 Kerberos 领域

请参阅 Kerberos 文档,了解有关此配置文件中其它部分的信息。

您必须更新 /etc/krb5.conf 文件以反映您的站点的 Kerberos 配置。在 Kerberos 领域中的所有客户端与服务器当中强制执行一致性的最简单办法,就是从 KDC 复制 /etc/krb5.conf 文件。然后,将该文件放入每个 Vertica 群集节点上的 /etc 目录内。

3 - 通知 Vertica 有关 Kerberos 主体的信息

按照以下步骤通知 Vertica 有关主体名称和 keytab 位置的信息。

有关您在此过程中需要设置的参数的信息,请参阅 Kerberos 参数

  1. 以管理员身份(通常为 dbadmin)登录到数据库。

  2. 设置 KerberosKeyTabFile 配置参数,以指向 keytab 文件的位置:

    => ALTER DATABASE DEFAULT SET PARAMETER KerberosKeytabFile = '/etc/krb5.keytab';
    

    在所有节点上,keytab 文件必须在相同位置(在此示例中为 /etc/krb5.keytab)。

  3. 设置 Vertica 主体的服务名称;例如,vertica

    => ALTER DATABASE DEFAULT SET PARAMETER KerberosServiceName = 'vertica';
    
  4. 提供主体的领域部分,例如,EXAMPLE.COM

    => ALTER DATABASE DEFAULT SET PARAMETER KerberosRealm = 'EXAMPLE.COM'
    

4 - 为所有客户端配置身份验证方法

为了确保所有客户端均使用 gss 身份验证方法,请运行以下语句:

=> CREATE AUTHENTICATION <method_name> METHOD 'gss' HOST '0.0.0.0/0';
=> GRANT AUTHENTICATION <method_name> TO Public;

有关详细信息,请参阅实施客户端身份验证

5 - 在 Active Directory 中创建主体和 Keytab

Active Directory 存储有关 Windows 域成员的信息,包括用户和主机。

Vertica 使用 Kerberos 协议访问此信息,以便对 Vertica 数据库的 Windows 用户进行身份验证。Kerberos 协议使用主体来识别用户,并使用 keytab 文件来存储他们的加密信息。您需要将 keytab 文件安装到 Vertica 中,使 Vertica 数据库能够以加密方式验证 Windows 用户。

此过程描述:

  • 创建 Vertica 服务主体。

  • 导出这些主体的 keytab 文件

  • 在 Vertica 数据库中安装 keytab 文件。这将允许 Vertica 对 Windows 用户进行身份验证,并授予其访问 Vertica 数据库的权限。

  1. 为 Vertica 服务创建一个 Windows 帐户(主体),并为群集中的每个节点/主机创建一个 Vertica 主机。此过程将为在该节点上运行的主机 verticanode01 和服务 vertica 创建 Windows 帐户。

    创建这些帐户时,请选择以下选项:

    • 用户无法更改密码

    • 密码永不过期

  2. 如果您在 HDFS 上使用受 Kerberos 身份验证保护的外部表,则必须启用“委派 (Delegation)”。为此,请访问 Active Directory 用户和计算机对话框,右键单击 Vertica 服务的 Windows 帐户(主体),然后选择“委派 (Delegation)”。信任此用户以委派给任何服务。

  3. 运行以下命令为主机 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
    
  4. 运行以下命令为 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

  5. 运行以下命令以验证服务主体名称是否正确映射。您必须为群集中的每个节点运行以下命令:

    $ 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
    
  6. 将您刚才创建的密钥表 vertica.verticanode01.dc.com.keytabhost.verticanode01.dc.com.keytab 复制到 Linux 主机 verticanode01.dc.com

  7. 将多个 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 文件,其中包含用于身份验证的服务器主体。

  8. 将新的 Keytab 文件复制到编录目录。例如:

    $ cp verticanode01.dc.com.keytab /home/dbadmin/VMart/v_vmart_nodennnn_catalog
    
  9. 测试 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 进行身份验证

  10. 对 Keytab 文件设置正确的权限和所有权:

    $ chmod 600 verticanode01.dc.com.keytab
    $ chown dbadmin:verticadba verticanode01.dc.com.keytab
    
  11. 使用 ALTER DATABASE 设置以下 Kerberos 参数 通知 Vertica 有关 Kerberos 主体的信息:

    KerberosKeytabFile=<CATALOGDIR>/verticanode01.dc.com.keytab
    KerberosRealm=DC.COM
    KerberosServiceName=vertica
    KerberosTicketDuration = 0
    KerberosHostname=verticanode01.dc.com
    
  12. 重新启动 Vertica 服务器。

  13. 按如下所示测试 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)
    
  14. 运行 KERBEROS_CONFIG_CHECK 以验证 Kerberos 配置。KERBEROS_CONFIG_CHECK 验证以下内容:

    • kinit 和 kb5.conf 文件是否存在。

    • keytab 文件是否存在且已设置

    • 数据库中设置的 Kerberos 配置参数:

      • KerberosServiceName

      • KerberosHostname

      • KerberosRealm

      • Vertica 主体

    • Kerberos 可以读取 Vertica 密钥

    • Kerberos 可以获得 Vertica 主体的票证

    • Vertica 可以使用 kinit 初始化密钥

6 - 获取 Kerberos 票证并对 Vertica 进行身份验证

如果您的机构使用 Kerberos 作为登录过程的一部分,在登录时会自动检索 Kerberos 票证。否则,您需要运行 kinit 来检索 kerberos 票证。

以下示例显示如何使用 kinit 命令检索票证并通过 KDC 对 Vertica 分析型数据库进行身份验证。域名为 EXAMPLE.COM。您必须使用该域名及您的用户名来检索 Kerberos 票证。请参阅指定 KDC 信息并配置领域

$ kinit
Password for principal_user@EXAMPLE.COM: kpasswd

将会提示您当您创建主体和密钥文件(请参阅 在 Linux KDC 中创建 Vertica 主体和 Keytab)时创建的主体用户名的密码。

Kerberos 票证在预设时间长度内被缓存。请参阅 Kerberos 文档中的票证管理获取有关过期参数设置的更多信息。

过期后,您需要再次运行 kinit 指令来检索另外一张 Kerberos 票证。