首页 » Web前端 » phpcurlbasicauth技巧_Prometheus设备Basic Auth进行安然防护实现登录控制

phpcurlbasicauth技巧_Prometheus设备Basic Auth进行安然防护实现登录控制

访客 2024-12-18 0

扫一扫用手机浏览

文章目录 [+]

大致步骤如下

预制用户密码,个中密码利用python3工具包加密创建对运用户密码配置文件,修正普罗启动命令(operator场景通过ngress-nginx办法)由于Prometheus访问须要认证,如果普罗负载存在探针则修正普罗负载本身的探针配置由于Prometheus访问须要认证,如果有grafana,须要修正grafana干系步骤三、准备事情,预制用户密码,个中密码利用python3工具包加密

由于Basic Auth 须要user、password 信息。
访问Prometheus API的所有行为都须要用户名和密码。
普罗配置的密码须要加盐加密,可以利用python3工具进行天生,再配置到普罗的干系配置中,作为登录密码认证利用。

phpcurlbasicauth技巧_Prometheus设备Basic Auth进行安然防护实现登录控制

安装python3环境

phpcurlbasicauth技巧_Prometheus设备Basic Auth进行安然防护实现登录控制
(图片来自网络侵删)

apt install python3-bcrypt

Python 脚本如下

import getpassimport bcryptpassword = getpass.getpass("password: ")hashed_password = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt())print(hashed_password.decode())

运行脚本,如果我们须要的密码为: test。

实行脚本后,须要我们手动键入须要利用的密码,在终端键入的时候不显示

保存密码备用: $2b$12$kXxrZP74Fmjh6Wih0Ignu.uWSiojl5aKj4UnMvHN9s2h/Lc/ui0.S

四、prometheus操作配置实践操作

在prometheus的日常利用中,常日有三种办法:

容器化支配在集群中通过kube-prometheus支配二进制直接在虚机上支配

三种不同办法安装的prometheus,配置basic auth的办法也略有差异。
本文将对这三种利用场景进行Basic auth的配置。

4.1 Prometheus容器化支配添加BasicAuth

默认无需用户、密码等认证办法,直接通过做事IP和端口就能访问到prometheus 的queryAPI和UI界面

如果须要给UI和 prometheus API 添加basic auth,那么该如何做呢?

确认prom的版本信息,低于2.24版本的prometheus 不支持配置Basic Auth

存在该启动命令,即可配置basic auth。

创建configmap配置项

准备webconfig.yml文件

basic_auth_users: admin: $2b$12$kXxrZP74Fmjh6Wih0Ignu.uWSiojl5aKj4UnMvHN9s2h/Lc/ui0.S

检测webconfig.yml是否可用:

promtool check web-config webconfig.yml

复用上述的webconfig.yml

kubectl -n monitoring create configmap webconfig --from-file=webconfig.yml

将configmap挂载给prometheus 实例

有多处修正点。

须要修正volume配置,即增加configmap的挂载

volumes: - configMap: name: webconfig name: basic-auth

修正后效果如下:

须要将配置挂载给prometheus容器,添加挂载点

volumeMounts: - mountPath: /etc/prometheus/basicauth name: basic-auth

修正后效果如下:

须要修正启动命令,添加 web.config.file

- --web.config.file=/etc/prometheus/basicauth/webconfig.yml

修正后效果如下:

修正完上述配置后,还得看情形连续修正探针配置。

修正探针配置 (如果有康健检讨干系配置的话)

同时还须要检讨prometheus负载 是否有存活探针livenessProbe,和就绪探针readinessProbe干系配置。
如果配置了探针,则须要对探针信息进行修正,添加访问头信息。
否则会报错:

由于kubelet探针须要访问prometheus接口,进行存活和就绪检测。
如果配置了httpGet探针,不对探针进行httpHeaders配置,就会引起pod不断重启,无法正常运行。

修正办法如下:

首先须要对 用户名和明文密码进行 Base64编码处理,例如我设置的basicauth信息是: admin:test

则须要echo -n "admin:test" |base64 -w0 ,编码后的信息为: YWRtaW46dGVzdA== ,保存备用

