知乎:靈亦
引言
很多用戶在使用日誌服務 SLS 時,採用 STS 這種免登的方式,能夠快速將日誌服務的頁面集成到三方的系統中。STS 模式是非常經典且成熟的免登方案,它的優點非常多,例如:能夠充分利用阿里雲賬號 RAM 體系、能夠通用地集成支持 STS 模式的所有云產品、支持客戶自定義訪問權限等。
存在問題
隨着時間的推移,STS 模式在多個方面已經不滿足日誌服務客戶的需求:
性能問題
STS 模式加載速度慢,下面是 STS 模式的流程圖,客戶通常需要三次順序的交互才能夠訪問到頁面,如果考慮客戶外部系統的交互和 iframe 內的重定向,這個流程會更長。
以 SLS 控制檯查詢頁面爲例,用戶登錄阿里雲官網後直接打開 SLS 頁面,通常只需要 2s 即可查看到日誌。如果使用 STS 模式,這個時間會拉長到 6s 以上:
-
客戶打開自建 web(1 ~ 2s)
-
客戶自建 web 發起獲取免登鏈接請求(向客戶的服務端)(1s)
-
客戶服務端訪問令牌服務(500 ms)
-
客戶服務端獲取登錄 token、拼接 url 返回給客戶 web(500ms)
-
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*
[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*