知乎:灵亦

引言

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

存在问题

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

性能问题

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

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

以 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 控制台本身很难自己排查客户登录不成功的根因。客户如果登录失败,一般会看到下面几种让人非常懵的结果:

全新架构!日志服务 SLS 自研免登录方案发布_重定向_02

或者:

全新架构!日志服务 SLS 自研免登录方案发布_分享功能_03

跨域问题

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 自研免登录方案发布_nginx_04

方案优势

速度快: 只需两步即可访问 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 实现,未来也会支持日志查询页面的免密分享。

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

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

全新架构!日志服务 SLS 自研免登录方案发布_阿里云_06

点这里可以体验免密分享的仪表盘: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*