跳转到主要内容
参考概述▸,AutoMQ 数据面服务基于 Kafka API,提供 mTLS 身份识别功能。本文档介绍如何配置实例的 mTLS 身份识别,以及客户端接入示例。

开启 mTLS

mTLS 协议是通过为每个客户端分配独立的 TLS 证书,在通信阶段校验证书合法性实现身份识别和校验,并对识别通过的身份主体进行 ACL 访问控制校验。
AutoMQ BYOC 环境下开启 TLS 传输加密,需要用户提供 CA 和服务端证书,并确保证书和域名匹配。后续也需要用户定期论证证书,以免证书过期导致的服务受损。

步骤 1:创建 CA 和证书

如果您的组织无法获取受信任 CA 签发的证书,则可以参考下方文档自行签发维护私有 CA 和证书。此外,生产环境推荐通过 AWS Private CA 产品管理 CA 和证书。
  1. 配置 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

  1. 生成 CA 私钥 ca.key 并设置文件访问权限。

openssl genrsa -out ca.key 2048
chmod 400 ca.key

  1. 生成 CA 公共证书 ca.crt

openssl req -new -x509 -config ca.cnf -key ca.key -days 3650 -batch -out ca.crt

上述命令会生成 ca.crt 文件作为 CA 公共证书,后续需要部署到 AutoMQ 实例以及 Kafka 客户端。
  1. 创建 Broker 证书配置文件 broker.cnf
AutoMQ BYOC 环境的 Broker 是通过 Private DNZ Zone 提供记录解析服务,因此 SAN 信息需要和创建 AutoMQ 实例时选择的 Zone 域名保持一致,确保域名解析和证书匹配通过。 一般情况下建议证书的 DNS 直接填写Zone 域名即可,例如*.your-private-zone-name。
[ req ]
prompt             = no
distinguished_name = distinguished_name
req_extensions     = extensions

[ distinguished_name ]
organizationName = <Replace with your Organization>
commonName       = <Replace with your Common Name>
[ extensions ]
subjectAltName = @alt_names

[ alt_names ]
DNS.1 = <Replace with your Private DNS Zone Domain Name>

  1. 生成 Broker 私钥 broker.key

openssl genrsa -out broker.key 2048

  1. 生成 Broker 证书签名请求 CSR broker.csr

openssl req -new -key broker.key -out broker.csr -nodes -config broker.cnf

  1. 用之前的 CA 私钥签名 CSR,生成 Broker 证书 broker.crt

openssl x509 -req -CA ca.crt -CAkey ca.key -in broker.csr -out broker.crt -days 365 -CAcreateserial -extensions extensions  -extfile broker.cnf

输出文件 broker.crt 为签名后的 Broker 证书。建议配置为只读权限。后续创建 AutoMQ 实例时需要 broker.crtbroker.keyca.crt 三个文件。

步骤 2:创建客户端证书

  1. 参考 管理 ACL▸,前往 AutoMQ 控制台为客户端创建 ACL 用户,并授权需要读写的 Topic 和 Group 权限,记录 ACL 用户名
  2. 创建 Client 证书配置文件 client.cnf ,将 CN 信息设置为 ACL 用户名。
说明:当使用 mTLS 协议访问 AutoMQ 实例时,服务端会默认将客户端证书的身份映射到 ACL 用户。映射规则默认设置为 RULE:.*CN=([^,]+).*/$1/。举例:客户端证书身份信息为:CN=user01,O=xxxx,OU=xxx,L=xxx,S=xxx,C=xxx则 AutoMQ 提取 CN 字段,并拼接出 Principal= User:user01。
[ req ]
prompt             = no
distinguished_name = distinguished_name
req_extensions     = extensions

[ distinguished_name ]
organizationName = <Replace with your Organization>
CN               = <Replace with your ACL User Name>

[ extensions ]
subjectAltName = @alt_names

[ alt_names ]
DNS.1 = localhost

  1. 生成 Client 私钥 client.key

openssl genrsa -out client.key 2048

  1. 生成 Client 证书签名请求 CSR client.csr

openssl req -new -key client.key -out client.csr -nodes -config client.cnf

  1. 用之前的 CA 私钥签名 CSR,生成 Client 证书 client.crt

openssl x509 -req -CA ca.crt -CAkey ca.key -in client.csr -out client.crt -days 365 -CAcreateserial -extensions extensions  -extfile client.cnf

输出文件 client.crt 为签名后的 Client 证书。后续客户端应用连接时需要 client.crtclient.key 两个文件。

步骤 3:服务端配置

  1. 使用 mTLS 需要在创建实例时点击高级选项 >> 开启如下参数 ,操作界面参考下图:
    • TransitEncryption:开启 TLS Encryption。
    • Upload CA:上传上一步获取的CA 证书文件 ca.crt
    • Upload Server Cert:上传上一步获取的 Broker 证书文件 broker.crt
    • Upload Private Key:上传上一步获取的 Broker 证书的秘钥文件 broker.key
  1. 开启 mTLS 后,进入实例详情页查看对应的接入点信息。
注意:SASL_SSL 和 mTLS 协议仅支持创建实例时开启,暂不支持对已有实例开启传输加密。

步骤 4:客户端配置

Kafka 客户端使用 mTLS 协议访问服务端,参考 Apache Kafka 文档示例,需要配置相应的参数。
  1. 将前面生成的 CA 证书转换成 JKS trustStore。注意根据实际情况替换下方命令的参数。
    1. alias:填写 CA 证书的别名。
    2. file:填写上一步获取的 CA 证书文件。
    3. keystore:填写 jks 的名称,后续 Kafka 客户端需要配置。
    4. storepass:填写 jks 的访问密码,后续 Kafka 客户端需要配置。

keytool -importcert -alias automq-ca -file ca.crt -keystore truststore.jks -storepass changeit

  1. 将前面生成的客户端证书转换成 PKCS12 证书库(包含客户端秘钥)。注意根据实际情况替换下方命令的参数。
    1. in:填写 客户端证书文件,上一步获取的 client.crt
    2. inkey:填写上一步获取的客户端私钥 client.key
    3. CAfile:填写 CA证书,上一步获取的 ca.crt
    4. out:输出的 keystore 文件名。
    5. name:输出的 keystore 别名。
    6. password:设置密码

openssl pkcs12 -export -in client.crt -inkey client.key -chain -CAfile ca.crt -out client.p12 -name automq-client -password pass:changeit

  1. 在 Kafka 客户端配置文件中添加如下配置信息。

# Configure SSL
security.protocol=SSL
# 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
# set the client keystore type to PKCS12
ssl.keystore.type=PKCS12
# set the client keystore jks
ssl.keystore.location=/path/to/client.p12
# set the client keystore password
ssl.keystore.password=changeit
# set the client key password
ssl.key.password=changeit

证书过期监控

BYOC 环境 TLS 证书是由用户提供,因此用户需要对证书的有效期进行监控,确保证书过期之前进行续期轮转。AutoMQ 服务端提供了以下 Metrics 用于监控服务端证书的过期时间:
  • kafka_stream_cert_expiry_timestamp_milliseconds:用于展示当前证书过期的毫秒时间戳。
  • kafka_stream_cert_days_remaining:用于统计当前时刻到证书过期的剩余天数。
建议客户参考Prometheus 监控&报警▸ 的配置方法,使用 Prometheus、CloudWatch 等工具对证书过期时间进行监控,避免风险。