知乎:靈亦
引言
很多使用者在使用日誌服務 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*
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*