2024年7月29日:這篇文章的原始發佈日期。當前版本已更新以使指示更清晰並與OCSF 1.1兼容。
客戶經常需要在他們的AWS環境中使用多個日誌來源,以便讓團隊能夠回應和調查安全事件。在這篇兩部分的博客文章的第一部分中,我將向您展示如何使用Amazon OpenSearch Service來接收由Amazon Security Lake收集的日誌,以便進行接近實時的監控。
許多客戶使用Security Lake自動集中來自Amazon Web Services (AWS)環境、軟體即服務 (SaaS) 供應商、本地工作負載和雲端來源的安全數據,並將其集中到AWS環境中的專用數據湖中。OpenSearch Service是一項託管服務,客戶可以用來在AWS雲中部署、運營和擴展OpenSearch集群。它與Security Lake原生集成,使客戶能夠在大型數據集上進行互動式日誌分析和搜索,創建企業級可視化和儀表板,並在不同的應用程序和日誌中進行分析。通過Amazon OpenSearch Security Analytics,客戶還可以獲得對其組織基礎設施安全狀態的可見性,監控異常活動,接近實時地檢測潛在的安全威脅,並向預配置的目的地發送警報。
如果不使用Amazon OpenSearch Service,客戶將需要構建、部署和管理分析解決方案的基礎設施,例如ELK堆棧。
先決條件
Security Lake應已部署。關於如何部署Security Lake的詳細信息,請參閱Amazon Security Lake入門。您將需要AWS Identity and Access Management (IAM)權限來管理Security Lake、OpenSearch Service、Amazon Cognito、AWS Secrets Manager和Amazon Elastic Compute Cloud (Amazon EC2),並創建IAM角色以跟隨本文。該解決方案可以部署在任何至少有3個可用區域、支持Security Lake、OpenSearch和OpenSearch Ingestion的AWS區域。
解決方案概述
圖1中的架構圖顯示了解決方案的完整架構。
OpenSearch Service集群部署在虛擬私有雲 (VPC) 中,跨三個可用區域以實現高可用性。
OpenSearch Service集群使用OpenSearch Ingestion管道從Security Lake接收日誌。
集群通過託管在Amazon EC2實例上的公共代理供最終用戶訪問。
為了降低成本,模板不會為OpenSearch Ingestion管道部署死信隊列 (DLQ)。如果需要,您可以稍後添加。
您可以部署VPN來訪問您的集群,而不是公共代理。
集群的身份驗證由Amazon Cognito管理。
圖1:解決方案架構
部署計劃
本節將幫助您計劃OpenSearch服務的部署,包括應選擇哪些節點、分配多少存儲以及在哪裡部署集群。
決定OpenSearch Service主節點和數據節點的實例
首先,確定用於主節點和數據節點的實例類型。如果您的工作負載每天生成少於100 GB的Security Lake日誌,我們建議使用三個m6g.large.search主節點和三個r6g.large.search數據節點。您可以從小規模開始,然後在需要時擴展或擴展。關於決定實例的大小和數量的更多信息,請參閱Amazon OpenSearch Service入門。將您選擇的實例類型記錄在文本編輯器中,因為稍後您將在部署AWS CloudFormation模板時使用它作為輸入。
配置存儲
為了優化您的存儲成本,您需要計劃您的數據策略。在此架構中,Security Lake用於長期日誌存儲。由於Security Lake使用Amazon Simple Storage Service (Amazon S3),您可以優化長期存儲成本。您可以配置OpenSearch Service根據最近的數據接收優先日誌,這些數據可用於接近實時的檢測和警報。您的團隊可以使用其與OpenSearch Service的零ETL集成來查詢Security Lake中的日誌以分析較舊的日誌。
因此,Security Lake應作為您的主要長期日誌存儲,OpenSearch Service僅存儲最新的日誌。
OpenSearch Service中的日誌天數將取決於您在給定時間需要調查多少天的數據。我建議在OpenSearch Service中存儲15天的數據。這使您能夠對最直接的安全事件做出反應和調查,同時優化較舊日誌的存儲成本。
下一步是確定Security Lake生成的日誌量。
登錄到Security Lake委派管理員帳戶。
轉到Security Lake的AWS管理控制台。在導航窗格中選擇Usage。
在Usage屏幕上,選擇過去30天作為使用範圍。
將您打算發送到OpenSearch的數據源在過去30天的實際使用量相加。如果您使用Security Lake的時間少於30天,您可以使用每月的總預測使用量。將此數字除以30以獲得每日數據量。