然后连续编辑Prometheus负载配置:

在livenessProbe.httpGet/readinessProbe.httpGet中添加:

httpGet: httpHeaders: - name: Authorization value: Basic YWRtaW46dGVzdA==

修正完成后,保存退出负载配置。
然夹帐动重启pod实例。

修正完成后,查看prometheus 实例状态。
实例就绪

访问prometheus的queryAPI,创造如果不带用户信息,则访问失落败。
basic auth生效

访问Prometheus UI: 须要带用户鉴权,否则无法访问:

页面密码输入明文即可。

4.2 Prometheus-operator支配场景添加basic auth

当前在k8s 支配prometheus 大都选择kube-prometheus这种形式,配置文件的变更都是交由crd进行管理。
统一由prometheus-operator进行识别转换。

查看对应的prometheus实例,并访问http API

默认是不带鉴权的。

查看prometheus crd 的配置,创造没有web.config.file 干系可以配置的地方

当前kube-prometheus 还不支持配置basic auth,详情可见https://github.com/prometheus-operator/prometheus-operator/issues/5765

规避方案

借助nginx-ingress的能力配置basic auth。
nginx ingress 在这方面非常灵巧。

即创建ingress 来实现。
再创建ingress之前,我们须要先准备auth-secret

实行下述命令之前 先安装 工具: yum -y install httpd

$ htpasswd -c auth adminNew password: testNew password:Re-type new password:Adding password for user admin

效果如下:

利用auth文件创建secret:

kubectl create secret generic basic-auth --from-file=auth

给prometheus创建ingress访问入口

由于我利用的k8s版本是1.21,ingress的写法会有所不同,1.22往后,ingress的api也不再是networking.k8s.io/v1beta1

# ingress-prom.yamlapiVersion: networking.k8s.io/v1beta1kind: Ingressmetadata: annotations: nginx.ingress.kubernetes.io/auth-realm: Authentication Required nginx.ingress.kubernetes.io/auth-secret: basic-auth nginx.ingress.kubernetes.io/auth-type: basic kubernetes.io/ingress.class: nginx name: prometheus-k8s namespace: monitoringspec: rules: - host: prometheus.example.com http: paths: - backend: serviceName: prometheus-k8s servicePort: 9090 path: / pathType: Prefix

访问queryAPI&prometheus UI

可以创造queryAPI直接访问已经被限定登录

如果带鉴权用户访问则可以获取监控数据

同时也可以创造,访问UI已经限定登录鉴权

输入用户和密码后即可登录

高版本的k8s ingress写法可参考

apiVersion: networking.k8s.io/v1kind: Ingressmetadata: annotations: nginx.ingress.kubernetes.io/auth-realm: Authentication Required nginx.ingress.kubernetes.io/auth-secret: basic-auth nginx.ingress.kubernetes.io/auth-type: basic kubernetes.io/ingress.class: nginx name: prometheus-k8s namespace: monitoringspec: rules: - host: prometheus.example.com http: paths: - backend: service: name: prometheus-k8s port: name: web path: / pathType: Prefix4.3 Prometheus裸机办法支配添加Basic Auth

创建webconfig.yml

basic_auth_users: admin: $2b$12$kXxrZP74Fmjh6Wih0Ignu.uWSiojl5aKj4UnMvHN9s2h/Lc/ui0.S

启动prometheus

./prometheus --web.config.file=webconfig.yml --config.file=prometheus.yml

个中 --web.config.file=webconfig.yml 为关键配置,prometheus 启动后会哀求 带密码访问启动成功:

访问prometheus UI

哀求输入用户密码信息

访问prometheus http API接口

带用户信息访问:

五、Grafana 如何对接鉴权之后的Prometheus

正常来说,如果对Prometheus配置了Basic Auth后,所有须要访问Prometheus的组件均需做出调度,否则无法获取数据。
Grafana也不例外

登录Grafana UI, 初次登录须要填写grafana的用户密码,默认是admin:admin

确认数据源配置,并对数据源进行配置

配置完成后,点击正下方绿色按钮Test,测试数据源的联通性(不出意外,连接失落败)

