附註:
- 此教學課程需要存取 Oracle Cloud。若要註冊免費帳戶,請參閱開始使用 Oracle Cloud Infrastructure Free Tier 。
- 它會使用 Oracle Cloud Infrastructure 證明資料、租用戶及區間的範例值。完成實驗室時,請將這些值替代為您雲端環境特定的值。
將日誌從 Oracle Cloud Infrastructure 轉送至 Rapid7 InsightOps
簡介
Oracle Cloud Infrastructure (OCI) 是一組互補的雲端服務,可讓您在高可用性的代管環境中建置和執行一系列的應用系統和服務。OCI 在從企業內部部署網路安全地存取的彈性覆蓋虛擬網路中,提供高效能運算功能 (作為實體硬體執行處理) 和儲存容量。
Oracle Cloud Observability and Manageability 平台旨在滿足客戶的需求。我們瞭解他們已使用熱門的第三方可觀察性工具將營運狀態標準化,而且想要與這些工具互通,讓客戶能夠繼續使用他們已投資於 OCI 的工具。
本教學課程將引導您瞭解如何將日誌從 OCI 轉送至 Rapid7 InsightOps。Rapid7 InsightOps 是一種易於使用的日誌管理和分析服務。它提供世界級的搜尋功能、增強的日誌分析工具,以及監控和查詢基礎架構即時狀態的能力。
現在,讓我們看看解決方案架構的概略表現,如下所示。
目標
- 將日誌從 OCI 轉送至 Rapid7 InsightOps。
必要條件
- OCI 中的使用者必須具備函數、服務連線器中心以及日誌記錄服務所需的原則,才能管理資源。如需所有服務的原則參照,請參閱原則參照。
任務 1:建立記錄 Webhook 將資料傳送至 Rapid7 InsightOps
HTTP POST 是將日誌訊息轉寄至 Rapid7 InsightOps 的簡單方法。
-
登入 Rapid7 InsightOps ,然後按一下頂端導覽中的新增資料。
-
按一下 Webhook 。
-
輸入日誌的名稱並選取現有的日誌集或建立新的日誌集。
注意:這會顯示您將用來傳送日誌資料的 URL。URL 的最後一個部分是日誌記號,可識別要傳送資料的日誌。
作業 2:設定要擷取的日誌
-
在 OCI 主控台中,瀏覽至可觀察性與管理、記錄日誌及日誌群組。
-
選取區間並按一下建立日誌群組,便會開啟側邊面板。
-
輸入 *Rapid7_log_group* 作為名稱,並選擇性提供描述和標記。
-
按一下建立以設定新的「日誌群組」。
-
按一下資源底下的日誌。
-
視需要按一下建立自訂日誌或啟用服務日誌。
例如,依照下列步驟,啟用物件儲存之儲存桶的寫入日誌:
-
按一下啟用服務日誌。側邊面板將開啟。
-
選取您的資源區間,然後在搜尋服務欄位中輸入物件儲存。
-
按一下啟用日誌,然後在資源欄位中選擇物件儲存的儲存桶名稱。
-
選取先前建立的日誌群組 Rapid7_log_group ,然後在「日誌類別 (Log Category)」欄位中選取寫入存取事件 (Write Access Events) 。(選擇性) 提供記錄名稱,例如 Rapid7_bucket_write 。
-
按一下啟用即可建立新的 OCI 日誌。
-
作業 3:建立將日誌擷取至 Rapid7 InsightOps 的 Oracle 函數
-
在 OCI 主控台中,瀏覽至開發人員服務與函數。
-
按一下建立應用程式。請提供您的應用程式名稱 (例如 Rapid7_App),從個別的下拉式清單中選取 VCN、子網路、資源配置 (GENERIC_X86) ,然後按一下建立。
-
請依照下列步驟設定您的 Cloud Shell 環境:
-
在 Cloud Shell 上啟動 Cloud Shell 並設定 fn CLI。
-
使用區域相關資訊環境。
fn list context fn use context <region-context>
-
使用函數的區間 ID 更新此相關資訊環境。
fn update context oracle.compartment-id <compartment-id>
-
提供唯一的儲存區域名稱前置碼,以區別您的函數影像。
fn update context registry <region-key>.ocir.io/<tenancy_name>/[repo-name-prefix]
-
使用認證權杖作為密碼以登入「登錄」。
docker login -u '<tenancyname>/<username>' <region-key>.ocir.io
-
列出區間中的應用程式來檢查設定。
fn list apps
-
作業 4:建立、部署及呼叫您的函數
-
建議您先建立 Python 樣板函數,並以下列程式碼取代自動產生的檔案。
fn init --runtime python rapid7_func
注意:
fn init
指令將產生一個名為rapid7_func
的資料夾,內含 3 個檔案;func.py
、func.yaml
和requirements.txt
。 -
切換到所產生的目錄 。
cd rapid7_func
-
將
func.py
的內容取代為下列範例程式碼。您可以根據需求調整代碼。import io import os import json import requests import logging from fdk import response def process(body): try: data = body.get("data", {}) source = body.get("source") time = body.get("time") oracle = body.get("oracle",{}) type = body.get("type") regionID = body.get("regionID") origin = "OCI-CLOUD" #Get json data, time, type and source information payload = {} payload.update({"origin":origin}) payload.update({"time": time}) payload.update({"type":type}) payload.update({"regionID":regionID}) payload.update({"source":source}) payload.update({"data":data}) payload.update({"oracle":oracle}) #Rapid7 endpoint URL with token to call the REST interface.Refer for more info https://docs.rapid7.com/insightops/insightops-webhook #This is defined in the func.yaml file. rapid7host = os.environ['RAPID7_HOST'] #Invoke Rapid7 API with the payload. If the payload contains more than one log this will be ingested as once. headers = {'Content-type': 'application/json'} x = requests.post(rapid7host, data = json.dumps(payload), headers=headers) logging.getLogger().info(x.text) except (Exception, ValueError) as ex: logging.getLogger().error(str(ex))
此函數接受記錄日誌 JSON,並觸發 Rapid7 InsightOps 端點來擷取日誌。如需最上層記錄日誌格式的詳細資訊,請參閱記錄日誌格式總覽。
使用多個日誌呼叫時,函數會在每個日誌上重複執行,並觸發 Rapid7 InsightOps 端點個別擷取。
def handler(ctx, data: io.BytesIO=None): try: body = json.loads(data.getvalue()) if isinstance(body, list): # Batch of CloudEvents format for log in body: process(log) else: # Single log process(body) except (Exception, ValueError) as ex: logging.getLogger().error(str(ex))
-
以下列方式取代
func.yaml
內容。RAPID7_HOST
必須以我們在上一個步驟中取得的 URL 取代。schema_version: 20180708 name: rapid7_func version: 0.0.1 runtime: python entrypoint: /python/bin/fdk /function/func.py handler memory: 1024 timeout: 120 config: RAPID7_HOST: https://us2.webhook.logs.insight.rapid7.com/v1/noformat/1a2345b1-1234-1ab2-1a2b-abcd1ef2345g
-
以下列方式取代
requirements.txt
內容。fdk datetime requests oci
-
-
部署您的函數。
fn -v deploy --app Rapid7_App
-
您可以呼叫函數來測試函數。如果沒有觀察到任何錯誤,函數會如預期般運作。
fn invoke Rapid7_App rapid7_func
作業 5:設定 OCI 服務連線器
-
在 OCI 主控台中,瀏覽至可觀測性與管理、記錄日誌以及服務連線器。
-
按一下建立服務連線器,即可導向至「建立服務連線器」頁面。
-
輸入 *Rapid7_SC* 作為名稱,可選擇提供描述並選取區間。
-
將「來源」選取為記錄日誌,並將「目標」選取為函數。
-
在設定來源連線:選取區間名稱、日誌群組和日誌底下 (在第一個步驟中建立的日誌群組和日誌 )。
-
如果您也想要傳送稽核日誌,請按一下 +Another 日誌,然後在取代 _Audit 作為日誌群組時選取相同的區間。
-
在設定目標下,選取區間、函數應用程式以及函數 (上一個步驟中建立的函數應用程式和函數 )。
-
如果系統提示您建立原則,請從提示按一下建立。
-
按一下底端的建立 (Create) ,完成建立服務連線器。
作業 6:視覺化 Rapid7 InsightOps 平台產品中的 Oracle Cloud Infrastructure 日誌
若要存取記錄,請登入 Rapid7 InsightOps ,然後瀏覽至記錄搜尋區段。
注意:擷取至 Rapid7 InsightOps 透過 HTTP Post 選項的日誌也會顯示在 Rapid7 InsightIDR 中。
接下來的步驟
本教學課程示範使用服務連線器中心和函數,將 Oracle Cloud Infrastructure (OCI) 日誌轉送至 Rapid7 InsightOps 平台的程序。在安全資訊與事件管理 (SIEM) 端,定義儀表板以擷取關鍵度量,並設定超過預先定義臨界值時要觸發的警示。此外,定義特定查詢對偵測惡意活動及識別 OCI 租用戶內的模式而言至關重要。這些動作可進一步強化您的安全性狀態,並主動監控您的雲端環境。
相關連結
確認
作者 - Chaitanya Chintala (雲端安全建議程式)
其他學習資源
探索 docs.oracle.com/learn 的其他實驗室,或者存取更多 Oracle Learning YouTube 頻道上的免費學習內容。此外,請瀏覽 education.oracle.com/learning-explorer 以成為 Oracle Learning 檔案總管。
如需產品文件,請造訪 Oracle Help Center 。
Forward Logs from Oracle Cloud Infrastructure to Rapid7 InsightOps
F87599-01
October 2023
Copyright © 2023, Oracle and/or its affiliates.