圖2:選擇使用範圍
要確定所需的總存儲量,將Security Lake每天生成的數據乘以您選擇的保留期,然後乘以1.1以考慮索引,再乘以1.15以考慮額外存儲。關於計算存儲的更多信息,請參閱Amazon OpenSearch Service入門。
要確定每個節點需要的Amazon Elastic Block Store (Amazon EBS)存儲量,請將總存儲量除以您擁有的節點數,然後將該數字四捨五入到最近的整數。您可以在部署後增加存儲量,當您對工作負載有更好的了解時。將此數字記錄在文本編輯器中,因為稍後您將在CloudFormation模板中使用它作為輸入。
示例1:每天生成10 GB的Security Lake日誌,存儲30天在三個節點的OpenSearch Service中
10 GB的Security Lake日誌存儲30天 = 10 GB * 30 = 300 GB
考慮索引和額外空間 = 300 GB * 1.1 * 1.15 = 379.5 GB
將所需存儲量分配到三個節點,四捨五入 = 379.5/3 ≈ 127 GB每個節點
您將需要每個節點127 GB的OpenSearch Service存儲
示例2:每天生成200 GB的Security Lake日誌,存儲15天在六個節點的OpenSearch Service中
200 GB的Security Lake日誌存儲15天 = 200 GB * 15 = 3000 GB
考慮索引和額外空間 = 3000 GB * 1.1 * 1.15 = 3795 GB
將所需存儲量分配到六個節點,四捨五入 = 3795/6 ≈ 633 GB每個節點
您將需要每個節點633 GB的OpenSearch Service存儲
在哪裡部署集群?
如果您有AWS Control Tower部署或按照AWS Security Reference Architecture (AWS SRA)建模的部署,Security Lake應部署在Log Archive帳戶中。由於安全最佳實踐建議Log Archive帳戶不應頻繁訪問,OpenSearch Service集群應部署到您的Audit帳戶或Security Tooling帳戶中。
您需要在與Security Lake roll-up Region相同的區域中部署您的Security Lake訂閱者。如果您有多個roll-up Region,請選擇收集您想監控的區域日誌的區域。
您的集群需要部署在與Security Lake訂閱者相同的區域,以便能夠訪問數據。
設置Security Lake訂閱者
在部署解決方案之前,請在您的Security Lake roll-up Region中創建一個Security Lake訂閱者,以便OpenSearch Service可以訪問來自Amazon Security Lake的數據。
訪問Log Archive帳戶中的Security Lake控制台。
在導航窗格中選擇Subscribers。
選擇Create subscriber。
在Create subscriber頁面上,輸入名稱,例如OpenSearch-subscriber。
在Data Access下,選擇S3 notification類型,選擇SQS queue。
在Subscriber credentials下,輸入您計劃部署OpenSearch集群的帳戶的AWS帳戶ID,這應該是您的Security Tooling帳戶。
在External ID下輸入OpenSearchIngestion-<AWS account ID>。

圖3:配置Security Lake訂閱者
保持選中所有日誌和事件來源,然後選擇Create。
創建訂閱者後,您將需要收集信息以便部署。
收集必要信息:
選擇您剛剛創建的訂閱者。
從S3 bucket ARN中推導出S3 bucket名稱並將其存儲在文本編輯器中。Amazon Resource Name (ARN)的格式為arn:aws:s3:::<bucket name>。bucket名稱應類似於aws-security-data-lake-<region>-xxxxx。

圖4:從訂閱者詳情頁推導出S3 bucket名稱
轉到Amazon Simple Queue Service (Amazon SQS)控制台,選擇作為Security Lake訂閱者的一部分創建的SQS隊列。它應該看起來像AmazonSecurityLake-xxxxxxxxx-Main-Queue。將隊列的ARN和URL記錄在您的文本編輯器中。

圖5:來自SQS隊列的相關詳情
部署解決方案
要在您的Security Tooling帳戶中部署解決方案,請使用CloudFormation模板。該模板部署OpenSearch Service集群、OpenSearch Ingestion管道和AWS Lambda函數來初始化集群。
要部署OpenSearch集群:
要部署構建OpenSearch服務集群的CloudFormation模板,選擇Launch Stack按鈕。
在CloudFormation控制台中,確保您在正確的AWS帳戶中。您應該在您的Security Tooling帳戶中。還要確保您選擇了與Security Lake訂閱者相同的區域。
為您的堆棧輸入一個名稱。像os-stack-<day>-<month>這樣的名稱可以幫助您跟踪部署。
輸入您之前記錄的實例類型和Amazon EBS卷大小。
輸入您希望允許訪問代理安全組的IP地址範圍。您應將其限制為您的公司IP範圍。如果您想將其暴露給公共互聯網,可以將其設置為0.0.0/0。
填寫Security Lake bucket和訂閱者Amazon SQS隊列ARN、URL和區域的詳細信息。

圖6:添加堆棧參數
在Capabilities部分檢查確認。
選擇Create stack以開始部署資源。
部署多個嵌套模板需要20-30分鐘。等待主堆棧(而不是嵌套的)達到CREATE_COMPLETE狀態,然後再進行下一步。
注意:如果在部署過程中遇到失敗,您可以在此處下載CloudFormation文件,並在部署時選擇Stack failure options下的Preserve successfully provisioned resources。這將允許您排除堆棧部署的故障。
轉到主CloudFormation堆棧的Outputs窗格。將DashboardsProxyURL、OpenSearchInitRoleARN和PipelineRole值保存到文本編輯器中以供稍後參考。

