收集 Akamai WAF 記錄
本文說明如何使用 Google Cloud Storage 或 AWS S3,將 Akamai WAF 記錄檔匯出及擷取至 Google Security Operations。剖析器會處理記錄,同時支援 syslog 和 CEF 格式。並擷取 IP 位址、網址、HTTP 方法、回應代碼、使用者代理程式和安全性規則資訊等欄位,然後對應至統一資料模型 (UDM),確保資料呈現方式一致。剖析器也會處理特定 Akamai 欄位 (例如 attackData
和 clientReputation
),執行必要的資料轉換,並擴充 UDM 輸出內容。
事前準備
請確認您已完成下列事前準備事項:
- Google SecOps 執行個體
- Google 或 AWS 的特殊存取權限 Google Cloud
- Akamai 的特殊存取權
從 Cloud Storage 匯出及擷取 Akamai WAF 記錄
本節將說明程序的第一步:為 Akamai WAF 記錄設定必要的儲存空間。
建立 Google Cloud 儲存空間 bucket
- 登入 Google Cloud 主控台。
前往「Cloud Storage Buckets」(Cloud Storage bucket) 頁面。
點選「建立」。
在「建立 bucket」頁面中,輸入 bucket 資訊。完成下列每個步驟後,請按一下「繼續」前往下一個步驟:
在「開始使用」部分執行下列操作:
- 輸入符合值區名稱規定的專屬名稱 (例如
akamai-waf-logs
)。 - 如要啟用階層命名空間,請按一下展開箭頭,展開「為檔案導向和資料密集型工作負載提供最理想的儲存空間」部分,然後選取「為這個值區啟用階層結構式命名空間」。
- 如要新增值區標籤,請按一下展開箭頭,展開「標籤」部分。
- 按一下「新增標籤」,然後指定標籤的鍵和值。
- 輸入符合值區名稱規定的專屬名稱 (例如
在「Choose where to store your data」(選擇資料的儲存位置) 專區中執行下列操作:
- 選取「位置類型」。
- 使用位置類型下拉式選單,選取要永久儲存 bucket 內物件資料的位置。
- 如要設定跨 bucket 複製作業,請展開「設定跨 bucket 複製作業」部分。
在「為資料選擇儲存空間級別」部分,選取值區的預設儲存空間級別,或選取「Autoclass」,讓系統自動管理值區資料的儲存空間級別。
在「選取如何控制物件的存取權」部分,選取「否」以強制禁止公開存取,並為值區物件選取存取權控管模型。
在「選擇保護物件資料的方式」部分,執行下列操作:
- 選取「資料保護」下要為值區設定的任何選項。
- 如要選擇物件資料的加密方式,請按一下標示為「資料加密」的展開箭頭,然後選取「資料加密方法」。
點選「建立」。
設定 Cloud Storage 的權限
前往「Create service account」(建立服務帳戶) 頁面。
選取 Google Cloud 專案。
輸入要顯示在 Google Cloud 控制台的服務帳戶名稱。
按一下「建立並繼續」。
授予值區的 roles/storage.admin。
按一下「Done」(完成),即完成建立服務帳戶。
建立並下載 Google Cloud 服務帳戶金鑰檔案
前往「Service accounts」(服務帳戶) 頁面。
選取 Google Cloud 專案。
按一下新建立的服務帳戶電子郵件地址。
按一下「Keys」(金鑰) 分頁標籤。
點選「新增金鑰」選單,然後選取「建立新的金鑰」。
選取「JSON」做為金鑰類型,然後按一下「建立」。
- 按一下「Create」(建立),即可下載服務帳戶金鑰檔案。金鑰檔案下載後,就不能再次下載。
- 下載的金鑰格式如下,其中
PRIVATE_KEY
是公開/私密金鑰組的私密部分。
設定 Akamai WAF,將記錄檔傳送至 Cloud Storage
- 登入 Akamai Control Center。
- 前往「安全性」部分。
- 選取「記錄」。
- 設定新的記錄檔傳送方式:
- 記錄來源:選取 WAF 設定。
- 目的地:選取「Google Cloud Storage」。
- 顯示名稱:輸入專屬名稱說明。
- Bucket:指定您建立的 Cloud Storage bucket 名稱 (例如
gs://akamai-waf-logs
)。 - 專案 ID:輸入 Google Cloud 專案的專屬 ID。
- 「服務帳戶名稱」:輸入您先前建立的服務帳戶名稱。
- 私密金鑰:輸入您稍早產生及下載的 JSON 金鑰中的 private_key 值。(您應以 PEM 格式輸入私密金鑰,並使用換行符號 (\n),例如
-----BEGIN PRIVATE KEY-----\nprivate_key\n-----END PRIVATE KEY-----\n
) - 記錄格式:選擇所需記錄格式 (例如 JSON)。
- 推送頻率:選取記錄檔的傳送頻率 (例如
every 60 seconds
)。
按一下「驗證並儲存」,驗證與目的地的連線,並儲存您提供的詳細資料。
按一下「下一步」,前往「摘要」分頁。
設定動態饋給
在 Google SecOps 平台中,有兩種不同的進入點可設定動態饋給:
- 「SIEM 設定」>「動態消息」
- 內容中心 > 內容包
使用 Google Cloud 儲存空間,依序前往「SIEM 設定」>「動態饋給」設定動態饋給
如要設定動態消息,請按照下列步驟操作:
- 依序前往「SIEM 設定」>「動態饋給」。
- 按一下「新增動態消息」。
- 在下一個頁面中,按一下「設定單一動態饋給」。
- 在「Feed name」(動態饋給名稱) 欄位中,輸入動態饋給的名稱 (例如「Akamai WAF Logs」)。
- 選取「Google Cloud Storage」做為「來源類型」。
- 選取「Akamai WAF」做為「記錄類型」。
- 按一下「Chronicle 服務帳戶」的「取得服務帳戶」。
- 點選「下一步」。
指定下列輸入參數的值:
- 儲存空間值區 URI:儲存空間值區網址 (例如
gs://akamai-waf-logs
)。 Google Cloud - 「URI Is A」(URI 為):選取「Directory which includes subdirectories」(包含子目錄的目錄)。
- 來源刪除選項:根據偏好設定選取刪除選項。
- 儲存空間值區 URI:儲存空間值區網址 (例如
點選「下一步」。
在「完成」畫面中檢查新的動態饋給設定,然後按一下「提交」。
從內容中心設定動態饋給
為下列欄位指定值:
- 儲存空間值區 URI:儲存空間值區網址 (例如
gs://akamai-waf-logs
)。 Google Cloud - 「URI Is A」(URI 為):選取「Directory which includes subdirectories」(包含子目錄的目錄)。
來源刪除選項:根據偏好設定選取刪除選項。
進階選項
- 動態饋給名稱:系統預先填入的值,用於識別動態饋給。
- 來源類型:將記錄收集到 Google SecOps 的方法。
- 資產命名空間:與動態饋給相關聯的命名空間。
- 擷取標籤:套用至這個動態饋給所有事件的標籤。
從 AWS S3 匯出及擷取 Akamai WAF 記錄
本節說明設定 Amazon S3 值區的初始步驟,以便接收及儲存 Akamai WAF 記錄。
設定 Amazon S3 儲存貯體
- 按照這份使用者指南建立 Amazon S3 值區:建立值區。
- 儲存值區「名稱」和「區域」,以供日後參考。
- 請按照這份使用者指南建立使用者:建立 IAM 使用者。
- 選取建立的「使用者」。
- 選取「安全憑證」分頁標籤。
- 在「Access Keys」部分中,按一下「Create Access Key」。
- 選取「第三方服務」做為「用途」。
- 點選「下一步」。
- 選用:新增說明標記。
- 按一下「建立存取金鑰」。
- 按一下「下載 CSV 檔案」,儲存「存取金鑰」和「私密存取金鑰」,以供日後參考。
- 按一下 [完成]。
- 選取「權限」分頁標籤。
- 在「權限政策」部分中,按一下「新增權限」。
- 選取「新增權限」。
- 選取「直接附加政策」。
- 搜尋「AmazonS3FullAccess」AmazonS3FullAccess政策。
- 選取政策。
- 點選「下一步」。
- 按一下「新增權限」。
設定 Akamai WAF,將記錄傳送至 Amazon S3
- 登入 Akamai Control Center。
- 前往「安全性」部分。
- 選取「記錄」。
設定新的記錄檔傳送:
- 記錄來源:選取 WAF 設定。
- 目的地:選擇「Amazon S3」。
- S3 值區:指定您建立的 S3 值區名稱。
- 地區:選取 S3 值區所在的 AWS 地區。
- 存取金鑰 ID 和私密存取金鑰:提供您產生的憑證。
- 記錄格式:選擇所需記錄格式 (例如 JSON)。
傳送頻率:選取記錄傳送頻率 (例如「每 5 分鐘」)。
確認記錄傳送的情形:
- 設定 LDS 後,請監控 S3 bucket 是否有傳入的記錄檔。
使用 AWS S3,透過 SIEM 設定 > 動態饋給設定動態饋給
如要設定動態消息,請按照下列步驟操作:
- 依序前往「SIEM 設定」>「動態饋給」。
- 按一下「新增動態消息」。
- 在下一個頁面中,按一下「設定單一動態饋給」。
- 在「Feed name」(動態饋給名稱) 欄位中,輸入動態饋給的名稱 (例如「Akamai WAF Logs」)。
- 選取「Amazon S3」做為「來源類型」。
- 選取「Akamai WAF」做為「記錄類型」。
- 點選「下一步」。
指定下列輸入參數的值:
- 區域:Amazon S3 值區所在的區域。
- S3 URI:值區 URI。
s3:/BUCKET_NAME
取代下列項目:BUCKET_NAME
:值區名稱。
- 「URI is a」:根據記錄串流設定選取 URI 類型:「Single file」|「Directory」|「Directory which includes subdirectories」。
- 來源刪除選項:根據偏好設定選取刪除選項。
- 存取金鑰 ID:具有 S3 bucket 存取權的使用者存取金鑰。
- 存取密鑰:具有 S3 bucket 存取權的使用者私密金鑰。
點選「下一步」。
在「完成」畫面中檢查新的動態饋給設定,然後按一下「提交」。
UDM 對應表
記錄欄位 (遞增) | UDM 對應 | 邏輯 |
---|---|---|
attackData.clientIP |
principal.ip 、principal.asset.ip |
發出要求的用戶端 IP 位址。從 akamai_siem 記錄檔的 attackData.clientIP 欄位擷取。 |
attackData.configId |
metadata.product_log_id |
安全性設定 ID。從 akamai_siem 記錄檔的 attackData.configId 欄位擷取。也新增為 security_result 物件中的 detection_field。 |
attackData.policyId |
不適用 | 用於剖析器邏輯,以 PolicyId:[value] 值填入 security_result.summary 。 |
attackData.ruleActions |
security_result.action 、security_result.action_details |
根據觸發的規則採取的動作。從 akamai_siem 記錄檔的 attackData.ruleActions 欄位擷取。「deny」會對應至 BLOCK,其他值 (「alert」、「monitor」、「allow」、「tarpit」) 則會對應至 ALLOW。原始值也會儲存在 action_details 中。 |
attackData.ruleData |
security_result.detection_fields |
與觸發規則相關聯的資料。從 akamai_siem 記錄檔的 attackData.ruleData 欄位擷取。已新增至 security_result.detection_fields ,並使用「RuleData」鍵。 |
attackData.ruleMessages |
security_result.threat_name |
與觸發規則相關聯的訊息。從 akamai_siem 記錄檔的 attackData.ruleMessages 欄位擷取。 |
attackData.ruleSelectors |
security_result.detection_fields |
與觸發規則相關聯的選取器。從 akamai_siem 記錄檔的 attackData.ruleSelectors 欄位擷取。已新增至 security_result.detection_fields ,金鑰為「RuleSelector」。 |
attackData.ruleTags |
security_result.category_details |
與觸發規則相關聯的標記。從 akamai_siem 記錄檔的 attackData.ruleTags 欄位擷取。 |
attackData.ruleVersions |
security_result.detection_fields |
觸發的規則版本。從 akamai_siem 記錄檔的 attackData.ruleVersions 欄位擷取。已新增至 security_result.detection_fields ,並使用「規則版本」鍵。 |
clientReputation |
principal.labels |
客戶信譽資訊。從 akamai_siem 記錄檔的 clientReputation 欄位擷取。以「reputation」為鍵,新增為主體的標籤。 |
cliIP 、cli_ip 、principal_ip |
principal.ip 、principal.asset.ip |
用戶端 IP 位址,視記錄格式而定,從 cliIP 、cli_ip 或 principal_ip 擷取。 |
cp |
additional.fields |
CP 代碼。從「cp 」欄位擷取。已新增至 additional.fields ,索引鍵為「cp」。 |
eventId |
metadata.product_log_id |
活動 ID。從「eventId 」欄位擷取。 |
eventTime 、log_date |
metadata.event_timestamp |
事件時間戳記。視記錄格式而定,可從 eventTime 擷取或從 log_date 剖析。 |
eventType.eventDefinition.eventDefinitionId |
target.resource.product_object_id |
事件定義 ID。摘錄自「eventType.eventDefinition.eventDefinitionId 」。 |
eventType.eventDefinition.eventDescription |
metadata.description |
活動說明。摘錄自「eventType.eventDefinition.eventDescription 」。 |
eventType.eventDefinition.eventName |
metadata.product_event_type |
活動名稱。摘錄自「eventType.eventDefinition.eventName 」。 |
eventType.eventTypeId |
additional.fields |
事件類型 ID。摘錄自「eventType.eventTypeId 」。已新增至 additional.fields ,索引鍵為「eventTypeId」。 |
eventType.eventTypeName |
additional.fields |
事件類型名稱。摘錄自「eventType.eventTypeName 」。已新增至 additional.fields ,並使用「eventTypeName」鍵。 |
format |
不適用 | 剖析器會使用這項資訊判斷記錄格式。 |
geo.asn |
principal.location.name |
自治系統編號 (ASN)。視記錄格式而定,從 geo.asn 或 AkamaiSiemASN 擷取。值的前置字串為「ASN 」。 |
geo.city |
principal.location.city |
市區鄉鎮。視記錄格式而定,從 geo.city 或 AkamaiSiemCity 擷取。 |
geo.country |
principal.location.country_or_region |
國家/地區。視記錄格式而定,從 geo.country 或 AkamaiSiemContinent 擷取。 |
httpMessage.bytes |
network.sent_bytes |
HTTP 訊息中傳送的位元組數。摘錄自「httpMessage.bytes 」。 |
httpMessage.host |
target.hostname 、target.asset.hostname |
主機名稱。視記錄格式而定,從 httpMessage.host 或 reqHost 擷取。 |
httpMessage.method |
network.http.method |
HTTP 方法。視記錄格式而定,從 httpMessage.method 、network_http_method 或 reqMethod 擷取。轉換為大寫。 |
httpMessage.path |
target.url |
要求路徑。視記錄格式而定,從 httpMessage.path 、target_url 或 reqPath 擷取。如果存在 httpMessage.query ,則會以「?」分隔符號附加至路徑。 |
httpMessage.port |
target.port |
通訊埠。視記錄格式而定,從 httpMessage.port 或 reqPort 擷取。 |
httpMessage.protocol |
不適用 | 剖析器會使用這項屬性判斷通訊協定。 |
httpMessage.query |
不適用 | 用於剖析器邏輯,在存在時附加至 httpMessage.path 。 |
httpMessage.requestId |
network.session_id |
要求 ID。視記錄格式而定,從 httpMessage.requestId 或 reqId 擷取。 |
httpMessage.requestHeaders 、AkamaiSiemRequestHeaders |
additional.fields |
要求標頭。視記錄格式而定,從 httpMessage.requestHeaders 或 AkamaiSiemRequestHeaders 擷取。已新增至「additional.fields 」,金鑰為「AkamaiSiemRequestHeaders」。 |
httpMessage.responseHeaders 、AkamaiSiemResponseHeaders |
additional.fields |
回應標頭。視記錄格式而定,從 httpMessage.responseHeaders 或 AkamaiSiemResponseHeaders 擷取。已新增至 additional.fields ,並使用「AkamaiSiemResponseHeaders」鍵。 |
httpMessage.status 、AkamaiSiemResponseStatus 、network_http_response_code 、statusCode |
network.http.response_code |
HTTP 回應代碼。視記錄格式而定,從 httpMessage.status 、AkamaiSiemResponseStatus 、network_http_response_code 或 statusCode 擷取。 |
httpMessage.tls 、AkamaiSiemTLSVersion 、tlsVersion |
network.tls.version |
傳輸層安全標準 (TLS) 版本。視記錄格式而定,從 httpMessage.tls 、AkamaiSiemTLSVersion 或 tlsVersion 擷取。 |
httpMessage.useragent 、network_http_user_agent 、UA 、useragent |
network.http.user_agent |
使用者代理程式。視記錄格式而定,從 httpMessage.useragent 、network_http_user_agent 、UA 或 useragent 擷取。 |
log_description |
metadata.description |
記錄說明。摘錄自「log_description 」。 |
log_rule |
security_result.rule_name |
記錄規則。摘錄自「log_rule 」。 |
message |
不適用 | 原始記錄訊息。剖析器會使用這項屬性進行各種擷取作業。 |
network_http_referral_url |
network.http.referral_url |
HTTP 參照網址。摘錄自「network_http_referral_url 」。 |
proto |
不適用 | 用於剖析器邏輯,在沒有 attackData.policyId 的情況下填入 security_result.summary 。 |
reqHost |
target.hostname 、target.asset.hostname |
要求主機。摘錄自「reqHost 」。 |
reqId |
metadata.product_log_id 、network.session_id |
要求 ID。摘錄自「reqId 」。 |
reqMethod |
network.http.method |
要求方法。摘錄自「reqMethod 」。 |
reqPath |
target.url |
要求路徑。摘錄自「reqPath 」。 |
reqPort |
target.port |
要求通訊埠。摘錄自「reqPort 」。 |
rspContentType |
target.file.mime_type |
回應內容類型。摘錄自「rspContentType 」。 |
securityRules |
security_result.rule_name 、security_result.about.resource.attribute.labels |
安全性規則。摘錄自「securityRules 」。第一部分會對應至 rule_name ,其餘部分則會以「non_deny_rules」和「deny_rule_format」鍵新增為標籤。 |
statusCode |
network.http.response_code |
狀態碼。摘錄自「statusCode 」。 |
state |
principal.location.state 、target.user.personal_address.state |
州/省,摘錄自「state 」。 |
tlsVersion |
network.tls.version |
傳輸層安全標準 (TLS) 版本。摘錄自「tlsVersion 」。 |
type |
metadata.product_event_type |
活動類型。摘錄自「type 」。 |
UA |
network.http.user_agent |
使用者代理程式。摘錄自「UA 」。 |
version |
metadata.product_version 、principal.asset.software.version |
版本。摘錄自「version 」。 |
不適用 | metadata.event_timestamp |
事件時間戳記衍生自 akamai_lds 記錄中的 _ts 欄位、akamai_siem 記錄中的 httpMessage.start 欄位,或其他格式中的 log_date 欄位。 |
不適用 | metadata.vendor_name |
已硬式編碼為「Akamai」。 |
不適用 | metadata.product_name |
硬式編碼為「Kona」。 |
不適用 | metadata.log_type |
硬式編碼為「AKAMAI_WAF」。 |
不適用 | network.application_protocol |
如果是 akamai_siem 和 akamai_lds 記錄,請設為「HTTP」;如果是其他格式,請設為「DNS」。 |
不適用 | security_result.severity |
如果是「alert」動作,請設為 MEDIUM;如果是「deny」動作,請設為 CRITICAL;如果是其他動作,請設為 HIGH。 |
不適用 | event.idm.read_only_udm.metadata.event_type |
如為大多數記錄格式,請設為「NETWORK_HTTP」;如為含有 eventId 或 eventData 欄位的事件,請設為「GENERIC_EVENT」;如為含有 cli_ip 或 p_ip 但沒有 reqHost 的事件,請設為「STATUS_UPDATE」。 |
還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求答案。