文档文档

安全性

概述

本文档介绍了保护 Kapacitor 开源发行版的基础知识。

在寻求保护 Kapacitor 时,假设 Kapacitor 服务器将与已保护的 InfluxDB 服务器通信。它还将使其任务和警报可用于 Chronograf 安装。

以下讨论将涵盖配置 Kapacitor 以与安全 InfluxDB 服务器通信,在 Kapacitor 中启用 TLS 以及将启用 TLS 的 Kapacitor 服务器连接到 Chronograf

身份验证和授权在开源 Kapacitor 发行版中尚未完全实现,但作为 Enterprise Kapacitor 的一项功能提供。

保护 InfluxDB 和 Kapacitor

InfluxDB 可以通过传输层上的 TLS 以及数据库的身份验证来保护其通信。如何在 InfluxDB 中启用 TLS 以及身份验证和授权,请参阅 InfluxDB 文档的 HTTPS 设置身份验证和授权 部分。

Kapacitor 配置支持 HTTPS 通信和 InfluxDB 身份验证。参数可以直接在配置文件中设置,也可以作为环境变量或通过 Kapacitor 的 HTTP API 设置。

Kapacitor 配置的概述在配置文档中提供。

Kapacitor 和 InfluxDB HTTPS

要激活 TLS 连接,influxdb 服务器配置中的 urls 字符串需要包含 https 协议。此外,还需要指定 PEM 编码的公钥和证书对或 PEM 编码的 CA 文件。

当使用自签名证书进行测试时,关闭证书验证也很重要,可以使用属性 insecure-skip-verify。否则会导致 x509 证书错误,如下所示

ts=2018-02-19T13:26:11.437+01:00 lvl=error msg="failed to connect to InfluxDB, retrying..." service=influxdb cluster=localhost err="Get https://localhost:8086/ping: x509: certificate is valid for lenovo-TP02, not localhost"

重要提示 – 请注意,在具有标准 CA 证书的生产环境中,需要关闭 insecure-skip-verify

在配置文件中,这些值根据以下示例设置。

示例 1 – InfluxDB 的 TLS 配置属性 – kapacitor.conf

[[influxdb]]
  # Connect to an InfluxDB cluster
  # Kapacitor can subscribe, query and write to this cluster.
  # Using InfluxDB is not required and can be disabled.
  enabled = true
  default = true
  name = "localhost"
  urls = ["https://localhost:8086"]
  timeout = 0
  # Absolute path to pem encoded CA file.
  # A CA can be provided without a key/cert pair
  #   ssl-ca = "/etc/ssl/influxdata-selfsigned-incl-pub-key.pem"
  # Absolutes paths to pem encoded key and cert files.
     ssl-cert = "/etc/ssl/influxdb-selfsigned.crt"
     ssl-key = "/etc/ssl/influxdb-selfsigned.key"
...
   insecure-skip-verify = false
...
   subscription-protocol = "https"     
...   

示例 1 中的相关属性是

  • urls – 注意协议是 https不是 http
  • ssl-certssl-key – 指示证书和密钥文件的位置。
  • insecure-skip-verify – 对于使用自签名证书进行测试,请将其设置为 true,否则应为 false,尤其是在生产环境中。
  • subscription-protocol – 声明订阅通信的正确协议。例如,如果 Kapacitor 要在 HTTP 上运行,则应将其设置为 "http",但是,如果 Kapacitor 要在“HTTPS”上运行,则应将其设置为 "https"

请注意,当 CA 文件包含证书和密钥时,可以使用属性 ssl-ca 代替 ssl-certssl-key

作为环境变量,这些属性可以按如下方式设置

示例 2 – InfluxDB 的 TLS 配置属性 – ENVARS

KAPACITOR_INFLUXDB_0_URLS_0="https://localhost:8086"
KAPACITOR_INFLUXDB_0_SSL_CERT="/etc/ssl/influxdb-selfsigned.crt"
KAPACITOR_INFLUXDB_0_SSL_KEY="/etc/ssl/influxdb-selfsigned.key"
KAPACITOR_INFLUXDB_0_INSECURE_SKIP_VERIFY=true
KAPACITOR_INFLUXDB_0_SUBSCRIPTION_PROTOCOL="https"

当使用 Systemd 管理 Kapacitor 守护程序时,上述参数可以存储在文件 /etc/default/kapacitor 中。