圖7:在CREATE_COMPLETE狀態下的堆棧,顯示輸出面板
在新標籤中打開DashboardsProxyURL值。
注意:由於代理依賴於自簽名證書,您將收到不安全證書警告。您可以安全地忽略此警告並繼續。對於生產工作負載,您應該從內部公鑰基礎設施發行受信任的私有證書或使用AWS Private Certificate Authority。
您將看到Amazon Cognito登錄頁面。使用administrator作為用戶名。
訪問Secrets Manager以找到密碼。選擇作為堆棧一部分創建的秘密。

圖8:在Secrets Manager中檢索Cognito密碼
選擇Retrieve secret value以獲取密碼。

圖9:檢索秘密值
登錄後,您將被提示更改密碼,並將被重定向到OpenSearch儀表板。
如果您看到彈出窗口顯示Start by adding your own data,選擇Explore on my own。在下一頁Introducing new OpenSearch Dashboards look & feel中,選擇Dismiss。
如果您看到彈出窗口顯示Select your tenant,選擇Global,然後選擇Confirm。

圖10:選擇並確認您的租戶
初始化OpenSearch集群:
選擇左上角的菜單圖標(三條水平線),然後在Management部分選擇Security。

圖11:在OpenSearch控制台中導航到Security頁面
選擇Roles。在Roles頁面上,搜索all_access角色並選擇它。
選擇Mapped users,然後選擇Manage mapping。
在Map user屏幕上,選擇Add another backend role。從CloudFormation輸出列表中粘貼OpenSearchInitRoleARN的值。選擇Map。

圖12:在OpenSearch控制台的Security頁面上映射角色
保持此標籤打開,返回AWS管理控制台。轉到AWS Lambda控制台並選擇名為xxxxxx-OS_INIT的函數。
在函數屏幕上,選擇Test,然後Create new test event。

圖13:在Lambda控制台中創建測試事件
選擇Invoke。該函數應運行約30秒。執行結果應顯示已創建的組件模板。此Lambda函數創建組件和索引模板,以接收Open Cybersecurity Framework (OCSF)格式化數據,與Security Lake生成的OCSF類對應的一組索引和別名,以及一個滾動策略,將在索引每天或超過40 GB時滾動。

圖14:在Lambda控制台中調用Lambda函數
設置管道
返回OpenSearch控制台的Map user頁面。
選擇Add another backend role。從CloudFormation模板輸出中粘貼PipelineRole的值。選擇這將允許OpenSearch Ingestion寫入集群。

圖15:映射OpenSearch Ingestion角色
訪問託管Security Lake的Log Archive帳戶中的Amazon S3控制台。
選擇您roll-up Region中的Security Lake bucket。它應該看起來像aws-security-data-lake-region-xxxxxxxxxx。
選擇Permissions,然後在Bucket policy下選擇Edit。
將此策略添加到現有bucket策略的末尾。在Resource部分用PipelineRole的ARN替換Principal,並用您的Security Lake bucket名稱替換。

圖16:修改後的S3 bucket訪問策略
選擇Save changes。
上傳索引模式和儀表板
通過右鍵單擊此鏈接並選擇Save link as下載Security-lake-objects.ndjson文件。
通過導航菜單訪問Dashboards Management頁面。
在導航窗格中選擇Saved objects。
在Saved Objects頁面上,選擇屏幕右側的Import。

圖17:導入保存的對象
選擇Import並選擇您之前下載的Security-lake-objects.ndjson文件。
保持選中Create new objects with unique IDs並選擇Import。
現在,您可以在Discover頁面上查看接收的日誌,並在導航欄上的Dashboards頁面上查看可視化。

圖18:Discover頁面顯示接收的日誌
清理
為避免不必要的費用,刪除名為os-stack-<day>–<month>的主CloudFormation模板(而不是嵌套堆棧)。

圖19:在CloudFormation控制台中選擇主堆棧
修改日誌帳戶中的Security Lake bucket策略,以刪除您添加的信任PipelineRole的部分。小心不要修改策略的其餘部分,因為這可能會影響Security Lake和其他訂閱者的功能。

圖20:需要刪除的S3 bucket策略的相關部分
結論
在本文中,您學習了如何使用Amazon OpenSearch Service計劃OpenSearch部署,以接收來自Amazon Security Lake的日誌。通過此解決方案,您可以使用Security Lake聚合和管理日誌,並使用OpenSearch Service可視化和監控這些日誌。部署後,監控OpenSearch Service指標以確定是否需要擴展以提高性能。在第二部分中,我將向您展示如何設置Security Analytics檢測器以接近實時地生成安全發現警報。
如果您對本文有反饋,請在下面的評論部分提交評論。如果您對本文有疑問,請聯繫AWS支持。
本文由 AI 台灣 運用 AI 技術編撰,內容僅供參考,請自行核實相關資訊。
歡迎加入我們的 AI TAIWAN 台灣人工智慧中心 FB 社團,
隨時掌握最新 AI 動態與實用資訊!