当前位置: 首页 > news >正文

TDengine 安全部署配置建议

在这里插入图片描述

背景

TDengine 的分布式、多组件特性导致 TDengine 的安全配置是生产系统中比较关注的问题。本文档旨在对 TDengine 各组件及在不同部署方式下的安全问题进行说明,并提供部署和配置建议,为用户的数据安全提供支持。

安全配置涉及组件

TDengine 包含多个组件,有:

  • taosd:内核组件。
  • taosc:客户端库。
  • taosAdapter:REST API 和 WebSocket 服务。
  • taosKeeper:监控服务组件。
  • taosX:数据管道和备份恢复组件。
  • taosxAgent:外部数据源数据接入辅助组件。
  • taosExplorer:Web 可视化管理界面。

与 TDengine 部署和应用相关,还会存在以下组件:

  • 通过各种连接器接入并使用 TDengine 数据库的应用。
  • 外部数据源:指接入 TDengine 的其他数据源,如 MQTT、OPC、Kafka 等。

各组件关系如下:

在这里插入图片描述

关于各组件的详细介绍,请参考 组件介绍。

TDengine 安全设置

taosd

taosd 集群间使用 TCP 连接基于自有协议进行数据交换,风险较低,但传输过程不是加密的,仍有一定安全风险。

启用压缩可能对 TCP 数据混淆有帮助。

  • compressMsgSize:是否对 RPC 消息进行压缩,整数,可选:-1:所有消息都不压缩;0:所有消息都压缩;N (N>0):只有大于 N 个字节的消息才压缩。

为了保证数据库操作可追溯,建议启用审计功能。

  • audit:审计功能开关,0 为关,1 为开。默认打开。
  • auditInterval:上报间隔,单位为毫秒。默认 5000。
  • auditCreateTable:是否针对创建子表开启申计功能。0 为关,1 为开。默认打开。

为保证数据文件安全,可启用数据库加密。

  • encryptAlgorithm:数据加密算法。
  • encryptScope:数据加密范围。

启用白名单可限制访问地址,进一步增强私密性。

  • enableWhiteList:白名单功能开关,0 为关,1 为开;默认关闭。

taosc

用户和其他组件与 taosd 之间使用原生客户端库(taosc)和自有协议进行连接,数据安全风险较低,但传输过程仍然不是加密的,有一定安全风险。

taosAdapter

taosadapter 与 taosd 之间使用原生客户端库(taosc)和自有协议进行连接,同样支持 RPC 消息压缩,不会造成数据安全问题。

应用和其他组件通过各语言连接器与 taosadapter 进行连接。默认情况下,连接是基于 HTTP 1.1 且不加密的。要保证 taosadapter 与其他组件之间的数据传输安全,需要配置 SSL 加密连接。在 /etc/taos/taosadapter.toml 配置文件中修改如下配置:

[ssl]
enable = true
certFile = "/path/to/certificate-file"
keyFile = "/path/to/private-key"

在连接器中配置 HTTPS/SSL 访问方式,完成加密访问。

为进一步增强安全性,可启用白名单功能,在 taosd 中配置,对 taosdapter 组件同样生效。

taosX

taosX 对外包括 REST API 接口和 gRPC 接口,其中 gRPC 接口用于 taos-agent 连接。

  • REST API 接口是基于 HTTP 1.1 且不加密的,有安全风险。
  • gRPC 接口基于 HTTP 2 且不加密,有安全风险。

为了保证数据安全,建议 taosX API 接口仅限内部访问。在 /etc/taos/taosx.toml 配置文件中修改如下配置:

[serve]
listen = "127.0.0.1:6050"
grpc = "127.0.0.1:6055"

从 TDengine 3.3.6.0 开始,taosX 支持 HTTPS 连接,在 /etc/taos/taosx.toml 文件中添加如下配置:

[serve]
ssl_cert = "/path/to/server.pem"
ssl_key =  "/path/to/server.key"
ssl_ca =   "/path/to/ca.pem"

并在 Explorer 中修改 API 地址为 HTTPS 连接:

