SASL 身份识别
参考概述▸,AutoMQ 数据面服务基于 Kafka API,提供 SASL 身份识别功能。本文档介绍如何配置实例的 SASL 身份识别,以及客户端接入示例。
开启 SASL_PLAINTEXT
SASL_PLAINTEXT 协议支持用户通过非加密传输方式上传访问凭证,服务端进行身份识别和校验,并对识别通过的身份主体进行 ACL 访问控制校验 。
AutoMQ 提供的 SASL_PLAINTEXT 协议支持如下验证机制: PLAIN
, SCRAM-SHA-256
, SCRAM-SHA-512
。
步骤 1:服务端配置
-
使用 SASL_PLAINTEXT 需要在创建实例时点击高级选项 >> 开启如下参数 ,操作界面参考下图:
-
TransitEncryption 选项:开启 Plaintext。
-
Authentication Method:开启 SASL authentication。
-

- 开启 SASL_PLAINTEXT 后,进入实例详情页查看对应的接入点信息。

- 获取接入点后,需要为 Kafka 客户端创建 ACL 用户以及相应的 ACL 授权。后续客户端使用 ACL 用户凭证访问服务端。操作文档参考管理 ACL▸。
步骤 2:客户端配置
Kafka 客户端使用 SASL_PLAINTEXT 协议访问服务端,参考 Apache Kafka 文档示例,需要设置如下参数。其中用户名、密码参考上文创建的 ACL 用户信息。
使用 SASL_PLAINTEXT 访问服务端之前,确保 ACL 用户已经被授予正确的资源操作权限。
# Configure SASL_PLAINTEXT
security.protocol=SASL_PLAINTEXT
# Configure mechanism, support PLAIN,SCRAM-SHA-256,SCRAM-SHA-512
sasl.mechanism=SCRAM-SHA-512
# Configure the jaas config,set LoginModule,UserName,Password
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required \ username="XXXX" \ password="XXXX";
开启 SASL_SSL
SASL_SSL 协议支持用户通过 TLS 加密传输方式上传访问凭证,服务端进行身份识别和校验,并对识别通过的身份主体进行 ACL 访问控制校验。
AutoMQ BYOC 环境下开启 TLS 传输加密,需要用户提供 CA 和服务端证书,并确保证书和域名匹配。后续也需要用户定期论证证书,以免证书过期导致的服务受损。
步骤 1:创建 CA 和证书
如果您的组织无法获取受信任 CA 签发的证书,则可以参考下方文档自行签发维护私有 CA 和证书。此外,生产环境推荐通过 AWS Private CA 产品管理 CA 和证书。
- 配置 CA 签名策略文件
ca.cnf
。
[ ca ]
default_ca = CA_AutoMQ_Default
[ CA_AutoMQ_Default ]
default_days = 3650
database = index.txt
serial = serial.txt
default_md = sha256
copy_extensions = copy
unique_subject = no
policy = signing_policy
[ req ]
prompt = no
distinguished_name = distinguished_name
x509_extensions = extensions
[ distinguished_name ]
organizationName = <Replace with your Orgnaization Name>
commonName = <Replace with your Common Name>
[ extensions ]
keyUsage = critical,digitalSignature,nonRepudiation,keyEncipherment,keyCertSign
basicConstraints = critical,CA:true,pathlen:1
[ signing_policy ]
organizationName = supplied
commonName = optional
- 生成 CA 私钥
ca.key
并设置文件访问权限。
openssl genrsa -out ca.key 2048
chmod 400 ca.key
- 生成 CA 公共证书
ca.crt
。
openssl req -new -x509 -config ca.cnf -key ca.key -days 3650 -batch -out ca.crt
上述命令会生成 ca.crt
文件作为 CA 公共证书,后续需要部署到 AutoMQ 实例以及 Kafka 客户端。
- 创建 Broker 证书配置文件
broker.cnf
。
AutoMQ BYOC 环境的 Broker 是以 IP 地址直接对外提供服务,因此暂不支持域名校验。因此 SAN 信息推荐保持默认值,后续客户端关闭域名校验。
[ req ]
prompt = no
distinguished_name = distinguished_name
req_extensions = extensions
[ distinguished_name ]
organizationName = <Replace with your Organization>
[ extensions ]
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = localhost
- 生成 Broker 私钥
broker.key
。
openssl genrsa -out broker.key 2048
- 生成 Broker 证书签名请求 CSR
broker.csr
。
openssl req -new -key broker.key -out broker.csr -nodes -config broker.cnf
- 用之前的 CA 私钥签名 CSR,生成 Broker 证书
broker.crt
。
openssl x509 -req -CA ca.crt -CAkey ca.key -in broker.csr -out broker.crt -days 3650 -CAcreateserial
输出文件 broker.crt
为签名后的 Broker 公共证书。建议配置为只读权限。后续部署时需要 broker.crt
, broker.key
和 ca.crt
三个文件。
步骤 2:服务端配置
-
使用 SASL_SSL 需要在创建实例时点击高级选项 >> 开启如下参数 ,操作界面参考下图:
-
TransitEncryption:开启 TLS Encryption。
-
Authentication Method:开启 SASL authentication。
-
Upload CA:上传上一步获取的CA 证书文件
ca.crt
。 -
Upload Server Cert:上传上一步获取的 Broker 证书文件
broker.crt
。 -
Upload Private Key:上传上一步获取的 Broker 证书的秘钥文件
broker.key
。
-

