你有沒(méi)有發(fā)現(xiàn),自己花大價(jià)錢(qián)部署的「真實(shí)用戶監(jiān)控」系統(tǒng),其實(shí)一直在漏報(bào)數(shù)據(jù)?
一位AWS工程師最近就踩了這個(gè)坑:打開(kāi)CloudWatch RUM(真實(shí)用戶監(jiān)控)面板,頁(yè)面瀏覽量低得可疑。查了半天,罪魁禍?zhǔn)拙故莡Block Origin——這款裝機(jī)量極高的廣告攔截器,把亞馬遜的監(jiān)控域名dataplane.rum.eu-west-1.amazonaws.com當(dāng)成了追蹤腳本,一鍵屏蔽。
![]()
這不是個(gè)例。隨著隱私工具普及,越來(lái)越多「正當(dāng)」的運(yùn)維監(jiān)控流量被誤傷。本文拆解一套經(jīng)過(guò)驗(yàn)證的繞過(guò)方案:用你自己的域名做代理,讓監(jiān)控?cái)?shù)據(jù)偽裝成正常業(yè)務(wù)請(qǐng)求。
![]()
為什么廣告攔截器會(huì)盯上監(jiān)控?cái)?shù)據(jù)?
CloudWatch RUM是AWS提供的真實(shí)用戶監(jiān)控服務(wù),能采集頁(yè)面加載時(shí)間、JavaScript錯(cuò)誤、HTTP失敗、Web Vitals等核心指標(biāo)。對(duì)需要理解真實(shí)用戶體驗(yàn)的團(tuán)隊(duì)來(lái)說(shuō),這是基礎(chǔ)設(shè)施級(jí)別的工具。
但它的傳輸機(jī)制有個(gè)致命設(shè)計(jì):SDK默認(rèn)把數(shù)據(jù)發(fā)往dataplane.rum.*.amazonaws.com這類(lèi)第三方域名。在廣告攔截器眼里,這就是典型的跨站追蹤行為——域名歸屬AWS而非網(wǎng)站本身,請(qǐng)求體包含用戶行為數(shù)據(jù),完全符合攔截規(guī)則的特征集。
uBlock Origin、AdGuard、Privacy Badger等工具的規(guī)則庫(kù)中,*.amazonaws.com子域名常被批量標(biāo)記。用戶以為自己屏蔽的是廣告追蹤,實(shí)際上你的性能監(jiān)控?cái)?shù)據(jù)也一并消失了。
更麻煩的是,這類(lèi)攔截發(fā)生在瀏覽器層面,服務(wù)端完全無(wú)感知。你不會(huì)收到錯(cuò)誤日志,不會(huì)觸發(fā)告警,只是面板上的數(shù)字莫名其妙地「優(yōu)化」了——樣本偏差讓數(shù)據(jù)失去統(tǒng)計(jì)意義。
核心思路:把第三方請(qǐng)求變成第一方請(qǐng)求
解決方案的底層邏輯很簡(jiǎn)單:既然攔截器針對(duì)的是「第三方域名」,那就讓監(jiān)控流量走你自己的域名。
具體架構(gòu)需要兩個(gè)改動(dòng):
第一,在CloudFront(或你用的CDN)新增一個(gè)行為路徑/rum/*,將所有匹配請(qǐng)求代理到RUM的數(shù)據(jù)平面端點(diǎn)。對(duì)外來(lái)看,用戶訪問(wèn)的是https://yourdomain.com/rum/...,這是徹頭徹尾的第一方請(qǐng)求。
第二,客戶端初始化aws-rum-web SDK時(shí),把endpoint參數(shù)從默認(rèn)的AWS域名改為你的自定義路徑。SDK后續(xù)所有上報(bào)流量都會(huì)走這個(gè)通道。
這套方案不依賴特定部署工具。原文作者用AWS CDK演示,但CloudFormation、Terraform、控制臺(tái)手動(dòng)配置都能實(shí)現(xiàn)相同效果。關(guān)鍵是理解流量轉(zhuǎn)發(fā)的邏輯,而非具體語(yǔ)法。
分步實(shí)現(xiàn):從身份授權(quán)到流量代理
第一步,創(chuàng)建RUM應(yīng)用監(jiān)控器和Cognito身份池。
RUM的授權(quán)機(jī)制依賴Amazon Cognito的身份池(Identity Pool),允許未登錄用戶(unauthenticated access)臨時(shí)獲取憑證,向AWS發(fā)送監(jiān)控?cái)?shù)據(jù)。這是整個(gè)流程的前置條件。
代碼層面需要串聯(lián)四個(gè)資源:
? Cognito身份池,開(kāi)啟未認(rèn)證訪問(wèn)開(kāi)關(guān)
? IAM角色,信任關(guān)系綁定Cognito身份提供商
? 身份池與角色的關(guān)聯(lián)配置
? RUM應(yīng)用監(jiān)控器本身,指定域名、采樣率、采集的遙測(cè)類(lèi)型
IAM角色的權(quán)限策略只需一個(gè)動(dòng)作:rum:PutRumEvents,資源范圍限定到當(dāng)前應(yīng)用監(jiān)控器。遵循最小權(quán)限原則,避免過(guò)度授權(quán)。
第二步,配置CloudFront代理行為。
![]()
在CloudFront分配中新增緩存行為,路徑模式設(shè)為/rum/*,源站指向RUM數(shù)據(jù)平面的地域端點(diǎn)(如dataplane.rum.eu-west-1.amazonaws.com)。
關(guān)鍵配置點(diǎn):必須啟用HTTPS,源協(xié)議策略設(shè)為「僅HTTPS」;緩存策略選擇「不緩存」或極短TTL,因?yàn)楸O(jiān)控?cái)?shù)據(jù)需要實(shí)時(shí)送達(dá);允許所有HTTP方法(POST為主),轉(zhuǎn)發(fā)所有查詢字符串和請(qǐng)求體。
這一步的陷阱在于地域匹配。RUM數(shù)據(jù)平面端點(diǎn)是地域化的,你的CloudFront源站配置必須與RUM應(yīng)用監(jiān)控器創(chuàng)建時(shí)選擇的地域一致,否則簽名驗(yàn)證會(huì)失敗。
第三步,客戶端SDK重定向。
aws-rum-web SDK初始化時(shí),通過(guò)endpoint參數(shù)覆蓋默認(rèn)配置:
const config = { endpoint: 'https://yourdomain.com/rum/', // 其他配置項(xiàng):identityPoolId, guestRoleArn等};SDK會(huì)自動(dòng)處理路徑拼接,你只需提供根路徑。后續(xù)所有PutRumEvents請(qǐng)求都會(huì)發(fā)往你的域名,經(jīng)CloudFront透明代理至AWS。
驗(yàn)證與兜底:確保方案生效
部署完成后,驗(yàn)證分兩個(gè)維度。
功能驗(yàn)證:打開(kāi)瀏覽器DevTools的Network面板,確認(rèn)RUM請(qǐng)求的目標(biāo)URL已變?yōu)槟愕挠蛎瑺顟B(tài)碼200,響應(yīng)體包含AWS的確認(rèn)信息。同時(shí)檢查CloudWatch RUM控制臺(tái),確認(rèn)數(shù)據(jù)正常入庫(kù)。
攔截測(cè)試:開(kāi)啟uBlock Origin或同類(lèi)工具,刷新頁(yè)面,觀察Network面板。正確的表現(xiàn)是:你的域名請(qǐng)求未被攔截,RUM數(shù)據(jù)持續(xù)上報(bào);直接訪問(wèn)原始AWS端點(diǎn)的請(qǐng)求(如有)被攔截——但這部分流量已不被SDK使用。
成本考量:CloudFront會(huì)產(chǎn)生額外的請(qǐng)求費(fèi)用和數(shù)據(jù)傳輸費(fèi)用,但監(jiān)控?cái)?shù)據(jù)包體極小(通常單次<10KB),對(duì)大多數(shù)業(yè)務(wù)可忽略不計(jì)。相比數(shù)據(jù)缺失導(dǎo)致的決策盲區(qū),這點(diǎn)成本值得投入。
這套方案還能用在哪?
代理繞過(guò)的思路不限于CloudWatch RUM。任何依賴第三方域名、可能被隱私工具攔截的監(jiān)控或分析服務(wù),都可以套用相同模式:
? 應(yīng)用性能監(jiān)控(APM)的瀏覽器探針
? 錯(cuò)誤追蹤服務(wù)(如Sentry的默認(rèn)CDN加載)
? 產(chǎn)品分析工具(Mixpanel、Amplitude等)
? 熱力圖和會(huì)話錄制服務(wù)
核心判斷標(biāo)準(zhǔn):該服務(wù)是否必須采集數(shù)據(jù)才能發(fā)揮價(jià)值?如果是,且其默認(rèn)域名在攔截器黑名單中,就值得考慮第一方代理。
當(dāng)然,這不是鼓勵(lì)對(duì)抗用戶隱私選擇。更好的長(zhǎng)期實(shí)踐是:在隱私政策中明確披露監(jiān)控范圍,提供 opt-out 機(jī)制,同時(shí)通過(guò)技術(shù)手段確保需要數(shù)據(jù)的團(tuán)隊(duì)能拿到干凈樣本。技術(shù)中立,用法取決于產(chǎn)品倫理。
如果你正在用CloudWatch RUM但還沒(méi)檢查過(guò)數(shù)據(jù)完整性,建議現(xiàn)在打開(kāi)DevTools確認(rèn)一下。廣告攔截器的裝機(jī)率比你想象的更高,而沉默的數(shù)據(jù)丟失,比明顯的故障更危險(xiǎn)。
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.