首页 > 其他分享 >全新架构!日志服务 SLS 自研免登录方案发布

全新架构!日志服务 SLS 自研免登录方案发布

时间:2024-03-18 15:36:34浏览次数:13  
标签:免密 SLS 自研免 客户 STS 日志 免登

知乎:灵亦

引言

很多用户在使用日志服务 SLS 时,采用 STS 这种免登的方式,能够快速将日志服务的页面集成到三方的系统中。STS 模式是非常经典且成熟的免登方案,它的优点非常多,例如:能够充分利用阿里云账号 RAM 体系、能够通用地集成支持 STS 模式的所有云产品、支持客户自定义访问权限等。

存在问题

随着时间的推移,STS 模式在多个方面已经不满足日志服务客户的需求:

性能问题

STS 模式加载速度慢,下面是 STS 模式的流程图,客户通常需要三次顺序的交互才能够访问到页面,如果考虑客户外部系统的交互和 iframe 内的重定向,这个流程会更长。

以 SLS 控制台查询页面为例,用户登录阿里云官网后直接打开 SLS 页面,通常只需要 2s 即可查看到日志。如果使用 STS 模式,这个时间会拉长到 6s 以上:

  1. 客户打开自建 web(1 ~ 2s)

  2. 客户自建 web 发起获取免登链接请求(向客户的服务端)(1s)

  3. 客户服务端访问令牌服务(500 ms)

  4. 客户服务端获取登录 token、拼接 url 返回给客户 web(500ms)

  5. iframe 访问 url(包含多次重定向)(3s)

会话时间限制

STS 模式创建的链接有会话时间限制,默认是 1 小时,最长能延长到 24 小时,且没有任何办法能够再次延长会话的时间。客户使用过程中经常发现打开的浏览器 tab 页,隔天就无法使用了,此时是无法通过新打开一个页面登录再次恢复的(直接使用公有云日志服务是支持新打开页面登录后恢复旧的页面的登录状态)。客户自建的内网 web 网站一般都会有较长时间的会话时间,STS 模式会话时间的限制和客户自建 web 有严重的冲突。

会话时间限制这个问题几乎所有使用内嵌的客户都会来问这个问题,属于痛点中的痛点。

错误排查困难

上面介绍过 STS 模式登录的流程非常长,登录过程涉及到阿里云多个模块(STS、RAM、登录、SLS),所以在登录的流程中一旦出现问题很难排查。而且由于登录逻辑中包含多次重定向的操作,SLS 控制台本身很难自己排查客户登录不成功的根因。客户如果登录失败,一般会看到下面几种让人非常懵的结果:

或者:

跨域问题

STS 模式一般是在客户自建的 web 中使用 iframe 内嵌 SLS 的页面,这种跨域的方式严重依赖浏览器的 cookie。而随着各大浏览器厂商安全策略的增强,跨域 cookie 已经受到非常大的限制。例如:

a. Safari 很早就已经限制了第三方的 cookie,这个导致如果客户不主动关闭这个限制,Safari 默认是无法打开 STS 模式内嵌的页面。

b. Chrome 从 2024 年 1 月也开始逐步限制第三方的 cookie,到 2024 年第三季度某日后 Chrome 也将默认打开第三方的 cookie 的限制。

全新免登方案

全新架构

为了解决上面的所有问题,SLS 自研了一套全新的基于 Ticket 的免登方案,支持客户能够使用 Ticket 方案将 SLS 控制台免登分享给他人或免登嵌入到第三方系统,同时可控制嵌入至第三方系统的日志服务权限。

该 Ticket 方案登录过程只需要两步,第一是调用 SDK 获取免登链接,第二是使用链接直接访问 SLS,在此过程中没有任何浏览器重定向操作。

方案优势

速度快: 只需两步即可访问 SLS 控制台,没有任何浏览器重定向操作,平均访问时间在 2s 以内。

会话时间限制: 支持客户调用 SLS 的接口延长会话时间,彻底解决会话时间限制问题。

安全性: 支持使用 RAM 账户调用创建免登链接接口,支持使用 RAM Policy 控制该免登链接的权限。

