當前位置:
首頁 > 最新 > 構建基於WAF的S3安全體系

構建基於WAF的S3安全體系

1

需求描述

有線上項目需要對RGW的bucket的訪問進行白名單控制,只允許白名單內的IP去訪問指定的bucket,簡單寫了個demo,基本思路是通過openresty寫一個WAF模塊,去實現設置bucket、IP白名單設置。

2

基本原理

OpenResty 處理一個請求,它的處理流程請參考下圖(從 Request start 開始):

幾個關鍵階段的簡介如下

set_by_lua*:流程分支處理判斷變數初始化

rewrite_by_lua*:轉發、重定向、緩存等功能(例如特定請求代理到外網)

access_by_lua*:IP 准入、介面許可權等情況集中處理(例如配合 iptable 完成簡單防火牆)

content_by_lua*:內容生成

header_filter_by_lua*:響應頭部過濾處理(例如添加頭部信息)

body_filter_by_lua*:響應體過濾處理(例如完成應答內容統一成大寫)

log_by_lua*:會話完成後本地非同步完成日誌記錄(日誌可以記錄在本地,還可以同步到其他機器)

openresty詳細介紹可以參考:https://moonbingbing.gitbooks.io/openresty-best-practices/ngx_lua/phase.html

本文的原理非常簡單:通過設置bucket和IP的白名單,在access_by_lua階段對request裡面的host和uri等欄位進行規則匹配再決定是否放行。

3

nginx配置

配置文件路徑 /etc/nginx/conf.d/default.conf

4

WAF腳本

腳本路徑 /etc/nginx/conf.d/access.lua

5

功能驗證

在一個IP白名單以外的機器訪問

對應的nginx日誌

6

後話

通過上面的例子可以看到openresty在和RGW整合方面非常強大,可以滲透到整個S3的request處理過程,大家可以根據上面的例子去舉一反三,實現對各種S3 RESTful介面的控制,擺脫對ceph版本的依賴,實現真正的松耦合以及標準自定義。最後,因為個人身體原因,可能本公眾號會暫停更新一段時間,多謝各位一直以來的支持。

歡迎訂閱Ceph圈內乾貨最多的對象存儲公眾號,老司機教你手把手擼對象存儲。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Ceph對象存儲方案 的精彩文章:

TAG:Ceph對象存儲方案 |