当前位置: 首页 > 知识库问答 >
问题:

如何使用Java用SASL/SCRAM连接到MSK?

壤驷敏学
2023-03-14

我正试图找出如何创建一个工作Kafka生产者对一个AWS MSK集群。集群启用了TLS和SASL/scram。这是我第一次使用Kafka,关于这方面的文档相当少。我目前拥有的针对未加密本地群集的代码是:

Properties props = new Properties();
props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, serverBootstrap);
props.put(ProducerConfig.CLIENT_ID_CONFIG, CLIENT_ID);
props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
producer = new KafkaProducer<>(props);

我有字符串类型变量usernamepassword,它们是从AWS秘密管理器中提取的,包含集群的用户名和密码。我还需要指定哪些其他属性?

AWS和Kafka网站上的文档都是关于在本地文件系统上生成JAAS和truststore文件的,这些文件将包含秘密:

https://docs.aws.amazon.com/msk/latest/developerguide/msk-password.html

这对我来说是不可能的。基本上,我需要创建一个通用Docker映像,它将在AWS Secrets Manager中作为一个环境变量提供秘密的名称,该名称将包含集群的用户名和密码。

我假定这是人们默认情况下如何对集群进行身份验证的,但没有说明如何做到这一点。我不使用MSK IAM集成的原因是,我们可能会达到每个代理3000个连接的限制。

共有1个答案

卢普松
2023-03-14

经过大量的试验和错误,这实际上对亚马逊MSK有效:

Properties props = new Properties();
props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, serverBootstrap);
props.put(ProducerConfig.CLIENT_ID_CONFIG, CLIENT_ID);
props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());

if (useScram()) {
  props.put("security.protocol", "SASL_SSL");
  props.put("sasl.mechanism", "SCRAM-SHA-512");
  props.put("ssl.truststore.location", "/truststore/kafka.client.truststore.jks");
  props.put("sasl.jaas.config", getScramAuthString());
}

producer = new KafkaProducer<>(props);

getscramauthstring()函数定义如下:

private static String getScramAuthString() {
    return String.format("org.apache.kafka.common.security.scram.ScramLoginModule required \nusername=\"%s\"\npassword=\"%s\";", username, password);
}

其中用户名密码从环境变量中读取,环境变量由ECS从AWS机密管理器传入。

 类似资料:
  • 问题内容: 我正在使用Weblogic,Ejb3.0。Java 1.6 我需要通过Java代码访问Active Directory。我读了几种方法(Kerberos,LDAP) 有人可以建议我这样做的舒适​​方式吗?在哪里可以找到一些完整的代码示例, 谢谢,雷。 问题答案: 这是一个简单的代码,用于在W2K3上的JNDI中进行身份验证并进行LDAP搜索:

  • 问题内容: 文件包含和及其说明(+ )。 是否可以依靠上述文件建立连接?(仅提供数据库名称即可): 为了找到该文件,我必须知道默认的Oracle主目录,我需要在Windows注册表中检入然后具有所有文件,然后检查哪个文件首先出现在上。有没有办法在客户端计算机上自动找到此文件? 问题答案: 我什至不知道可以在瘦驱动程序中使用tnsnames,但是显然它是在版本10中添加的: http://docs.

  • 我正在尝试使用SASL SSL安全协议(SCRAM-SHA-512)将Mule应用程序与Kafka集成。以下来自Mulesoft的知识文章说(只有版本3.0.6、3.0.7、3.0.8、3.0.9和3.0.10的Kafka连接器支持带有GSSAPI机制的SASL_SSL安全协议。当前的版本4.0.0不支持SASL_SSL,因为存在已知问题SE-15680。)。这是那篇文章的链接 https://h

  • 我对上述主题有几个问题,请您帮助理解这些事情。 SASL/普通版可以与 SSL 一起使用,也可以与 SSL 一起使用。因此,如果不使用SSL,那么数据是加密和安全的吗? 使用SSL/普通,那么数据将从两端进行保护和加密,例如从客户端到服务器和服务器到客户端数据?如果从两端加密,那么如何? 如果只有一种方式可以解决上述问题,即从服务器到客户端加密,如何高于从客户端到服务器的数据加密? 我们可以将双向

  • 问题内容: 如何使用java连接到mysql数据库? 问题答案: 逐步说明如何安装MySQL和JDBC以及如何使用它: 1.下载并安装MySQL服务器。只需按照通常的方式进行即可。每次更改时都请记住端口号。默认情况下3306。 2.下载 JDBC驱动程序并放入classpath,解压缩ZIP文件并将包含的JAR文件放入classpath。特定于供应商的JDBC驱动程序是 JDBC API的具体实现

  • 问题内容: 我这样做是为了连接cassandra。但是我的代码返回了错误。这是我的代码 这是错误日志.. 无法在项目CassandraConnection上执行目标:无法解析项目com.mycompany:CassandraConnection:jar:1.0-SNAPSHOT的依赖项:无法解析以下工件:org.specs2:scalaz- effect_2.11.0-SNAPSHOT:jar:7