错误排查: 客户在实施该方案的过程中,只需调用 SLS  接口(没有第三方系统介入),SLS 会返回详细的错误原因,方便用户排查。

跨域问题: 该方案没有基于浏览器 cookie 实现,不存在跨域问题。

接入文档

有需要接入的可以参考此文档,该方案已经全网发布:

https://help.aliyun.com/zh/sls/developer-reference/console-embedding-and-sharing-new-version-2

仪表盘免密分享

在给客户支持的过程中,我们发现让客户自建系统集成免登方案(无论步骤多简单)是非常复杂的,只有一定规模的用户才会使用免登方案。但是在很多场景下,客户也是需要免登、分享等功能的。例如客户想要临时分享日志查询给其他同学 debug 问题;客户想要将日志服务仪表盘放在电视大屏上播放;客户想要将仪表盘嵌入到文档中等等场景。

因此除了全新的免登方案外,我们基于 Ticket 机制提供了仪表盘的免密分享功能,支持在控制台创建免登链接,无需调用 SDK 实现,未来也会支持日志查询页面的免密分享。

仪表盘免密分享的操作步骤非常简单,仅需一步(仪表盘页面右上角点击分享按钮):

点这里可以体验免密分享的仪表盘:Nginx 访问日志 demo [ 1]

方案优势

方便实用: 免密分享使得用户可以直接通过一个链接访问仪表盘,无需处理复杂的登录问题、权限校验问题,能够满足多个场景的客户使用需求(大屏、诊断、共享等),特别是在一些特殊的只需要一次性登录的场景。

简化流程: 使用免密分享功能只需要在控制台点击操作,无需使用 SDK,免去了复杂的开发流程。

安全性: 一方面使用仪表盘免密分享功能有严格的权限校验,支持配置 Ram Policy 控制子账号是否可以创建、查看免密分享。另一方面创建免密分享支持多种权限控制机制,例如时间范围限制、访问时间限制、阿里云账号限制、过滤条件限制等。

接入文档

有需要尝试的可以参考此文档操作,该方案已经全网发布:

https://help.aliyun.com/zh/sls/user-guide/dashboard-secret-free-sharing

总结

日志服务(SLS)开发了一套全新的基于 Ticket 的登录方案,包括免登方案、仪表盘免密分享方案,旨在解决用户在共享和集成日志服务时面临的挑战。这个方案较 STS 模式在便捷性、安全性、性能等多个方面有较大的优势,欢迎大家使用。

参考文档:

[1] Nginx 访问日志 demo*

https://sls.console.aliyun.com/lognext/share/project/nginx-demo-log/dashboard/nginx-access-log_nginx_dashboard_cn?sls_ticket=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0eXBlIjoic2hhcmUtZGFzaGJvYXJkIiwiZXhwIjo0MTAyNDE1OTk5LCJub25jZSI6MTcwOTE4OTM0NDM3MywiaWF0IjoxNzA5MTg5MzQ0LCJ0aWNrZXRJZCI6ImUwZjdmYWVjLWU5YjEtNDhhYy05NGQwLTg4NGZlM2IxZDQzZCJ9.P1cN65LRTXabTMiQlQsLD4wwFNMBMfpWTdv5fEUuoWY&hideTopbar=true*

[2] 免登接入文档

https://help.aliyun.com/zh/sls/developer-reference/console-embedding-and-sharing-new-version-2

[3] 仪表盘免密分享使用文档

https://help.aliyun.com/zh/sls/user-guide/dashboard-secret-free-sharing

[4] 仪表盘免密分享使用 demo*

https://sls.console.aliyun.com/lognext/share/project/nginx-demo-log/dashboard/nginx-access-log_nginx_dashboard_cn?hideTopbar=true&sls_ticket=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0eXBlIjoic2hhcmUtZGFzaGJvYXJkIiwiZXhwIjo0MTAyNDE1OTk5LCJub25jZSI6MTcwOTE4OTM0NDM3MywiaWF0IjoxNzA5MTg5MzQ0LCJ0aWNrZXRJZCI6ImUwZjdmYWVjLWU5YjEtNDhhYy05NGQwLTg4NGZlM2IxZDQzZCJ9.P1cN65LRTXabTMiQlQsLD4wwFNMBMfpWTdv5fEUuoWY*

