Skip to main content

SASL 身份识别

参考概述▸,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 PLAINSCRAM-SHA-256SCRAM-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 是以 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

  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

输出文件 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 PLAINSCRAM-SHA-256SCRAM-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 等工具对证书过期时间进行监控,避免风险。