使用 Kafka 进行 TLS/SSL 加密
您可以在 Vertica、调度程序和 Kakfa 之间使用 TLS/SSL 加密。此加密可防止其他人访问在 Kafka 和 Vertica 之间发送的数据。此外,还可以验证数据流式传输过程中涉及的所有参与方的身份,以便没有冒充者可以冒充您的 Vertica 群集或 Kafka 代理。
注意
许多人经常会混淆 TLS 和 SSL 这两个术语。SSL 是一种较旧的加密协议,在很大程度上已被较新且更安全的 TLS 标准所取代。但是,许多人仍然使用术语 SSL 来指代服务器与应用程序之间的加密,即使该加密实际上是 TLS 也是如此。例如,Java 和 Kafka 仅使用术语 SSL,即使在处理 TLS 时也是如此。本文档会交替使用 SSL/TLS 和 SSL。在以下一些常见情况下,您会想要在 Vertica 与 Kafka 之间使用 SSL 加密:
-
您的 Vertica 数据库和 Kafka 通过不安全的网络进行通信。例如,假设 Kafka 群集位于云服务中,而 Vertica 群集位于您的内部网络中。在这种情况下,从 Kafka 读取的任何数据都会通过不安全的连接在 Internet 上传输。
-
根据安全策略、法律或其他要求,您需要对所有网络流量进行加密。
有关 Vertica 中 TLS/SSL 加密的详细信息,请参阅 TLS 协议。
在调度程序与 Vertica 之间使用 TLS/SSL
调度程序连接到 Vertica 的方式与其他客户端应用程序连接到 Vertica 的方式相同。您可以通过两种方式将 Vertica 配置为对客户端使用 SSL/TLS 身份验证和加密:
-
如果将 Vertica 配置为使用 SSL/TLS 服务器身份验证,则可以选择让调度程序确认 Vertica 服务器的身份。
-
如果将 Vertica 配置为使用相互 SSL/TLS 身份验证,则可以将调度程序配置为向 Vertica 表明自己的身份,以及让它验证 Vertica 服务器的身份。根据您的数据库配置,Vertica 服务器可能会要求调度程序在连接时使用 TLS。有关详细信息,请参阅使用 TLS 进行客户端身份验证。
有关与 Vertica 建立的加密客户端连接的信息,请参考 TLS 协议。
调度程序在 Java 虚拟机 (JVM) 上运行,并使用 JDBC 连接到 Vertica。连接到 Vertica 时,它的行为与任何其他 JDBC 客户端一样。要对调度程序与 Vertica 的连接使用 TLS/SSL 加密,请使用 Java 密钥库和信任库机制来保存调度程序用于表明自己的身份和 Vertica 身份的密钥和证书。
-
密钥库包含调度程序的私有加密密钥及其证书(公钥)。
-
信任库包含您信任的 CA。如果启用身份验证,调度程序将使用这些 CA 来验证其连接到的 Vertica 群集的身份。如果已使用信任库中的某个 CA 对服务器的证书进行签名,则调度程序知道它可以信任 Vertica 服务器的身份。
您可以通过名为 VKCONFIG_JVM_OPTS 的 Linux 环境变量将各个选项传递给执行调度程序的 JVM。向修改调度程序的 JDBC 设置(例如,调度程序的 JDBC 连接的信任库和密钥库)的此变量添加参数。请参阅步骤 2:设置 VKCONFIG_JVM_OPTS 环境变量以查看相关示例。
此外,还可以使用 --jdbc-url
调度程序选项来修改 JDBC 配置。请参阅常用 vkconfig 脚本选项以了解有关调度程序选项的详细信息,并参阅 JDBC 连接属性以了解有关其可以修改的属性的详细信息。
在 Vertica 与 Kafka 之间使用 TLS/SSL
您可以通过两种方式将数据从 Kafka 流式传输到 Vertica:手动使用 COPY 语句和 KafkaSource UD 源函数,或自动使用调度程序。
要通过 SSL 连接直接从 Kafka 复制数据,需要设置包含 SSL 密钥和证书的会话变量。当 KafkaSource 发现您已设置这些变量时,它会使用该密钥和证书来创建与 Kafka 的安全连接。请参阅 Kafka TLS-SSL 示例第 4 部分:直接从 Kafka 加载数据以了解详细信息。
自动将数据从 Kafka 流式传输到 Vertica 时,配置调度程序的方式与使用 SSL 连接到 Vertica 的方式相同。当调度程序执行 COPY 语句以从 Kafka 加载数据时,它会使用自己的密钥库和信任库来创建与 Kafka 的 SSL 连接。
要在从 Vertica 向 Kafka 生成数据时使用 SSL 连接,需要设置通过 SSL 连接直接从 Kafka 流式传输数据时使用的同一会话变量。KafkaExport 函数会使用这些变量来建立与 Kafka 的安全连接。
注意
通知程序当前不支持使用 TLS/SSL 连接。有关对 Kafka 使用 SSL/TLS 身份验证的详细信息,请参阅 Apache Kafka 文档。