使用 Amazon Macie 保護 CloudWatch Logs 中的敏感資料 - AWS 方案指引

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Amazon Macie 保護 CloudWatch Logs 中的敏感資料

Anisha Salunkhe、Omar Franco 和 David Guardiola,Amazon Web Services

總結

此模式說明如何使用 Amazon Macie 透過實作全面的安全監控工作流程,自動偵測 Amazon CloudWatch Logs 日誌群組中的敏感資料。解決方案使用 Amazon Data Firehose 將 CloudWatch Logs 項目串流至 Amazon Simple Storage Service (Amazon S3)。Macie 會定期掃描此儲存貯體是否有個人身分識別資訊 (PII)、財務資料和其他敏感內容。基礎設施是透過佈建所有必要 AWS 服務 和 組態的 AWS CloudFormation 範本進行部署。

CloudWatch Logs 通常包含的應用程式資料可能會不小心包含敏感的使用者資訊。這可能會產生合規和安全性風險。傳統日誌監控方法缺乏自動化敏感資料偵測功能。這可能會導致難以即時識別和回應潛在的資料暴露。

此模式透過自動偵測和提醒記錄系統中的敏感資料,協助安全團隊和合規主管維護資料機密性。此解決方案可透過 Amazon Simple Notification Service (Amazon SNS) 通知啟用主動事件回應,並自動將敏感資料隔離到安全的 Amazon S3 儲存貯體。您可以自訂偵測模式,並將工作流程與您現有的安全操作程序整合。

先決條件和限制

先決條件

  • 作用中 AWS 帳戶

  • 建立 CloudFormation 堆疊的許可

  • 您要監控的 CloudWatch Logs 日誌群組

  • 接收來自 Amazon SNS 通知的作用中電子郵件地址

  • AWS CloudShell 的存取權限

  • (選用) 存取已安裝設定的 AWS Command Line Interface (AWS CLI)

限制

Architecture

目標架構

下圖顯示使用 Macie 檢查 CloudWatch Logs 日誌項目是否有敏感資料的工作流程。

 

工作流程會顯示下列步驟:

  1. CloudWatch Logs 日誌群組會產生受訂閱篩選條件約束的日誌。

  2. 訂閱篩選條件會將日誌轉送至 Amazon Data Firehose。

  3. 當日誌通過 Amazon Data Firehose 交付串流時,會使用 AWS Key Management Service (AWS KMS) 金鑰加密日誌。

  4. 交付串流會將日誌交付至 Amazon S3 中匯出的日誌儲存貯體。

  5. Amazon EventBridge 會在每天凌晨 4 點啟動 AWS Lambda 函數,以啟動 Macie 掃描匯出日誌儲存貯體中的敏感資料。

  6. 如果 Macie 識別儲存貯體中的敏感資料,Lambda 函數會從匯出的日誌儲存貯體中移除日誌,並使用 加密日誌 AWS KMS key。

  7. Lambda 函數會隔離包含資料隔離儲存貯體中敏感資料的日誌。

  8. 敏感資料的識別會啟動 Amazon SNS 主題。

  9. Amazon SNS 會傳送電子郵件通知至您設定的電子郵件地址,其中包含敏感資料日誌的相關資訊。

部署的資源

CloudFormation 範本會在您的目標和 中部署下列資源 AWS 帳戶 AWS 區域:

工具

AWS 服務

  • AWS CloudFormation 可協助您設定 AWS 資源、快速且一致地佈建資源,以及在整個 AWS 帳戶 和 生命週期中管理資源 AWS 區域。

  • Amazon CloudWatch Logs 可協助您集中所有系統、應用程式的日誌, AWS 服務 以便您可以監控日誌並將其安全地存檔。

  • Amazon Data Firehose 可協助您將即時串流資料交付至其他 AWS 服務自訂 HTTP 端點,以及受支援的第三方服務供應商所擁有的 HTTP 端點。

  • Amazon EventBridge 是一種無伺服器事件匯流排服務,可協助您將應用程式與來自各種來源的即時資料連線。例如, AWS Lambda 函數、使用 API 目的地的 HTTP 調用端點或其他事件匯流排等來源 AWS 帳戶。

  • AWS Key Management Service (AWS KMS) 可協助您建立和控制密碼編譯金鑰,以協助保護您的資料。

  • AWS Lambda 是一項運算服務,可協助您執行程式碼,無需佈建或管理伺服器。它只會在需要時執行程式碼並自動擴展,因此您只需按使用的運算時間付費。

  • Amazon Macie 可協助您探索敏感資料、提供資料安全風險的可見性,並實現對這些風險的自動化保護。

  • Amazon Simple Notification Service (Amazon SNS) 可協助您協調和管理發佈者和用戶端之間的訊息交換,包括 Web 伺服器和電子郵件地址。

  • Amazon Simple Storage Service (Amazon S3) 是一種雲端型物件儲存服務,可協助您儲存、保護和擷取任何數量的資料。