标签:免密,SLS,自研免,客户,STS,日志,免登
From: https://www.cnblogs.com/alisystemsoftware/p/18080497

相关文章

  • EAS_记录单据上机操作日志
    @Override protectedvoid_delete(Contextctx,IObjectPKpk)throwsBOSException,EASBizException{ CollectionRlptInfoinfo=this.getCollectionRlptInfo(ctx,pk);IObjectPKlogpk=LogUtil.beginLog(ctx,"_delete",newCollectionRlptInfo()......
  • 捉虫日记 | MySQL 8.0从库某些情况下记录重放的CREATE TABLE、DROP TABLE语句到慢日志
    作者:卢文双资深数据库内核研发本文首发于2023-11-3020:47:35https://dbkernel.com问题描述当主从复制采用binlog的行模式时,如果从库启用slow_query_log、log_slow_replica_statements且从库重放CREATETABLE、DROPTABLE时因特殊情况(比如被从库其他SQL占用MDL......
  • 使用 LogProperties source generator 丰富日志
    Nuget包 Microsoft.Extensions.Telemetry.Abstractions包含的新的日志记录sourcegenerator,它支持使用[LogProperties]将整个对象作为State与日志一起记录。我将展示一种方法来控制如何使用[LogProperties]对象自动丰富日志。示例您可以使用日志sourcegenerator创建一个如下......
  • 【洛谷 P8661】[蓝桥杯 2018 省 B] 日志统计 题解(滑动窗口+优先队列+双端队列+集合)
    [蓝桥杯2018省B]日志统计题目描述小明维护着一个程序员论坛。现在他收集了一份“点赞”日志,日志共有NNN行。其中每一行的格式是tsid,表示在......
  • 使用valgrind检查程序内存问题,并重定向到日志文件
    使用valgrind检查内存--tool=memcheck将日志输出到t13_memcheck.log2>&1是一个特殊的重定向,它会把标准错误(stderr,通常是错误消息)重定向到标准输出的当前位置,即t13_memcheck.log文件。valgrind--tool=memcheck./bin/thread_13>t13_memcheck.log2>&1使用valgri......
  • 工作总结!日志打印的11条建议
    前言大家好,我是JavaPub。日志是我们定位问题的得力助手,也是我们团队间协作沟通(甩锅)、明确责任归属(撕B)的利器。没有日志的程序运行起来就如同脱缰的野......
  • MongoDB 的日志配置
    配置日志相关的参数默认的配置文件是/etc/mongod.conf,可以在该文件中配置与日志相关的信息。比如:more/etc/mongod.conf#wheretowriteloggingdata.#EnableloggingtoafilesystemLog:quiet:falsedestination:filelogAppend:truepath:/data/log/mon......
  • Android混淆后的bug日志通过mapping文件找对应行号
    背景由于项目中提测以及线上的apk都是经过混淆处理的,因此拿到日志后也无法正常查看崩溃日志的行号这个原因是因为混淆了文件,输出的日志是对应不上源文件的,为了正确找到行号需要用到mapping.txt文件配置开启保留行号和源文件要想利用mapping文件找到对应的行号,则还需要在混淆......
  • 超轻量级的c#版基于文件的日志记录工具,可定制输出格式,可指定日志文件
    这是我自己个人编写的日志记录,主要使用在只需要记录日志,偶尔到文件中查看一下日志记录的情况。我自己写的一些服务之类的是使用了这个的,代码很少,使用很简单。第一步搜索和安装我的Nuget包搜索和安装zmjtool这个包,我写的,如下图:第二步引入namespace和创建logger对象1/**引......
  • ELK日志处理部署笔记-2
    logstash概述什么是logstash-是一个数据采集、加工处理以及传输的工具特点-所有类型的数据集中处理-不同模式和格式数据的正常化-自定义日志格式的迅速扩展-为自定义数据源轻松添加插件为什么使用logstash将日志转化为json使elasticasearch可读下载#logstash的配置文件......