AWS S3 Bucket 設定 Logging & Lifecycle

當建立完成 S3 Bucket 默認情況下日誌記錄是處於禁用狀態,必須再進行設定啟用日誌記錄來增強安全性,通過日誌記錄我們可以有助於安全審核找出可疑活動,並且可以從用戶訪問對象的位置以及訪問最多的對象了解更多信息。

了解與啟用日誌記錄

有兩種方法可以記錄對 S3 存儲資源的訪問資訊:

伺服器存取記錄

類似於 HTTP Server 日誌記錄,它包含有關請求者、資源響應以及有關請求者的其他詳細信息。

設定啟用存取記錄

  • 開啟 AWS S3 管理介面
  • 點擊 Bucket 名稱並選擇屬性
  • 在伺服器存取記錄部分選擇編輯
  • 在編輯界面中選擇啟用並選擇儲存的目標位置

日誌格式

存取記錄文件命名方式以以下格式寫入目標儲存貯體:

s3://bucket/prefix/YYYY-mm-DD-HH-MM-SS-UniqueString

內容使用以下以空格分隔的格式寫入,它看起來像這樣:

79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be awsexamplebucket1 [06/Feb/2019:00:00:38 +0000] 192.0.2.3 79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be 3E57427F3EXAMPLE REST.GET.VERSIONING - "GET /awsexamplebucket1?versioning HTTP/1.1" 200 - 113 - 7 - "-" "S3Console/0.4" - s9lzHYrFp76ZVxRcpX9+5cjAnEH2ROuNkd2BHfIa6UkFVdtjf5mKR3/eTPFvsiP/XV/VLi31234= SigV2 ECDHE-RSA-AES128-GCM-SHA256 AuthHeader awsexamplebucket1.s3.us-west-1.amazonaws.com TLSV1.1

內容包含 HTTP / REST 的操作(例如 GET、PUT、POST、OPTIONS.. ),每個紀錄有 24 個字串段,您可以 在此處 閱讀有關更多詳細的數據字段。

AWS CloudTrail 資料事件

AWS CloudTrail 是一項可以審查您的 AWS 內所有活動的服務。Object-level logging 與 AWS CloudTrail 集成可以在 CloudTrail 中查看和分析日誌,這些日誌事件以 JSON 格式保存在 CloudTrail 中,進入 CloudTrail 後詳細事件將存儲在 S3 Bucket 中,並可輕鬆與其他服務集成,例如 CloudWatch(監控/警報)、SNS(通知)、SQS(用於其他處理的隊列)和 lambda 函數(無服務器處理)。

設定啟用存取記錄

  • 開啟 AWS CloudTrail 管理介面
  • 點擊 Create trail 進入 Step 1
  • 選擇 Use existing S3 bucket 以及設定依需求要開啟的服務,進入 Step 2
  • Events 的步驟只點選開啟 Data events 收集 S3的數據

日誌格式

所有的活動紀錄都會紀錄在 CloudTrail Event history 裡面記載了有關操作的完整詳細信息,另外這些訪問紀錄也會以 JSON 數據結構保留在 S3 bucket。

了解兩者紀錄資料之間的差異

伺服器存取記錄

類似於 Web 服務器訪問日誌,以簡單的格式記錄信息,並存儲在 S3 bucket 中,它不包括訪問操作的對象完整的詳細資料,在事件發生時比較難有詳細的指標進行問題追蹤。

但在使用 3rd-party 日誌搜尋工具或者開發自己的解析/通知系統,伺服器存取記錄相關的信息如對象/請求的大小和響應時間,這對容量和性能規劃以及熱門文件... 分析就已經很有用。

在成本上此功能是免費提供的,唯一的成本是日誌的存儲成本。

AWS CloudTrail 資料事件

可靠的 API 調用日誌記錄,例如操作中的 ACL 定義... 等提供了數據的完整度,在安全性和 IT 操作都有較多的詳細資訊可以追蹤。

在與 AWS 其他服務 CloudWatch, SNS , SQS 也可以很輕鬆地進行串接,來達到全面的監控策略保護 S3 bucket 。

自動刪除舊文件

在完成啟用存取記錄後我們收集了大量的數據在一段時間後就不是那麼必要,佔用的空間越來越大在成本上會耗費很多,所以必須定期刪除不必要的數據,在 AWS 平台上我們可以應用生命週期規則,從 S3 bucket 中自動刪除數據。

設定生命週期規則

  • 開啟 AWS S3 管理介面
  • 點擊 Bucket 名稱並選擇管理在點擊建立生命週期規則
  • 替生命週期規則設定一項名稱

  • 設定篩選條件前綴,這個目錄及子目錄下的所有檔案都會被涵括在內

  • 最後設定執行的規則希望文件在 30 天後被刪除,選擇"讓目前版本的物件過期"並輸入天數

在 S3 Bucket上我們使用的是未啟用版本控制針對生命週期所有的物件都是目前的版本,可以透過上述的規則進行檔案在30天後將被標將被標記成過期物件,而被標記過期的物件我們需要再重複剛剛的動作另外建立一組新的規則在標記1天後永久刪除。

當每組文件需要有不同的保留時間,規則也可以設定很多組來自動執行,這樣就可以幫助避免不必要的費用自動刪除舊日誌。

結論

雲服務本身並不能完全的提供安全保護,隨著攻擊者不斷發現配置中的漏洞,當管理者本身也必須實時監控日誌當存在影響網站的基礎服務或安全相關問題時,我們就可以輕鬆識別這些變化的紀錄並深入解決問題,確保開發出來的應用程式具有更高的穩定性和可用性。