程式碼儲存庫

此模式的程式碼可在 GitHub sample-macie-for-securing-cloudwatch-logs 儲存庫中使用。

最佳實務

遵循 CloudFormation 文件中的CloudFormation 最佳實務

史詩

任務Description所需的技能

複製程式碼儲存庫。

輸入下列命令,將儲存庫複製到本機工作站:

git clone https://github.com/aws-samples/sample-macie-for-securing-cloudwatch-logs
應用程式開發人員

(選用) 編輯 CloudFormation 範本。

  1. 開啟 main.yaml 檔案。

  2. 執行下列任一動作來自訂範本:

    • 您可以重新命名資源。

    • parameter區段中,您可以修改預設值。

    • 您可以變更訂閱篩選條件模式。如需詳細資訊,請參閱 CloudWatch Logs 文件中的日誌群組層級訂閱篩選條件

  3. 儲存並關閉 main.yaml 檔案。

應用程式開發人員

選項 1 – 使用具有命令列參數的指令碼進行部署。

輸入下列命令,使用命令列參數來部署解決方案,其中 的值true僅在尚未啟用 Amazon Macie 時enable-macie為 :

./scripts/test-macie-solution.sh --deploy-stack \ --stack-name <stack name> \ --email <email address> \ --enable-macie <true or false> \ --region <region> \ --resource-name <prefix for all resources> \ --bucket-name <bucket name>
一般 AWS

選項 2 – 使用具有環境變數的指令碼進行部署。

  1. 輸入下列命令來定義環境變數,其中 的值true僅在尚未啟用 Amazon Macie 時ENABLE_MACIE為 :

    export STACK_NAME=<stack name> export SNS_EMAIL=<email address> export ENABLE_MACIE=<true or false> export REGION=<region> export RESOURCE_NAME=<prefix for all resources> export BUCKET_NAME=<bucket name>
  2. 輸入下列命令以在部署之前驗證參數:

    ./scripts/test-macie-solution.sh \ --validate-params \ --email <email address> \ --region <region>
  3. 輸入下列命令來部署解決方案:

    ./scripts/test-macie-solution.sh --deploy-stack
一般 AWS

選項 3 – 使用 部署 AWS CLI。

輸入下列命令,使用 來部署解決方案 AWS CLI,其中 的值true僅在尚未啟用 Amazon Macie 時EnableMacie為 :

aws cloudformation create-stack \ --region us-east-1 \ --stack-name macie-for-securing-cloudwatch-logs \ --template-body file://app/main.yml \ --capabilities CAPABILITY_IAM \ --parameters \ ParameterKey=ResourceName,ParameterValue=<prefix for all resources> \ ParameterKey=BucketName,ParameterValue=<bucket name> \ ParameterKey=LogGroupName,ParameterValue=<path for log group> \ ParameterKey=SNSTopicEndpointEmail,ParameterValue=<email address> \ ParameterKey=EnableMacie,ParameterValue=<true or false>

