(三)node_exporter启用TSL并配置用户认证
介绍
前面我们介绍了prometheus集成node_exporter,主要用于收集主机上的度量数据,例如CPU、内存、磁盘使用情况等。然而,在高度安全的环境中使用node_exporter时,需要采取措施来保护数据的机密性和完整性。在这篇博文中,我们将讨论如何在node_exporter上添加认证和配置tsl。
1、添加认证
默认情况下,node_exporter不支持任何形式的认证,这意味着任何人都可以访问它并收集主机的度量数据。为了解决这个问题,我们需要将认证添加到node_exporter中。
1.1、设置密文
我们可以使用第三方工具htpasswd来添加认证。
htpasswd是一个Apache HTTP Server的命令行工具,用于创建和管理基于HTTP基本身份验证的用户文件。通过htpasswd,可以创建一个包含用户名和加密密码的文件,将其与Web服务器一起使用以强制对受保护资源的访问进行身份验证。这是在高度安全的环境中保护Web资源的一种简单方法。
使用htpasswd,首先安装httpd-tools工具
# centos操作系统
yum install httpd-tools -y
htpasswd -nBC 12 '' | tr -d ':\\n'
输入密码后会生成对应的密文,这个后面会用到
1.2、node_exporter添加config.yaml文件,配置用户名密码
进入到node_exporter的解压文件夹中,新建并编辑文件config.yaml文件
basic_auth_users:
# 前面的admin是用户名,后面的密码是刚才上面加密后密文
admin: $2y$12$7nzpGM46C59XKcUBNhclt.na7O6VVqwIAeRWToURXWcEgVS0lsBnS
1.3、Prometheus添加basic配置
进入到Prometheus文件夹,编辑prometheus.yml文件,添加basic_auth信息
- job_name: "node_local"
basic_auth:
username: admin
password: password11
static_configs:
- targets: ["localhost:7910"]
2、配置TSL
默认情况下,node_exporter使用非加密的HTTP协议来传输数据。这意味着在传输过程中,数据可能会被中间人窃听或篡改。Node_exporter 1.0 以上版本才支持 TLS 和 Basic Auth。 我们可以通过配置node_exporter来使用TLS协议来解决这个问题。
2.1、生成证书
现代的证书规范建议使用"Subject Alternative Names"(SANs)字段。这是由于证书颁发机构(CA)和TLS/SSL标准的更新,SANs字段现在被视为更安全和可靠的选择。如果使用之前的证书,会报如下错误:
Get "<https://ip:7910/metrics>": x509: certificate relies on legacy Common Name field, use SANs instead
# centos,ubuntu一般都内置了OpenSSL
# (1)创建存放证书的文件夹
mkdir /usr/local/certificate
# (2)创建根证书的私钥和根证书:
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 365 -out rootCA.crt
# (3)生成证书签名请求(CSR)文件
openssl genrsa -out node-exporter.key 2048
openssl req -new -key node-exporter.key -out node-exporter.csr
# (4)创建并编辑扩展配置文件(san.cnf)以包含SANs字段
vi san.cnf
san.cof文件
[req]
req_extensions = v3_req
[v3_req]
subjectAltName = DNS:**域名或主机名**, IP:**ip地址**
# (5)使用扩展配置文件生成证书 确保 -extfile 和 -extensions 参数与您的配置文件(san.cnf)中的段名一致
openssl x509 -req -in node-exporter.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out node-exporter.crt -days 365 -sha256 -extfile san.cnf -extensions v3_req
2.2、编辑node_exporter文件夹的config.yaml文件,添加证书配置
将生成的证书,不是根证书奥,复制到node_exporter文件夹下,并在配置文件中进行配置
config.yaml文件
tls_server_config:
cert_file: node-exporter.crt
key_file: node-exporter.key
basic_auth_users:
# 用户名 : 密码
admin: $2y$12$7nzpGM46C59XKdssBNhclt.na7O6VVqwIAeRWToURXWcEgVS0lsBnS
2.3、编辑Prometheus的配置文件prometheus.yml文件
将node-exporter.crt证书文件下载,并上传到部署Prometheus服务器上(部署Prometheus服务在服务器A上,监控的是服务器B),上传到目录 /etc/ssl/certs文件夹下(或者其他文件夹下)
prometheus.yml文件修改如下配置
- job_name: "node_server"
scheme: https
tls_config:
ca_file: /etc/ssl/certs/node-exporter.crt
basic_auth:
username: admin
password: password111
static_configs:
- targets: ["ip:7910"]
到此就配置完成了,对node_exporter启用了TSL,并且配置了basic_auth认证
总结
在高度安全的环境中使用node_exporter时,需要采取措施来保护数据的机密性和完整性。在本文中,我们讨论了如何使用Authelia添加认证,以及如何配置TLS来保护数据传输。这些步骤可以帮助您更好地保护您的主机度量数据,并确保您的监控系统安全可靠。