通过 HTTP API 进行 Kapacitor 到 InfluxDB 的 TLS 配置

这些属性也可以使用 HTTP API 设置。要获取 Kapacitor 配置的当前 InfluxDB 部分,请使用以下 curl 命令

curl -ks http://localhost:9092/kapacitor/v1/config/influxdb | python -m json.tool > kapacitor-influxdb.conf

这将生成以下文件

示例 3 – Kapacitor 配置的 InfluxDB 部分

{
    "elements": [
        {
            "link": {
                "href": "/kapacitor/v1/config/influxdb/localhost",
                "rel": "self"
            },
            "options": {
                "default": true,
                "disable-subscriptions": false,
                "enabled": true,
                "excluded-subscriptions": {
                    "_kapacitor": [
                        "autogen"
                    ]
                },
                "http-port": 0,
                "insecure-skip-verify": false,
                "kapacitor-hostname": "",
                "name": "localhost",
                "password": true,
                "ssl-ca": "",
                "ssl-cert": "/etc/ssl/influxdb-selfsigned.crt",
                "ssl-key": "/etc/ssl/influxdb-selfsigned.key",
                "startup-timeout": "5m0s",
                "subscription-mode": "cluster",
                "subscription-protocol": "https",
                "subscription-path": "",
                "subscriptions": {},
                "subscriptions-sync-interval": "1m0s",
                "timeout": "0s",
                "udp-bind": "",
                "udp-buffer": 1000,
                "udp-read-buffer": 0,
                "urls": [
                    "https://localhost:8086"
                ],
                "username": "admin"
            },
            "redacted": [
                "password"
            ]
        }
    ],
    "link": {
        "href": "/kapacitor/v1/config/influxdb",
        "rel": "self"
    }
}

可以通过 POST 包含字段 “set” 后跟要修改的属性的 JSON 文档来更新属性。

例如,以下命令关闭 insecure-skip-verify 属性。

curl -kv -d '{ "set": { "insecure-skip-verify": false } }' http://localhost:9092/kapacitor/v1/config/influxdb/
...
upload completely sent off: 43 out of 43 bytes
< HTTP/1.1 204 No Content
< Content-Type: application/json; charset=utf-8
< Request-Id: 189e9abb-157b-11e8-866a-000000000000
< X-Kapacitor-Version: 1.7.6~n201802140813
< Date: Mon, 19 Feb 2018 13:45:07 GMT
<
* Connection #0 to host localhost left intact

类似命令

  • 更改 URLS

    curl -kv -d '{ "set": { "urls": [ "https://lenovo-TP02:8086" ]} }' https://localhost:9092/kapacitor/v1/config/influxdb/
    
  • 设置 subscription-protocol

    curl -kv -d '{ "set": { "subscription-protocol": "https" } }' https://localhost:9092/kapacitor/v1/config/influxdb/
    
  • 如果 Kapacitor 位于反向代理之后,请设置 subscription-path 以附加到 InfluxDB 订阅 URL

    curl -kv -d '{ "set": { "subscription-path": "/path/behind/reverse-proxy" } }' https://localhost:9092/kapacitor/v1/config/influxdb/
    
  • 设置 CA 证书的路径

    curl -kv -d '{ "set": { "ssl-ca": "/etc/ssl/influxdata-selfsigned-incl-pub-key.pem" } }' https://localhost:9092/kapacitor/v1/config/influxdb/
    

其他属性可以以类似方式设置。

Kapacitor 和 InfluxDB 身份验证

InfluxDB 中提供的另一种安全机制是身份验证和授权。可以将 Kapacitor 配置为使用用户名:密码对与 InfluxDB 通信。这些属性可以在配置文件中设置,也可以作为环境变量或通过 HTTP API 设置。

示例 4 – InfluxDB 身份验证参数 – kapacitor.conf

[[influxdb]]
  # Connect to an InfluxDB cluster
  # Kapacitor can subscribe, query and write to this cluster.
  # Using InfluxDB is not required and can be disabled.
  enabled = true
  default = true
  name = "localhost"
  urls = ["https://localhost:8086"]
  username = "admin"
  password = "changeit"
  timeout = 0
...

示例 4 中的相关参数是 usernamepassword

这些也可以设置为环境变量。

示例 5 – InfluxDB 身份验证参数 – ENVARS

