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

开启 SASL_PLAINTEXT

SASL_PLAINTEXT 协议支持用户通过非加密传输方式上传访问凭证,服务端进行身份识别和校验,并对识别通过的身份主体进行 ACL 访问控制校验。 AutoMQ 提供的 SASL_PLAINTEXT 协议支持如下验证机制: PLAINSCRAM-SHA-256SCRAM-SHA-512

步骤 1:服务端配置

  1. 使用 SASL_PLAINTEXT 需要在创建实例时点击高级选项 >> 开启如下参数 ,操作界面参考下图:
    • TransitEncryption 选项:开启 Plaintext。
    • Authentication Method:开启 SASL authentication。
  1. 开启 SASL_PLAINTEXT 后,进入实例详情页查看对应的接入点信息。
  1. 获取接入点后,需要为 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 和证书。
  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 3650 -CAcreateserial -extensions extensions  -extfile broker.cnf

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

步骤 2:服务端配置

  1. 使用 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
  1. 开启 SASL_SSL 后,进入实例详情页查看对应的接入点信息。
  1. 获取接入点后,需要为 Kafka 客户端创建 ACL 用户以及相应的 ACL 授权。后续客户端使用 ACL 用户凭证访问服务端。操作文档参考管理 ACL▸
注意:SASL_SSL 和 mTLS 协议仅支持创建实例时开启,暂不支持对已有实例开启传输加密。

步骤 3:客户端接入配置

Kafka 客户端使用 SASL_SSL 协议访问服务端,参考 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. 在 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

证书过期监控

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