- 开启 SASL_SSL 后,进入实例详情页查看对应的接入点信息。

- 获取接入点后,需要为 Kafka 客户端创建 ACL 用户以及相应的 ACL 授权。后续客户端使用 ACL 用户凭证访问服务端。操作文档参考管理 ACL▸。
注意:SASL_SSL 和 mTLS 协议仅支持创建实例时开启,暂不支持对已有实例开启传输加密。
步骤 3:客户端接入配置
Kafka 客户端使用 SASL_SSL 协议访问服务端,参考 Apache Kafka 文档示例,需要配置相应的参数。
-
将前面生成的 CA 证书转化成 JKS trustStore。注意根据实际情况替换下方命令的参数。
-
alias:填写 CA 证书的别名。
-
file:填写上一步获取的 CA 证书文件。
-
keystore:填写 jks 的名称,后续 Kafka 客户端需要配置。
-
storepass:填写 jks 的访问密码,后续 Kafka 客户端需要配置。
-
keytool -importcert -alias automq-ca -file ca.crt -keystore truststore.jks -storepass changeit
- 在 Kafka 客户端配置属性中添加如下配置参数。使用 SASL_SSL 协议访问服务端之前,确保 ACL 用户已经被授予正确的资源操作权限。
# Configure SASL_SSL
security.protocol=SASL_SSL
# Configure mechanism, support PLAIN,SCRAM-SHA-256,SCRAM-SHA-512
sasl.mechanism=SCRAM-SHA-512
# Configure the jaas config,set LoginModule,UserName,Password
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required \ username="Replace with your ACL UserName" \ password="Replace with your ACL Password";
# set trust store type to JKS
ssl.truststore.type=JKS
# set the location of jks
ssl.truststore.location=/path/to/truststore.jks
# set the password of jks
ssl.truststore.password=changeit
# disable ssl hostname validation,set the algorithm to empty
ssl.endpoint.identification.algorithm=
注意:
在签署私有 CA 和证书时,因为无法和 AutoMQ 集群的 IP 保持匹配。因此,客户端SSL 配置时需要关闭域名校验,即 ssl.endpoint.identification.algorithm 参数设置为空字符串 。
证书过期监控
BYOC 环境 TLS 证书是由用户提供,因此用户需要对证书的有 效期进行监控,确保证书过期之前进行续期轮转。AutoMQ 服务端提供了以下 Metrics 用于监控服务端证书的过期时间:
-
kafka_stream_cert_expiry_timestamp_milliseconds:用于展示当前证书过期的毫秒时间戳。
-
kafka_stream_cert_days_remaining:用于统计当前时刻到证书过期的剩余天数。
建议客户参考Prometheus 监控&报警▸ 的配置方法,使用 Prometheus、CloudWatch 等工具对证书过期时间进行监控,避免风险。