KAPACITOR_INFLUXDB_0_USERNAME="admin"
KAPACITOR_INFLUXDB_0_PASSWORD="changeit"

当使用 Systemd 管理 Kapacitor 守护程序时,上述参数可以存储在文件 /etc/defaults/kapacitor 中。

或者,它们可以通过 HTTP API 设置或更新。

$ curl -kv -d '{ "set": { "username": "foo", "password": "bar" } }' https://localhost:9092/kapacitor/v1/config/influxdb/

Kapacitor 安全性

开源 Kapacitor 提供 TLS 用于加密与 HTTP API 的通信。

通过 TLS 的 Kapacitor

可以在配置的 http 组中启用此功能。激活只需要将属性 https-enabled 设置为 true,然后使用属性 https-certificate 提供证书的路径。如果您的证书的私钥是分开的,请使用 https-private-key 属性指定私钥的路径。

以下示例显示了如何在 kapacitor.conf 文件中完成此操作。

示例 6 – 在 kapacitor.conf 中启用 TLS

[http]
  # HTTP API Server for Kapacitor
  # This server is always on,
  # it serves both as a write endpoint
  # and as the API endpoint for all other
  # Kapacitor calls.
  bind-address = ":9092"
  log-enabled = true
  write-tracing = false
  pprof-enabled = false
  https-enabled = true
  https-certificate = "/etc/ssl/influxdata-selfsigned.crt"
  https-private-key = "/etc/ssl/influxdata-selfsigned.key"

这些值也可以设置为环境变量,如下一个示例所示。

示例 7 – 将 TLS 启用为 ENVARS

KAPACITOR_HTTP_HTTPS_ENABLED=true
KAPACITOR_HTTP_HTTPS_CERTIFICATE="/etc/ssl/influxdata-selfsigned.crt"
KAPACITOR_HTTP_HTTPS_PRIVATE_KEY="/etc/ssl/influxdata-selfsigned.key"

但是,它们不能通过 HTTP API 设置。

请记住,当 Kapacitor 在 HTTPS 上运行时,这需要反映在 Kapacitor 配置的 [[influxdb]] 组的 subscription-protocol 属性中。请参阅上面的 示例 1。此属性的值需要设置为 https。否则会导致 Kapacitor 日志中出现 TLS handshake error 错误,消息为 oversized record received with length 21536,如下所示

ts=2018-02-19T13:23:49.684+01:00 lvl=error msg="2018/02/19 13:23:49 http: TLS handshake error from 127.0.0.1:49946: tls: oversized record received with length 21536\n" service=http service=httpd_server_errors

如果出于任何原因关闭了 TLS,则需要将此属性重置为 http。否则会导致 InfluxDB 无法将订阅数据推送到 Kapacitor,并且 InfluxDB 日志中会显示如下消息

mar 05 17:02:40 algonquin influxd[32520]: [I] 2018-03-05T16:02:40Z Post https://localhost:9092/write?consistency=&db=telegraf&precision=ns&rp=autogen: http: server gave HTTP response to HTTPS client service=subscriber

带有 HTTPS 的 Kapacitor 命令行客户端

启用 HTTPS 后,Kapacitor 命令行客户端将需要提供 -url 参数才能连接。如果使用了自签名证书或其他未添加到系统证书存储的证书,则还需要提供额外的参数 -skipVerify

$ kapacitor -url https://localhost:9092 -skipVerify list tasks
ID                                                 Type      Status    Executing Databases and Retention Policies
chronograf-v1-3586109e-8b7d-437a-80eb-a9c50d00ad53 stream    enabled   true      ["telegraf"."autogen"]

Kapacitor 身份验证和授权

为了确保 Kapacitor 需要用户名和密码才能连接,请启用基本身份验证。为此,请在 kapacitor.conf[http] 部分设置 usernamepasswordauth-enabled 参数。

Kapacitor 还支持使用 InfluxDB Enterprise 来管理与 Kapacitor API 交互的身份验证和授权。有关说明,请参阅 “设置 InfluxDB Enterprise 授权”

关于 HTTP API 配置和重启 Kapacitor 的说明

请注意,当使用 HTTP API 设置配置值时,即使在重启后,这些值也会保留在 Kapacitor 数据库中。要在重启时关闭这些覆盖,请在配置文件 (kapacitor.conf) 或作为环境变量 (KAPACITOR_SKIP_CONFIG_OVERRIDES) 将属性 skip-config-overrides 设置为 true

