如何從我的 CloudFront 日誌中移除敏感資料?

2 分的閱讀內容
0

依照預設,Amazon CloudFront 標準日誌會擷取其中部分欄位的敏感資料。出於隱私考量,我想刪除日誌的這部分資料。

簡短說明

**注意:**本文將使用「用戶端-IP (c-ip)」欄位作為範例。

依預設,CloudFront 日誌會擷取 c-ip 當成其中一個欄位。有三種方法可以從日誌中刪除 c-ip

  • 觸發 AWS Lambda 函數,以便在傳送至 Amazon Simple Storage Service (Amazon S3) 的日誌上將欄位移除。
  • 設置以特定間隔時間執行的 Amazon Elastic Compute Cloud (Amazon EC2) 程序以移除欄位。
  • 使用 CloudFront 即時日誌,並在將日誌資料傳送到 Amazon S3 之前先移除敏感欄位。

解決方案

觸發 Lambda 函數

移除 c-ip 欄位的第一種方法是使用 Amazon S3 通知事件。當 CloudFront 將日誌檔傳送至 Amazon S3 儲存貯體時,請將儲存貯體設定為觸發 Lambda 函數。

建立 Lambda 函數

1.    開啟 AWS Lambda 主控台

2.    在函數下,按照下列組態建立新的 Lambda 函數:

  • 使用來自 Amazon S3 事件的物件名稱。
  • 從 S3 儲存貯體取得該物件。

3.    移除 c-ip 欄,或是以匿名資料取代該值。

**附註:**如果日誌會由其他應用程式進一步處理,請取代這些值以保持相同的格式。

4.    儲存日誌並將其上傳回 Amazon S3。

建立新事件

1.    在日誌檔目標儲存貯體中,移至屬性

2.    在事件通知下,建立新事件。

3.    選取 Put 事件類型,以及目的地 Lambda 函數

4.    選取在步驟 1 中建立的 Lambda 函數,然後選擇儲存

重要:若要避免 Lambda 函數產生遞迴叫用 (無限迴圈),請執行下列動作:

  • 將您的 CloudFront 日誌傳遞到初始模擬前置詞。例如,「original (原始)」。
  • 使 Amazon S3 事件只在該前置詞上觸發。
  • 讓 Lambda 函數將日誌傳遞到不同的前置詞中。例如,「processed (已處理)」。

如果您將日誌傳送到相同的前置詞,Lambda 函數會再次觸發並建立遞迴叫用。如需詳細資訊,請參閱避免使用 Amazon S3 和 AWS Lambda 進行遞迴叫用

**注意:**若要保持 Amazon S3 的低成本,請設定 Amazon S3 生命週期政策,以使原始日誌在特定時間段後過期。

設置 Amazon EC2 程序

使用 Amazon EventBridge 建立排程規則 (cron) 以啟動 EC2 執行個體,並透過排程週期處理日誌檔。例如,每天一次。完成此程序後,將停止 EC2 執行個體直到下一次重複執行,以節省成本。

1.    將 EventBridge 和 Lambda 設定為在指定時間啟動 EC2 執行個體。如需更多資訊,請參閱如何使用 Lambda 定期停止和啟動 Amazon EC2 執行個體?

2.    在 EC2 執行個體上,部署可在特定時間內下載日誌的程式碼。例如,一整天。移除 c-ip 資料欄以處理日誌檔,或是以匿名資料取代資料欄值。將已處理的日誌上傳回 S3 儲存貯體。

**選用:**將所有已處理的日誌合併到單一檔案中,以節省 Amazon S3 生命週期轉換成本。如果您想要將日誌長期儲存,此程序會很有幫助。

使用 Kinesis Data Firehose

使用 CloudFront 即時日誌來選取您要儲存的欄位。然後,讓 Amazon Kinesis Data Firehose 將日誌資料傳送到 Amazon S3。

當您設定 CloudFront 即時記錄時,可以使用每個即時日誌記錄包含的欄位清單。每個日誌記錄最多包含 40 個欄位。您可以選擇接收所有可用欄位,或是僅接收必須監視和分析效能的欄位。停用欄位 c-ip 以將該欄位從日誌檔中排除。

**注意:**由於會用到 Amazon Kinesis Data Streams,此選項可能會較為昂貴。您可考慮其他兩個選項 (觸發 Lambda 函數或使用 Amazon EC2 流程),以採用實惠的解決方案。


AWS 官方
AWS 官方已更新 1 年前