如果没失落败,就万事大吉,无需在往下看了。
恭喜你完成对接。

失落败了请看下面,如何办理:

查看monitoring命名空间中grafana-datasource的configmap配置

kubectl get cm -n monitoring |grep grafana-datasources

编辑该配置项:

kubectl edit cm grafana-datasources -n monitoring

将 editable: false 设置为 : editable: true

修正的缘故原由是由于 grafana内置了默认的数据源,且数据源不许可修正。
我们须要调度这个默认的规定

手动重启grafana实例

cm修正完成后,无法动态加载配置,须要手动重启grafana实例加载新配置。

如果grafana没做持久化处理,之前手动配置的dashboard可能会由于重启grafana实例而丢失,建议备份dashboard,dashboard可由grafana页面以json格式导出

再次访问Grafana UI

查看dashboard信息:

Ok,大功告成!

六、总结建议

容器化支配的prometheus 修正逻辑实在和二进制相同。
将对应的Basic Auth 信息通报给prometheus,然后启动加载就可以了。
低版本Promethues加载失落败,会打印缺点日志:

unknow long flag '--web.config.file'

哀求Prometheus版本不低于2.24。

如果prometheus在支配的时候配置了存活探针和就绪探针,不对探针进行httpHeaders的配置,则会造成prometheus实例无法正常运行。

七 拓展内容7.1 Grafana 如何取消匿名登录

正常情形下,Grafana的监控信息该当须要用户才能登录显示对接数据源指标的显示。
如果谁都能登录查看,容器造成信息泄露等安全问题

如何才能实现Grafana的安全登录功能呢?

查看集群中monitoring ns下的grafana-conf 配置项

kubectl get cm -n monitoring |grep grafana-conf

编辑该配置项

kubectl edit cm -n monitoring grafana-conf

根据关键字找到 auth.anonymous配置,将enabled = true 设置为 fale

重启grafana 实例

修正配置后,须要重启grafana实例,加载配置(如果没做持久化处理,把稳备份干系dashboard)

刷新grafana页面,重新登录

可以创造,再次登录页面,都须要填写用户信息了

7.2 Prometheus BasicAuth 添加多用户

现实场景下,Prometheus的Baisc Auth信息须要配置多个供应给不同团队。

例如我之前添加的basic auth 只用一个鉴权用户: admin: test; 现在如果想添加新的鉴权用户: mike: hello

我们先用python3 工具天生hello 字段加密后的样子: $2b$12$qhdgpdq669cXNW4DLqRfI.JIBJ0KIvvf0I.I3ccie/tn8d4BxzqV2

此时只须要前往之前设置的webconfig 这个configmap中添加该信息即可:

kubectl edit cm webconfig -n monitoring

修正完成后,利用prometheus的热加载命令加载新配置:

curl -u "admin:test" -XPOST http://ip:9090/-/reload

多用户访问生效

关注#华为云开拓者同盟#点击下方,第一韶光理解华为云新鲜技能~

华为云博客_大数据博客_AI博客_云打算博客_开拓者中央-华为云

相关文章

串口协议,通信领域的基石与未来趋势

随着信息技术的飞速发展,通信技术已成为现代社会的基石。在众多通信协议中,串口协议因其简单、可靠、灵活的特点,在工业控制、嵌入式系统...

Web前端 2024-12-23 阅读0 评论0

中石油,中国能源巨头的崛起与未来展望

中国石油天然气集团公司(简称中石油)是我国最大的能源企业,自成立以来,始终秉承“奉献能源,创造和谐”的企业宗旨,为国家经济社会发展...

Web前端 2024-12-23 阅读0 评论0

中国黑客协议,网络安全法治化的里程碑

随着互联网技术的飞速发展,网络安全问题日益凸显。为了维护国家网络安全,保障公民个人信息安全,我国于2017年6月1日起正式实施《网...

Web前端 2024-12-23 阅读0 评论0

个人借款协议,金融安全的基石与规范之路

在现代社会,个人借款已经成为许多人解决短期资金需求的重要途径。而个人借款协议作为规范借款行为、保障各方权益的重要法律文件,其重要性...

Web前端 2024-12-23 阅读0 评论0