選項 4 – 透過 部署 AWS 管理主控台。

  1. 開啟 AWS CloudFormation 主控台

  2. 在畫面頂端的導覽列上,選擇要在其中 AWS 區域 建立堆疊的 。

  3. 堆疊頁面的右上角,選擇建立堆疊,並選擇使用新資源 (標準)

  4. 建立堆疊頁面上,針對先決條件 - 準備範本,選擇選擇現有範本

  5. 指定範本下,選擇上傳範本檔案,然後從您複製的儲存庫上傳 main.yaml 範本。

  6. 選擇下一步

  7. 指定堆疊詳細資訊頁面上的堆疊名稱方塊中,輸入堆疊名稱。

  8. 參數區段中,指定下列範本參數的值。

    • ResourceName:所有資源的字首

    • BucketName:Amazon S3 儲存貯體的唯一名稱

    • LogGroupName:CloudWatch Logs 的日誌群組名稱

    • SNSTopicEndpointEmail:通知的電子郵件地址

    • EnableMacietrue如果 Macie 尚未啟用,則設定為

    • (選用) Region: AWS 區域 您要部署堆疊的 。

    • (選用) TemplatePath: CloudFormation 範本的路徑

  9. 選擇下一步

  10. 針對功能,選擇我確認此範本可能會建立 IAM 資源,以指定您要在範本中使用 IAM 資源。

  11. 選擇下一步

  12. 檢閱並建立頁面中,檢閱堆疊詳細資訊。

  13. 選擇提交以啟動堆疊。

一般 AWS

監控部署狀態並確認部署。

  1. 輸入下列命令來監控部署狀態:

    ./scripts/test-macie-solution.sh \ --deployment-status \ --stack-name <stack name>
    注意

    您也可以在新堆疊的事件索引標籤上監控堆疊建立的進度和狀態。如需詳細資訊,請參閱監控堆疊進度

  2. 當狀態變更為 CREATE_COMPLETE 時,請檢閱資源資訊的堆疊輸出。

一般 AWS

確認 Amazon SNS 訂閱。

請遵循 Amazon SNS 文件中的確認 Amazon SNS 訂閱中的指示,以確認您的 Amazon SNS 訂閱。

應用程式開發人員
任務Description所需的技能

選項 1 – 使用自動報告進行測試。

如果您使用預設堆疊名稱,請輸入下列命令來測試解決方案:

./scripts/test-macie-solution.sh \ --full-test

如果您使用自訂堆疊名稱,請輸入下列命令來測試解決方案:

./scripts/test-macie-solution.sh \ --full-test \ --stack-name <stack name>

如果您使用自訂堆疊名稱和自訂參數,請輸入下列命令來測試解決方案:

./scripts/test-macie-solution.sh --full-test \ --stack-name <stack name> \ --region <region> \ --log-group <log group path>
一般 AWS

選項 2 – 使用目標驗證進行測試。

  1. 輸入下列命令以使用敏感資訊產生測試資料:

    ./scripts/test-macie-solution.sh \ --generate-test-data \ --stack-name <stack name>

    此命令會執行下列動作:

    • 建立包含實際敏感資料模式的 CloudWatch Logs 日誌項目,包括員工 IDs、專利 IDs、信用卡號碼、社會安全號碼和電子郵件地址

    • 產生敏感和非敏感日誌項目以進行全面測試

    • 提供測試資料產生程序的詳細記錄

  2. 輸入下列命令來驗證資料管道流程:

    ./scripts/test-macie-solution.sh \ --verify-pipeline \ --stack-name <stack name>

    此命令會執行下列動作:

    • 確認 CloudWatch Logs 項目已串流至 Amazon Data Firehose

    • 使用適當的加密來驗證日誌資料是否已交付至 Amazon S3 儲存貯體

    • 檢查 Amazon S3 物件儲存體是否具有正確的字首結構

    • 驗證儲存物件的加密狀態

    • 監控資料流程計時,並提供處理等待期

  3. 輸入下列命令以啟動 Macie 分類任務:

    ./scripts/test-macie-solution.sh \ --trigger-macie-job \ --stack-name <stack name>

    此命令會執行下列動作:

    • 透過 Lambda 函數手動觸發 Macie 分類任務

    • 監控任務執行狀態並提供意見回饋

    • 在執行之前驗證 Macie 服務可用性

    • 處理帳戶中未啟用 Macie 的情況

    • 提供詳細的任務執行結果

  4. 輸入下列命令來驗證警示和資料隔離:

    ./scripts/test-macie-solution.sh \ --verify-alerts \ --stack-name <stack name>

    此命令會執行下列動作:

    • 確認 EventBridge 規則已正確設定並處於作用中狀態

    • 驗證 Amazon SNS 主題組態和訂閱狀態

    • 檢查資料隔離儲存貯體的設定和許可

    • 監控敏感資料移至隔離儲存貯體的情況

    • 驗證完整的警示工作流程功能

一般 AWS
任務Description所需的技能

