使用 SASL 向 Kafka 进行身份验证

Kafka 支持使用简单身份验证和安全层 (SASL) 来对生产者和使用者进行身份验证。在使用大多数 Kafka 相关函数(如 KafkaSource)时,都可以使用 SASL 向 Kafka 进行 Vertica 身份验证。

Vertica 支持通过以下身份验证机制使用 SASL_PLAINTEXT 和 SASL_SSL 协议:

  • PLAIN

  • SCRAM-SHA-256

  • SCRAM-SHA-512

必须将 Kafka 群集配置为启用 SASL 身份验证。请参阅 Kafka 版本对应的 Kafka 文档以了解如何配置 SASL 身份验证。

要在 Vertica 和 Kafka 之间使用 SASL 身份验证,请直接在 rdkafka 库中使用 kafka_conf 参数设置 SASL 相关配置选项。Vertica 使用此库来连接 Kafka。有关在 rdkafka 库中直接设置配置选项的详细信息,请参阅直接设置 Kafka 库选项

相关配置选项有:

  • security.protocol 设置用于向 Kafka 进行身份验证的安全协议。

  • sasl.mechanism 设置安全机制。

  • sasl.username 设置要用于进行身份验证的 SASL 用户。

  • sasl.password 设置要用于进行 SASL 身份验证的密码。

有关所有 SASL 相关设置的列表,请参阅 rdkafka 配置文档

以下示例演示了如何使用 SASL_PLAINTEXT 安全协议调用 KafkaCheckBrokers

=> SELECT KafkaCheckBrokers(USING PARAMETERS
      brokers='kafka01.example.com:9092',
      kafka_conf='{"sasl.username":"dbadmin", "sasl.password":"pword", "sasl.mechanism":"PLAIN", "security.protocol":"SASL_PLAINTEXT"}'
   ) OVER ();

此示例演示了在通过 SSL 连接从 Kafka 复制数据时如何使用 SASL 身份验证。此示例假定 Vertica 和 Kafka 已经配置为使用 TLS/SSL 加密,如使用 Kafka 进行 TLS/SSL 加密所述:

=> COPY mytopic_table
      SOURCE KafkaSource(
        stream='mytopic|0|-2',
        brokers='kafka01.example.com:9092',
        stop_on_eof=true,
        kafka_conf='{"sasl.username":"dbadmin", "sasl.password":"pword", "sasl.mechanism":"PLAIN", "security.protocol":"SASL_SSL"}'
      )
      FILTER KafkaInsertDelimiters(delimiter = E'\n')
      DELIMITER ','
      ENCLOSED BY '"';

有关在 rfkafka 库中使用 SASL 的详细信息,请参阅 rdkafka github 站点上的将 SASL 与 librdkafka 结合使用