当在重启后排除连接问题时,请检查 HTTP API,例如 http://localhost:9092/kapacitor/v1/config。如果 Kapacitor 到 InfluxDB 的通信似乎不遵守在文件 kapacitor.conf 或环境变量中看到的值,这将特别有用。

拒绝特定的 CIDR 范围

要拒绝来自某些 CIDR 范围(IP 地址类别)对 Kapacitor 的访问,请使用 -blacklist-cidrs 标志。传递以逗号分隔的 CIDR 列表以拒绝大多数 HTTP GET/POST 操作

kapacitord -blacklist-cidrs 10.0.0.0/8,0.0.0.0/32

禁用特定的警报处理程序

使用 -disable-handlers 标志禁用一组警报处理程序。传递以逗号分隔的 处理程序列表

kapacitord -disable-handlers exec,httppost

保护 Kapacitor 和 Chronograf

通过配置启用 HTTPS/TLS 的 Kapacitor,许多用户希望将 Kapacitor 添加到 Chronograf 中的连接配置。要使其工作,主要要求是在运行 Chronograf 服务的主机上安装基本签名证书。在大多数操作系统中,情况应该已经是这样。

当使用自签名证书时,这意味着将自签名证书安装到系统中。

在 Debian 上安装自签名证书

作为在 Debian/Ubuntu 中将自签名证书安装到系统的示例,任何证书都可以复制到目录 /usr/local/share/ca-certificates/,然后可以重建证书存储。

$ sudo cp /etc/ssl/influxdb-selfsigned.crt /usr/local/share/ca-certificates/
$ sudo update-ca-certificates
Updating certificates in /etc/ssl/certs...
1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...

Replacing debian:influxdb-selfsigned.pem
done.
done.

如果已将自签名证书或其他证书添加到系统,则需要重启 Chronograf 服务以收集新的证书信息。

$ sudo systemctl restart chronograf.service

在 Chronograf 中添加 Kapacitor 连接

以下说明适用于 Chronograf UI。如果已安装 Chronograf,则默认情况下可以在端口 8888 找到它(例如 http://localhost:8888)。

  1. 在左侧导航栏中,打开配置页面。这将显示所有可用的 InfluxDB 连接。在包含要添加 Kapacitor 连接的 InfluxDB 连接的行中,单击链接添加 Kapacitor 连接。这将加载“添加新的 Kapacitor 连接”页面。

图片 1 – 添加 Kapacitor 连接

Add Kapacitor 01
  1. 连接详细信息组中,填写连接名称等详细信息,然后单击连接按钮。

图片 2 – Kapacitor 连接详细信息

Add Kapacitor 02
  1. 如果证书已安装在系统上,则将显示成功通知。

图片 3 – Kapacitor 连接成功

Add Kapacitor 03

如果返回错误通知,请检查 Chronograf 日志以查找代理错误。例如

mar 06 13:53:07 lenovo-tp02 chronograf[12079]: 2018/03/06 13:53:07 http: proxy error: x509: certificate is valid for locahlost, not localhost
  1. 用于编辑和添加 Kapacitor 处理程序端点的选项卡式表单也将出现。在较宽的屏幕中,它们将位于“连接详细信息”组的右侧。在较窄的屏幕中,它们将位于“连接详细信息”组下方。

图片 4 – 配置 Kapacitor 处理程序端点

Add Kapacitor 04

此时,可以使用 Kapacitor 通过 Chronograf 生成警报和 TICKscript。这些功能通过左侧导航栏中的警报项提供。


此页是否对您有帮助?

感谢您的反馈!


Flux 的未来

Flux 即将进入维护模式。您可以继续像当前一样使用它,而无需对代码进行任何更改。

阅读更多

InfluxDB 3 开源版本现已发布公开 Alpha 版

InfluxDB 3 开源版本现已可用于 alpha 测试,根据 MIT 或 Apache 2 许可获得许可。

我们正在发布两个产品作为 alpha 版本的一部分。

InfluxDB 3 Core 是我们的新开源产品。它是用于时间序列和事件数据的最新数据引擎。InfluxDB 3 Enterprise 是一个商业版本,它建立在 Core 的基础上,增加了历史查询功能、读取副本、高可用性、可扩展性和细粒度的安全性。

有关如何开始使用的更多信息,请查看