選項 1 – 執行自動清除。

如果您使用預設堆疊名稱,請輸入下列命令來刪除堆疊:

./scripts/cleanup-macie-solution.sh \ --full-cleanup

如果您使用自訂堆疊名稱,請輸入下列命令來刪除堆疊:

./scripts/cleanup-macie-solution.sh \ --full-cleanup \ --stack-name <stack name>

如果您使用自訂堆疊名稱和自訂參數,請輸入下列命令來刪除堆疊:

./scripts/cleanup-macie-solution.sh \ --full-cleanup \ --stack-name <stack name> \ --region <region> \ --disable-macie <true or false>
一般 AWS

選項 2 – step-by-step清除。

  1. 輸入下列命令以停止作用中的程序:

    ./scripts/cleanup-macie-solution.sh \ --stop-processes \ --stack-name <stack name>

    此命令會執行下列動作:

    • 關閉 EventBridge 規則以防止新任務執行

    • 停止任何目前正在執行的 Macie 分類任務

    • 取消待處理的 Macie 任務執行

    • 清除佇列中任何待處理的 Amazon SNS 訊息

    • 提供每個已停止程序的狀態更新

  2. 輸入下列命令以清空 Amazon S3 儲存貯體:

    ./scripts/cleanup-macie-solution.sh \ --empty-buckets \ --stack-name <stack name>

    此命令會執行下列動作:

    • 從 CloudWatch Logs 的儲存貯體移除所有物件

    • 從資料隔離 Amazon S3 儲存貯體移除所有物件

    • 刪除任何未完成的分段上傳

    • 如果啟用 Amazon S3 版本控制,則處理版本控制的物件

    • 提供物件計數和刪除進度更新

  3. 輸入下列命令來刪除 CloudFormation 堆疊:

    ./scripts/cleanup-macie-solution.sh \ --delete-stack \ --stack-name <stack name>

    此命令會執行下列動作:

    • 啟動 CloudFormation 堆疊刪除程序

    • 使用即時狀態更新監控刪除進度

    • 使用詳細的錯誤報告來處理刪除失敗

    • 等待完全移除堆疊後再繼續

    • 提供堆疊事件歷史記錄以進行故障診斷

  4. 輸入下列命令以清除 Macie 資源:

    ./scripts/cleanup-macie-solution.sh \ --cleanup-macie \ --stack-name <stack name>

    此堆疊會執行下列動作:

    • 移除解決方案建立的自訂資料識別符

    • 清除任何剩餘的 Macie 任務成品和調查結果

    • 停用由堆疊啟用的 Macie 工作階段

    • 處理 Macie 資源與其他應用程式共用的情況

    • 提供每個 Macie 元件的詳細清除狀態

一般 AWS

驗證清除。

  1. 輸入下列命令以確認堆疊已刪除:

    aws cloudformation describe-stacks \ --stack-name <stack name> \ --region <region>
  2. 輸入下列命令以確認已刪除 Amazon S3 儲存貯體:

    aws s3 ls | grep macie
  3. 輸入下列命令來驗證 Macie 自訂資料識別符是否已移除:

    aws macie2 list-custom-data-identifiers \ --region <region>
  4. 輸入下列命令來檢查是否有任何剩餘的資源:

    ./scripts/cleanup-macie-solution.sh \ --verify-cleanup \ --stack-name <stack name>
一般 AWS

疑難排解

問題解決方案

CloudFormation 堆疊狀態顯示 CREATE_FAILED

CloudFormation 範本設定為將日誌發佈至 CloudWatch Logs。您可以在 中檢視日誌, AWS 管理主控台 這樣您就不必連線到 Amazon EC2 執行個體。如需詳細資訊,請參閱在 主控台中檢視 CloudFormation 日誌 (AWS 部落格文章)。

CloudFormation delete-stack命令失敗。

某些資源在刪除之前必須先清空。例如,您必須刪除 Amazon S3 儲存貯體中的所有物件或移除 Amazon EC2 安全群組中的所有執行個體,才能刪除該儲存貯體或安全群組。如需詳細資訊,請參閱 Amazon S3 文件中的刪除堆疊失敗

剖析參數時發生錯誤。

當您使用 AWS CLI 或 CloudFormation 主控台傳入值時,請新增引號。

相關資源