# taosX API 本地连接
x_api = "https://127.0.01:6050"
# Public IP 或者域名地址
grpc = "https://public.domain.name:6055"

taosExplorer

taosAdapter 组件相似,taosExplorer 组件提供 HTTP 服务对外访问。在 /etc/taos/explorer.toml 配置文件中修改如下配置:

[ssl]
# SSL certificate file
certificate = "/path/to/ca.file"# SSL certificate private key
certificate_key = "/path/to/key.file"

之后,使用 HTTPS 进行 Explorer 访问,如 https://192.168.12.34 。

taosxAgent

taosX 启用 HTTPS 后,Agent 组件与 taosx 之间使用 HTTP 2 加密连接,使用 Arrow-Flight RPC 进行数据交换,传输内容是二进制格式,且仅注册过的 Agent 连接有效,保障数据安全。

建议在不安全网络或公共网络环境下的 Agent 服务,始终开启 HTTPS 连接。

taosKeeper

taosKeeper 使用 WebSocket 连接与 taosadpater 通信,将其他组件上报的监控信息写入 TDengine。

taosKeeper 当前版本存在安全风险:

  • 监控地址不可限制在本机,默认监控 所有地址的 6043 端口,存在网络攻击风险。使用 Docker 或 Kubernetes 部署不暴露 taosKeeper 端口时,此风险可忽略。
  • 配置文件中配置明文密码,需要降低配置文件可见性。在 /etc/taos/taoskeeper.toml 中存在:
[tdengine]
host = "localhost"
port = 6041
username = "root"
password = "taosdata"
usessl = false

安全增强

我们建议使用在局域网内部使用 TDengine。

如果必须在局域网外部提供访问,请考虑添加以下配置:

负载均衡

使用负载均衡对外提供 taosAdapter 服务。

以 Nginx 为例,配置多节点负载均衡:

