早在今年2月,我们将 Grafana企业日志(GEL)引入Grafana企业栈。GEL是一种新的方式,可供大型组织摄取和查询其全部日志量,而不需要与其他解决方案相关的成本或操作复杂性。(在此查看演示)。
我们刚刚发布了GEL 1.1,其主要功能之一是基于标签的访问控制(LBAC)。这是Grafana实验室为在我们所有的产品中提供细粒度的访问控制所做的更大努力的一部分,所以操作者可以获得许多不同的选项来执行许可。
想象一下,你有两个不同的团队在使用GEL,而你想区分谁可以访问什么。有了LBAC,就可以通过特定的标签要求来限制特定个人可以查询哪些日志。当你有不希望公司里的每个人都能访问的日志文件时,这很有帮助--例如,如果它们包含个人可识别信息(PII)。
熟悉的配置
LBAC是我们在Grafana Enterprise Metrics(GEM)中已经有的一个功能,GEL中的配置也类似。设置基于标签的访问策略只是设置访问策略的延伸,以授予用户对GEL集群中特定租户的读取权限。
GEL插件使设置变得简单,但也有一个API供喜欢这样做的客户使用。
关于如何使用LBAC的说明,请查看文档页面。
它是如何工作的
当用户用令牌登录时,该令牌的访问策略上的标签策略被检索出来。它们指定是否应包括具有特定标签集的日志行。标签策略然后被传递给系统的所有组件--无论它是以微服务模式和单二进制运行,还是以单二进制和查询前端运行--直到它们到达存储引擎。
在查询时,GEL会过滤掉不符合模式的日志行块,这样用户就只能看到他们被授权查看的日志行。
LBAC的一个很大的好处是,通过添加过滤功能,你要处理的数据比以前少。用户不需要查看每一个数据块。相反,你只需查看你有权限的那些,然后在Loki查询中做你需要的任何额外过滤。
处理更少的数据也意味着更快的查询结果和执行查询所需的硬件更少。
克服挑战
LBAC可能是一个简单的概念--它只返回与某一数额的标签相匹配的数值--但这一功能花了大约五个月的时间来开发。我们投入了这些时间,以便进行严格的测试,确保GEL用户可以完全相信,当他们想要查询返回标签等于某个值的日志时,这真的会发生。
我们遇到的最大挑战之一是确保标签匹配器正确地传递给GEL的每个组件。如果过滤器在查询路径中的任何一点被丢弃,你就有可能返回你想隐藏的日志行。
使用LBAC需要注意的一点是,你可以指定选择哪些标签的方式是非常灵活的,这也会使它稍微难以理解。例如,你可以编写复杂的逻辑表达式和正则表达式来捕捉你想包括和排除的特定日志集。这是在Loki查询的日志流选择器中都无法做到的。
要排除有特定标签的日志,你可以通过在创建访问策略时添加一个带有secret!="true" 的选择器,创建一个标签策略,排除所有带有标签的日志行secret=true:

你也可以使用多个选择器来创建一个策略,允许某人访问生产和开发环境,并排除生产环境中带有标签secret=true 的日志:

最后的想法
Grafana实验室已经在我们的计费集群中使用这种复杂的过滤方式。你可以想象,账单信息是很敏感的,所以我们使用了多个日志选择器,以确保当我们向客户1显示他们的账单信息,但不让他们看到属于客户2的信息时,我们能得到正确的数据集。