华东檀梦工艺品有限责任公司

您的位置:首頁 >寬帶 > 正文

使用騰訊云SCF實現COS費用封頂的最佳實踐|熱門

來源:騰訊云 時間:2023-04-08 08:23:17

概述

騰訊云COS對象存儲,在使用的過程中,為了降低開發成本或單純的出于“便捷”的考慮,往往將存儲桶設置為公有讀狀態。但這也埋下了巨大的安全風險的種子,在各種流量盜刷場景下,會快速吸干賬戶余額,正可謂“公有一時爽,盜刷就破產”。

那么對于我們這些中小企業個人用戶,盜刷都有哪些具體危害呢?

惡意競爭:盜刷流量的行為可能是某些企業或個人惡意競爭的手段,通過消耗競爭對手的流量來獲取商業利益或個人利益。經濟損失:盜刷流量會導致網站運營商面臨經濟損失,因為他們需要支付更多的非業務流量費用,同時也會影響網站或應用的正常業務體驗等。法律維權:盜刷流量是一種違法行為,在盜刷導致損失后,需要收集相關證據,上報至網警備案,追根溯源進行打擊。無形成本:包括證據采集,日志分析,多方溝通產生的時間等額外無形成本。

那么有沒有一種折中方案,允許我們在使用匿名用戶訪問的情況下的安全使用呢?既在常態模式下方便用戶訪問,又能在極端情況下為我們及時止損。


【資料圖】

下面就介紹一下用過使用SCF來自動實現COS的權限修改的方式。

整體的邏輯為 創建SCF云函數-->定時拉取存bucket的準實時流量-->判斷流量是否超過閾值-->修改為私有讀方式

功能事件圖

實現方式

功能介紹與組件

方案中所用到的產品包括

1.云函數(Serverless Cloud Function,SCF)

云函數的主要作用和優勢

1)可以創建主動型觸發事件,可根據需要設定觸發周期。

2)已內置騰訊云 通用云openapi SDK以及COS SDK庫,無需外部引用。

3)同園區與COS內網互訪,不產生外網流量。

2.騰訊云可觀測平臺(Tencent Cloud Observability Platform,TCOP) AKA :(云監控)

云監控主要作用

1)多維度采集COS監控項,包括外網流量,請求次數,CDN回源流量,跨地域復制流量等等。更多指標詳見

https://cloud.tencent.com/document/product/248/45140

2)數據采集延時低,通過實際測試,一般10分鐘內可采集到分鐘級數據指標。

實現邏輯與步驟

云監控調用方法

# MetricName 參數 InternetTraffic 指的是外網下行流量         req = models.GetMonitorDataRequest()    params = {        "Namespace": "QCE/COS",        "MetricName": "InternetTraffic",        "Period": 60,        "StartTime": time_start.strftime("%Y-%m-%d %H:%M:%S"),        "EndTime": time_end.strftime("%Y-%m-%d %H:%M:%S"),        "Instances": [            {                "Dimensions": [                    {                        "Name": "bucket",                        "Value": bucket                    }                ]            }        ]    }    req.from_json_string(json.dumps(params))

返回數據

{  "Response": {    "DataPoints": [      {        "Dimensions": [          {            "Name": "bucket",            "Value": "wainsun-1253985742"          }        ],        "Timestamps": [          1680576000,          1680576060,          1680576120,          1680576180,          1680576240,          1680576300        ],        "Values": [          155189649,          169098752,          0,          0,          0,          0        ]      }    ],    "EndTime": "2023-04-04 10:45:00",    "MetricName": "InternetTraffic",    "Msg": "",    "Period": 60,    "RequestId": "57d5d310-0989-47db-8982-26b1903afe85",    "StartTime": "2023-04-04 10:40:00"  }}

返回結果中

Timestamps以及對應的Values是我們得到并用于判斷的數據信息。通過簡單的SUM就可以得到這個時間段的總流量,從而做出限制性操作。

實踐案例

介紹一個具體的實踐案例,展示如何使用以上方法來實現流量費用封頂。

1. 登錄騰訊云官網,進入到SCF控制臺--函數服務--選擇園區--點擊“新建”按鈕

2. 選擇模板創建--過濾 timer關鍵詞--找到定時撥測 標簽:python3.6的模板

3. 確認配置

1)修改自定義函數名稱,修改對應函數描述。

2)確認函數代碼執行環境為運行環境:Python3.6執行方法: index.main_handler

3)啟動日志,選擇默認配置

4)修改觸發器為自定義創建,觸發方式定時觸發,周期修改為每1分鐘

5)點擊完成

4. 創建函數并設置函數代碼

創建過程很快,十幾秒可創建成功。

進入到函數管理--函數代碼--復制文章下面附件中的函數代碼內容并粘貼進來

注意,這里需要按照自己的環境,修改4個必選變量

secret_id 和 secret_key

這個是賬號的API 秘鑰,建議使用子賬號秘鑰,子賬號需要授權COS存儲桶的putbucketacl權限。

region

這個是存儲桶所在地域,更多地域信息可參見 COS地域列表

bucket

這個是存儲桶的完整名稱,通常為bucket-appid的形式,這個可以在COS控制臺的桶列表中查看到。

其他可選變量

"MetricName":"InternetTraffic",

這里默認設置為公網下行流量,其他監控指標詳見

if_flow>100*1024*1024:#超過100MB流量閾值

這里默認設置100MB,主要用于測試,測試完成后根據業務所需要的限額流量自行設置。

5. 部署與測試

點擊測試,會自動執行 :部署+1次函數 觸發

執行正常可以看到測試成功,并返回執行日志。

6. 驗證有效性

設置對應存儲桶權限為公共讀權限,并驗證匿名訪問一個對象,正??梢苑祷?00 ok

找到一個大于我們設置閾值100MB的文件,再次下載。

注意:不要使用同地域的CVM或docker測試,同地域走內網,不會產生公網下行流量。

大約10分鐘后,可以看到云函數檢查到了公網下行流量超過閾值,并將存儲桶ACL改為私有。

控制臺檢查并再次匿名測試下載資源

均符合預期。

這樣就實現了盜刷場景發生后自動及時止損。這里為什么會延時10分鐘的,這個是因為存儲桶數據的采集,向云監控推送,統一計算等等均需要時間。所以根據實踐測試,將延時設置為10分鐘。

總結

上面通過這個實踐,我們將SCF,COS,云監控整合在一起,通過基礎數據采集,事件觸發,ACL修改等方式,實現了盜刷即停服的保護措施,同時又彌補了告警+人工處理的時效性低的問題。針對于費用敏感又必須使用匿名方式對外提供訪問的用戶,是一個比較適合的方案。

多說幾句。

上面的實踐是通過檢測外網下行流量并修改存儲桶的ACL的方式實現止損。

如果使用CDN(回源鑒權)+COS的方式,那么修改私有是沒有效果的,因為CDN的回源參數都會帶上簽名,這樣的場景就需要修改授權CDN的策略來實現止損,(需要將授權給CDN策略的allow改為deny),接口調用方式詳見。如果有朋友需要也可以在下面留言,我會再補充文檔。

再多說幾句。

如果對停服敏感,可以將代碼中這段注釋去掉。這樣就可實現盜刷流量峰值過去后即恢復服務。但可能有反復盜刷的情況。對于結果優劣各位親家自行評估。

index.rar

標簽:

相關閱讀