在 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 初始化密钥