TDengine 安全部署设置建议

[复制链接]
发表于 2025-6-8 21:33:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

配景

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 设置文件中修改如下设置:
  1. [ssl]
  2. enable = true
  3. certFile = "/path/to/certificate-file"
  4. 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 设置文件中修改如下设置:
  1. [serve]
  2. listen = "127.0.0.1:6050"
  3. grpc = "127.0.0.1:6055"
复制代码
从 TDengine 3.3.6.0 开始,taosX 支持 HTTPS 毗连,在 /etc/taos/taosx.toml 文件中添加如下设置:
  1. [serve]
  2. ssl_cert = "/path/to/server.pem"
  3. ssl_key =  "/path/to/server.key"
  4. ssl_ca =   "/path/to/ca.pem"
复制代码
并在 Explorer 中修改 API 地址为 HTTPS 毗连:
  1. # taosX API 本地连接
  2. x_api = "https://127.0.01:6050"
  3. # Public IP 或者域名地址
  4. grpc = "https://public.domain.name:6055"
复制代码
taosExplorer

与 taosAdapter 组件相似,taosExplorer 组件提供 HTTP 服务对外访问。在 /etc/taos/explorer.toml 设置文件中修改如下设置:
  1. [ssl]
  2. # SSL certificate file
  3. certificate = "/path/to/ca.file"
  4. # SSL certificate private key
  5. 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 中存在:
  1. [tdengine]
  2. host = "localhost"
  3. port = 6041
  4. username = "root"
  5. password = "taosdata"
  6. usessl = false
复制代码
安全增强

我们建议使用在局域网内部使用 TDengine。
如果必须在局域网外部提供访问,请考虑添加以下设置:
负载均衡

使用负载均衡对外提供 taosAdapter 服务。
以 Nginx 为例,设置多节点负载均衡:
  1. http {
  2.     server {
  3.         listen 6041;
  4.         
  5.         location / {
  6.             proxy_pass http://websocket;
  7.             # Headers for websocket compatible
  8.             proxy_http_version 1.1;
  9.             proxy_set_header Upgrade $http_upgrade;
  10.             proxy_set_header Connection $connection_upgrade;
  11.             # Forwarded headers
  12.             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  13.             proxy_set_header X-Forwarded-Proto $scheme;
  14.             proxy_set_header X-Forwarded-Host $host;
  15.             proxy_set_header X-Forwarded-Port $server_port;
  16.             proxy_set_header X-Forwarded-Server $hostname;
  17.             proxy_set_header X-Real-IP $remote_addr;
  18.         }
  19.     }
  20.     upstream websocket {
  21.         server 192.168.11.61:6041;
  22.         server 192.168.11.62:6041;
  23.         server 192.168.11.63:6041;
  24.    }
  25. }
复制代码
如果 taosAdapter 组件未设置 SSL 安全毗连,还需要设置 SSL 才气保证安全访问。SSL 可以设置在更上层的 API Gateway,也可以设置在 Nginx 中;如果你对各组件之间的安全性有更强的要求,您可以在所有组件中都设置 SSL。Nginx 设置如下:
  1. http {
  2.     server {
  3.         listen 443 ssl;
  4.         ssl_certificate /path/to/your/certificate.crt;
  5.         ssl_certificate_key /path/to/your/private.key;
  6.     }
  7. }
复制代码
安全网关

在现在互联网生产系统中,安全网关使用也很普遍。traefik 是一个很好的开源选择,我们以 traefik 为例,解释在 API 网关中的安全设置。
Traefik 中通过 middleware 中间件提供多种安全设置,包罗:

  • 认证(Authentication):Traefik 提供 BasicAuth、DigestAuth、自界说认证中间件、OAuth 2.0 等多种认证方式。
  • IP 白名单(IPWhitelist):限制允许访问的客户端 IP。
  • 频率限制(RateLimit):控制发送到服务的请求数。
  • 自界说 Headers:通过自界说 Headers 添加 allowedHosts 等设置,提高安全性。
一个常见的中间件示比方下:
  1. labels:
  2.   - "traefik.enable=true"
  3.   - "traefik.http.routers.tdengine.rule=Host(`api.tdengine.example.com`)"
  4.   - "traefik.http.routers.tdengine.entrypoints=https"
  5.   - "traefik.http.routers.tdengine.tls.certresolver=default"
  6.   - "traefik.http.routers.tdengine.service=tdengine"
  7.   - "traefik.http.services.tdengine.loadbalancer.server.port=6041"
  8.   - "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
  9.   - "traefik.http.middlewares.check-header.headers.customrequestheaders.X-Secret-Header=SecretValue"
  10.   - "traefik.http.middlewares.check-header.headers.customresponseheaders.X-Header-Check=true"
  11.   - "traefik.http.middlewares.tdengine-ipwhitelist.ipwhitelist.sourcerange=127.0.0.1/32, 192.168.1.7"
  12.   - "traefik.http.routers.tdengine.middlewares=redirect-to-https,check-header,tdengine-ipwhitelist"
复制代码
上面的示例完成以下设置:


  • TLS 认证使用 default 设置,这个设置可使用设置文件或 traefik 启动参数中设置,如下:
    1. traefik:
    2. image: "traefik:v2.3.2"
    3. hostname: "traefik"
    4. networks:
    5. - traefik
    6. command:
    7. - "--log.level=INFO"
    8. - "--api.insecure=true"
    9. - "--providers.docker=true"
    10. - "--providers.docker.exposedbydefault=false"
    11. - "--providers.docker.swarmmode=true"
    12. - "--providers.docker.network=traefik"
    13. - "--providers.docker.watch=true"
    14. - "--entrypoints.http.address=:80"
    15. - "--entrypoints.https.address=:443"
    16. - "--certificatesresolvers.default.acme.dnschallenge=true"
    17. - "--certificatesresolvers.default.acme.dnschallenge.provider=alidns"
    18. - "--certificatesresolvers.default.acme.dnschallenge.resolvers=ns1.alidns.com"
    19. - "[email protected]"
    20. - "--certificatesresolvers.default.acme.storage=/letsencrypt/acme.json"
    复制代码
上面的启动参数设置了 default TSL 证书剖析器和自动 acme 认证(自动证书申请和延期)。


  • 中间件 redirect-to-https:设置从 HTTP 到 HTTPS 的转发,强制使用安全毗连。
    1. - "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
    复制代码
  • 中间件 check-header:设置自界说 Headers 检查。外部访问必须添加自界说 Header 并匹配 Header 值,避免非法访问。这在提供 API 访问时是一个非常简朴有效的安全机制。
  • 中间件 tdengine-ipwhitelist:设置 IP 白名单。仅允许指定 IP 访问,使用 CIDR 路由规则举行匹配,可以设置内网及外网 IP 地址。
总结

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

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表