安全性
概述
本文档涵盖了保护 Kapacitor 开源分发版的基础知识。
当寻求保护 Kapacitor 的安全时,假定 Kapacitor 服务器将与已经安全配置的 InfluxDB 服务器进行通信。它还将使其任务和警报可供 Chronograf 安装使用。
接下来的讨论将涵盖配置 Kapacitor 以与安全的 InfluxDB 服务器通信,在 Kapacitor 中启用TLS,以及将启用了 TLS 的 Kapacitor 服务器连接到Chronograf。
身份验证和授权在开源 Kapacitor 分发版中并未完全实现,但它们是企业版 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 属性设置为 true。否则将导致 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://:8086/ping: x509: certificate is valid for lenovo-TP02, not localhost"重要提示 – 请注意,在生产环境中,对于标准的 CA 证书,insecure-skip-verify 需要设置为 false(即不跳过验证)。
在配置文件中,这些值根据以下示例进行设置。
示例 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://: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-cert和ssl-key– 指示证书和密钥文件的位置。insecure-skip-verify– 使用自签名证书进行测试时,将其设置为true,否则应设置为false,尤其是在生产环境中。subscription-protocol– 声明订阅通信的正确协议。例如,如果 Kapacitor 将通过 HTTP 运行,则此属性应设置为"http";如果 Kapacitor 将通过 HTTPS 运行,则此属性应设置为"https"。
请注意,当 CA 文件包含证书和密钥时,可以使用 ssl-ca 属性代替 ssl-cert 和 ssl-key。
作为环境变量,这些属性可以按如下方式设置:
示例 2 – InfluxDB 的 TLS 配置属性 – ENVARS
KAPACITOR_INFLUXDB_0_URLS_0="https://: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 文件中。
Kapacitor 到 InfluxDB 的 TLS 配置(通过 HTTP API)
这些属性也可以使用 HTTP API 进行设置。要获取 Kapacitor 配置的当前 InfluxDB 部分,请使用以下 curl 命令:
curl -ks https://: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://:8086"
],
"username": "admin"
},
"redacted": [
"password"
]
}
],
"link": {
"href": "/kapacitor/v1/config/influxdb",
"rel": "self"
}
}可以通过发送一个包含字段 `“set”` 然后是要修改的属性的 JSON 文档来更新属性。
例如,以下命令将 insecure-skip-verify 属性设置为 false。
curl -kv -d '{ "set": { "insecure-skip-verify": false } }' https://: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.8.2~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://:9092/kapacitor/v1/config/influxdb/设置
subscription-protocol:curl -kv -d '{ "set": { "subscription-protocol": "https" } }' https://:9092/kapacitor/v1/config/influxdb/如果 Kapacitor 位于反向代理后面,请设置
subscription-path以附加到 InfluxDB 订阅 URL:curl -kv -d '{ "set": { "subscription-path": "/path/behind/reverse-proxy" } }' https://:9092/kapacitor/v1/config/influxdb/设置 CA 证书的路径:
curl -kv -d '{ "set": { "ssl-ca": "/etc/ssl/influxdata-selfsigned-incl-pub-key.pem" } }' https://: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://:8086"]
username = "admin"
password = "changeit"
timeout = 0
...示例 4 中相关的参数是 username 和 password。
它们也可以设置为环境变量。
示例 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://:9092/kapacitor/v1/config/influxdb/Kapacitor 安全
开源 Kapacitor 为 HTTP API 的通信提供了 TLS 加密。
Kapacitor 通过 TLS
此功能可以在配置文件的 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 – 以 ENVARS 的形式启用 TLS
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://:9092/write?consistency=&db=telegraf&precision=ns&rp=autogen: http: server gave HTTP response to HTTPS client service=subscriberKapacitor 命令行客户端(使用 HTTPS)
启用 HTTPS 后,Kapacitor 命令行客户端需要提供 -url 参数才能连接。如果使用自签名或其他未添加到系统证书存储的证书,还需要提供附加参数 -skipVerify。
$ kapacitor -url https://: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] 部分设置 username、password 和 auth-enabled 参数。
Kapacitor 还支持使用 InfluxDB Enterprise 来管理 Kapacitor API 交互的身份验证和授权。有关说明,请参阅“设置 InfluxDB Enterprise 授权”。
关于 HTTP API 配置和重启 Kapacitor 的说明
请注意,当使用 HTTP API 设置配置值时,这些值将保留在 Kapacitor 数据库中,即使重启后也是如此。要在重启时关闭这些覆盖设置,请在配置文件(kapacitor.conf)中将 skip-config-overrides 属性设置为 true,或者将其设置为环境变量(KAPACITOR_SKIP_CONFIG_OVERRIDES)。
在重启后排查连接问题时,请检查 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 的安全
当 Kapacitor 配置为启用 HTTPS/TLS 后,许多用户会希望将其添加到 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)。
- 在左侧导航栏中,打开配置页面。这将显示所有可用的 InfluxDB 连接。在要添加 Kapacitor 连接的 InfluxDB 连接所在行,单击添加 Kapacitor 连接链接。这将加载“添加新 Kapacitor 连接”页面。
图像 1 – 添加 Kapacitor 连接

- 在连接详细信息组中,填写连接的名称等详细信息,然后单击连接按钮。
图像 2 – Kapacitor 连接详细信息

- 如果证书已安装在系统中,将出现成功通知。
图像 3 – Kapacitor 连接成功

如果返回错误通知,请检查 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- 此外,还会出现用于编辑和添加 Kapacitor 处理程序端点的选项卡式表单。在较宽的屏幕上,它们将位于“连接详细信息”组的右侧。在较窄的屏幕上,它们将位于“连接详细信息”组的下方。
图像 4 – 配置 Kapacitor 处理程序端点

此时,Kapacitor 可用于通过 Chronograf 生成警报和 TICK 脚本。这些功能可通过左侧导航栏中的警报选项访问。
此页面是否有帮助?
感谢您的反馈!
支持和反馈
感谢您成为我们社区的一员!我们欢迎并鼓励您对 Kapacitor 和本文档提供反馈和错误报告。要获取支持,请使用以下资源: