Grafana Loki笔记03: 安全认证
2023-05-25
Loki没有包含任何内置的身份验证层。运维人员需要在您的服务前面运行一个认证反向代理,例如使用基本身份验证的NGINX或OAuth2代理。
请注意,在使用多租户模式的Loki时,Loki要求将HTTP头X-Scope-OrgID
设置为标识租户的字符串;负责填充该值的责任应由认证反向代理处理。有关更多信息,请阅读有关多租户的文档。
有关对Promtail进行身份验证的信息,请参阅配置Promtail的文档
Loki官方的Helm Chart对于在loki-gateway上设置认证以及租户头X-Scope-OrgID
提供了支持。具体配置如下。
在安装Chart所使用的value.yaml中做如下配置:
1loki:
2# ...
3 tenants:
4 - name: org1
5 password: org1pass
6
7# ...
8
9gateway:
10 basicAuth:
11 enabled: true
tenants
用于给loki配置租户和密码。gateway.basicAuth.enabled=true
表示为loki-gateway开启基本身份认证,将使用租户的用户名和密码。
将上面的配置更新到loki chart安装的release中后,此时通过loki-gateway调用API会报401未授权的错:
1curl https://loki.example.com/loki/api/v1/status/buildinfo
2<html>
3<head><title>401 Authorization Required</title></head>
4<body>
5<center><h1>401 Authorization Required</h1></center>
6<hr><center>nginx/1.19.10</center>
7</body>
8</html>
调用API时给定租户的用户名和密码,可以通过认证返回结果:
1curl -u org1:org1pass https://loki.example.com/loki/api/v1/status/buildinfo
2{"version":"2.8.2","revision":"9f809eda7","branch":"HEAD","buildUser":"root@e401cfcb874f","buildDate":"2023-05-03T11:07:54Z","goVersion":""}
此时通过API查询数据时,只需给定基本认证的用户名和密码,不再需要在传递X-Scope-OrgID
请求头,该请求头的填充将由loki-gateway使用基本认证的用户名自动填充。
例如,使用curl命令调用API /loki/api/v1/labes
不需要在传-H "X-Scope-OrgID: org1"
:
1curl -u org1:org1pass https://loki.example.com/loki/api/v1/labels
2{"status":"success","data":["filename","job"]}
前面第2节Promtail的简单例子中,Promtail的配置文件也要做出修改,配置基本认证使用租户的用户名和密码。
1# Disable the HTTP and GRPC server.
2server:
3 disable: true
4
5positions:
6 filename: /tmp/positions.yaml
7
8clients:
9 - url: https://loki.example.com/loki/api/v1/push
10 basic_auth:
11 username: org1
12 password: org1pass
13
14scrape_configs:
15 - job_name: system
16 static_configs:
17 - targets:
18 - localhost
19 labels:
20 job: varlogs
21 __path__: /var/log/*log
在grafana中配置loki数据源时,如果地址中配置的是loki-gateway,则也需要配置基本认证的用户名和密码。