http {server {listen 6041;location / {proxy_pass http://websocket;# Headers for websocket compatibleproxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection $connection_upgrade;# Forwarded headersproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;proxy_set_header X-Forwarded-Host $host;proxy_set_header X-Forwarded-Port $server_port;proxy_set_header X-Forwarded-Server $hostname;proxy_set_header X-Real-IP $remote_addr;}}upstream websocket {server 192.168.11.61:6041;server 192.168.11.62:6041;server 192.168.11.63:6041;}
}

如果 taosAdapter 组件未配置 SSL 安全连接,还需要配置 SSL 才能保证安全访问。SSL 可以配置在更上层的 API Gateway,也可以配置在 Nginx 中;如果你对各组件之间的安全性有更强的要求,您可以在所有组件中都配置 SSL。Nginx 配置如下:

http {server {listen 443 ssl;ssl_certificate /path/to/your/certificate.crt;ssl_certificate_key /path/to/your/private.key;}
}

安全网关

在现在互联网生产系统中,安全网关使用也很普遍。traefik 是一个很好的开源选择,我们以 traefik 为例,解释在 API 网关中的安全配置。

Traefik 中通过 middleware 中间件提供多种安全配置,包括:

  1. 认证(Authentication):Traefik 提供 BasicAuth、DigestAuth、自定义认证中间件、OAuth 2.0 等多种认证方式。
  2. IP 白名单(IPWhitelist):限制允许访问的客户端 IP。
  3. 频率限制(RateLimit):控制发送到服务的请求数。
  4. 自定义 Headers:通过自定义 Headers 添加 allowedHosts 等配置,提高安全性。

一个常见的中间件示例如下:

labels:- "traefik.enable=true"- "traefik.http.routers.tdengine.rule=Host(`api.tdengine.example.com`)"- "traefik.http.routers.tdengine.entrypoints=https"- "traefik.http.routers.tdengine.tls.certresolver=default"- "traefik.http.routers.tdengine.service=tdengine"- "traefik.http.services.tdengine.loadbalancer.server.port=6041"- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"- "traefik.http.middlewares.check-header.headers.customrequestheaders.X-Secret-Header=SecretValue"- "traefik.http.middlewares.check-header.headers.customresponseheaders.X-Header-Check=true"- "traefik.http.middlewares.tdengine-ipwhitelist.ipwhitelist.sourcerange=127.0.0.1/32, 192.168.1.7"- "traefik.http.routers.tdengine.middlewares=redirect-to-https,check-header,tdengine-ipwhitelist"

上面的示例完成以下配置:

  • TLS 认证使用 default 配置,这个配置可使用配置文件或 traefik 启动参数中配置,如下:

    traefik:
    image: "traefik:v2.3.2"
    hostname: "traefik"
    networks:
    - traefik
    command:
    - "--log.level=INFO"
    - "--api.insecure=true"
    - "--providers.docker=true"
    - "--providers.docker.exposedbydefault=false"
    - "--providers.docker.swarmmode=true"
    - "--providers.docker.network=traefik"
    - "--providers.docker.watch=true"
    - "--entrypoints.http.address=:80"
    - "--entrypoints.https.address=:443"
    - "--certificatesresolvers.default.acme.dnschallenge=true"
    - "--certificatesresolvers.default.acme.dnschallenge.provider=alidns"
    - "--certificatesresolvers.default.acme.dnschallenge.resolvers=ns1.alidns.com"
    - "--certificatesresolvers.default.acme.email=linhehuo@gmail.com"
    - "--certificatesresolvers.default.acme.storage=/letsencrypt/acme.json"
    

上面的启动参数配置了 default TSL 证书解析器和自动 acme 认证(自动证书申请和延期)。

  • 中间件 redirect-to-https:配置从 HTTP 到 HTTPS 的转发,强制使用安全连接。

    - "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
    
  • 中间件 check-header:配置自定义 Headers 检查。外部访问必须添加自定义 Header 并匹配 Header 值,避免非法访问。这在提供 API 访问时是一个非常简单有效的安全机制。

  • 中间件 tdengine-ipwhitelist:配置 IP 白名单。仅允许指定 IP 访问,使用 CIDR 路由规则进行匹配,可以设置内网及外网 IP 地址。

总结

数据安全是 TDengine 产品的一项关键指标,这些措施旨在保护 TDengine 部署免受未经授权的访问和数据泄露,同时保持性能和功能。但 TDengine 自身的安全配置不是生产中的唯一保障,结合用户业务系统制定更加匹配客户需求的解决方案更加重要。

相关文章:

  • 人工智能、机器学习与深度学习:概念解析与内在联系
  • ALTER CONVERSION使用场景
  • 树莓派(Raspberry Pi)中切换为国内的软件源
  • CSS- 4.6 radiu、shadow、animation动画
  • Python 与 Java 在 Web 开发中的深度对比:从语言特性到生态选型
  • GPT-4.1特点?如何使用GPT-4.1模型,GPT-4.1编码和图像理解能力实例展示
  • 【SPIN】PROMELA并发编程(SPIN学习系列--3)
  • 【Dify 前端源码解读系列】聊天组件功能分析文档
  • 解决Windows磁盘管理中因夹卷导致的无法分区问题
  • go 数据类型转换
  • LeetCode-滑动窗口-找到字符串中所有字母异位词
  • 【力扣刷题】LeetCode763-划分字母区间
  • 力扣网-复写零
  • 【Go】从0开始学习Go
  • 力扣每日一题5-19
  • OpenMV IDE 的图像接收缓冲区原理
  • leetcode 74. Search a 2D Matrix
  • 【滑动窗口】LeetCode 1004题解 | 最大连续1的个数 Ⅲ
  • IDE 使用技巧与插件推荐
  • 力扣992做题笔记
  • 上海浦江游览南拓新航线首航,途经前滩、世博文化公园等景点
  • 第1现场|俄媒称乌克兰网上出售北约对乌军培训手册
  • 俄方确认普京与特朗普将于今晚通话
  • 脱欧后首次英欧峰会召开前夕,双方却因渔业和青年流动议题僵住了
  • 美国前总统拜登确诊前列腺癌
  • 泽连斯基与美国副总统及国务卿会谈,讨论伊斯坦布尔谈判等问题