收集 AWS Lambda 函式記錄

支援的國家/地區:

本文說明如何使用 Amazon S3,將 AWS Lambda 函式記錄檔擷取至 Google Security Operations。

AWS Lambda 是一項無伺服器運算服務,可執行程式碼以因應事件,並自動管理基礎運算資源。Lambda 會自動將所有函式記錄 (平台記錄、擴充功能記錄和應用程式輸出內容) 傳送至 Amazon CloudWatch Logs,並為每個函式建立記錄群組。這項整合功能會使用 Amazon Data Firehose,將 CloudWatch Logs 中的 Lambda 記錄事件串流至 S3 值區,然後 Google SecOps 會使用 Amazon S3 V2 資訊提供擷取這些事件。

事前準備

請確認您已完成下列事前準備事項:

  • Google SecOps 執行個體
  • 具備管理下列項目的權限,可存取 AWS 管理主控台
    • AWS Lambda (函式、記錄設定)
    • Amazon CloudWatch Logs (記錄群組、訂閱篩選器)
    • Amazon Data Firehose (傳送串流)
    • Amazon S3 (儲存桶)
    • AWS IAM (角色、政策、使用者)

確認 Lambda 函式的 CloudWatch Logs 記錄群組

  • 首次叫用函式時,AWS Lambda 會自動為每個函式建立 CloudWatch Logs 記錄群組。預設記錄群組命名慣例如下:

    /aws/lambda/<function-name>
    

驗證方法:

  1. AWS 控制台中,依序前往「CloudWatch」>「Logs」>「Log groups」
  2. 搜尋 /aws/lambda/
  3. 確認要擷取記錄的每個 Lambda 函式都有記錄群組。

設定 AWS S3 儲存空間

  1. 按照這份使用者指南建立 Amazon S3 bucket建立 bucket
  2. 請儲存 bucket 的「名稱」和「區域」,以供日後參考 (例如 lambda-logs-to-secops)。

為 Amazon Data Firehose 設定 IAM 角色

Amazon Data Firehose 需要 IAM 角色,才能將記錄寫入 S3 bucket。

建立 IAM 政策

  1. AWS 控制台中,依序前往「IAM」>「Policies」>「Create policy」
  2. 選取「JSON」分頁標籤。
  3. 貼上下列政策 (將 lambda-logs-to-secops 替換為實際值區名稱):

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "S3Delivery",
                "Effect": "Allow",
                "Action": [
                    "s3:AbortMultipartUpload",
                    "s3:GetBucketLocation",
                    "s3:GetObject",
                    "s3:ListBucket",
                    "s3:ListBucketMultipartUploads",
                    "s3:PutObject"
                ],
                "Resource": [
                    "arn:aws:s3:::lambda-logs-to-secops",
                    "arn:aws:s3:::lambda-logs-to-secops/*"
                ]
            },
            {
                "Sid": "CloudWatchLogging",
                "Effect": "Allow",
                "Action": [
                    "logs:PutLogEvents"
                ],
                "Resource": "arn:aws:logs:*:*:log-group:/aws/kinesisfirehose/lambda-logs-to-secops:log-stream:*"
            }
        ]
    }
    
  4. 點選「下一步」

  5. 在「Policy name」(政策名稱) 欄位中輸入 LambdaLogsFirehoseS3Policy

  6. 點選「建立政策」

建立 IAM 角色

  1. 依序前往「IAM」>「角色」>「建立角色」
  2. 選取「自訂信任政策」
  3. 貼上下列信任政策:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "Service": "firehose.amazonaws.com"
                },
                "Action": "sts:AssumeRole"
            }
        ]
    }
    
  4. 點選「下一步」

  5. 搜尋並選取「LambdaLogsFirehoseS3Policy」LambdaLogsFirehoseS3Policy

  6. 點選「下一步」

  7. 在「角色名稱」欄位中輸入 LambdaLogsFirehoseToS3Role

  8. 按一下「建立角色」

建立 Amazon Data Firehose 串流

  1. 前往 https://console.aws.amazon.com/kinesis 開啟 Kinesis 控制台
  2. 在導覽窗格中,選取「Amazon Data Firehose」
  3. 按一下「建立 Firehose 串流」
  4. 在「選擇來源和目的地」下方,提供下列設定:
    • 來源:選取「直接 PUT」
    • 目的地:選取「Amazon S3」
  5. 在「Firehose stream name」(Firehose 串流名稱) 欄位中輸入 lambda-logs-to-secops
  6. 在「轉換記錄」下方的「從 Amazon CloudWatch Logs 解壓縮來源記錄」部分中:

    1. 選取「開啟解壓縮功能」
    2. 請「不要」選取「開啟訊息擷取功能」
  7. 在「目的地設定」下方:

    • S3 儲存貯體:選取 S3 儲存貯體 lambda-logs-to-secops
    • S3 bucket prefix (選用):輸入 lambda-logs/
    • S3 值區錯誤輸出前置字串 (選用):輸入 firehose-errors/
  8. 在「緩衝區提示」下方:

    • 緩衝區大小5 MiB (預設)。
    • 緩衝區間隔300 秒 (預設)。
  9. 在「進階設定」下方,完成下列操作:

    • 伺服器端加密:選用。如需加密,請啟用這項設定。
    • 錯誤記錄:選取「已啟用」 (建議)。
    • 權限:選取「選擇現有的 IAM 角色」,然後選取 LambdaLogsFirehoseToS3Role
  10. 按一下「建立 Firehose 串流」

  11. 等待串流「狀態」顯示為「有效」

設定 CloudWatch Logs 的 IAM 角色

CloudWatch Logs 需要 IAM 角色,才能將記錄資料傳送至 Firehose 串流。

建立 IAM 政策

  1. 依序前往「IAM」>「Policies」>「Create policy」
  2. 選取「JSON」分頁標籤。
  3. 貼上下列政策 (將 <region><account-id> 替換為您的 AWS 區域和帳戶 ID):

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "firehose:PutRecord",
                    "firehose:PutRecordBatch"
                ],
                "Resource": "arn:aws:firehose:<region>:<account-id>:deliverystream/lambda-logs-to-secops"
            }
        ]
    }
    
  4. 點選「下一步」

  5. 在「Policy name」(政策名稱) 欄位中輸入 LambdaLogsCWLtoFirehosePolicy

  6. 點選「建立政策」

建立 IAM 角色

  1. 依序前往「IAM」>「角色」>「建立角色」
  2. 選取「自訂信任政策」
  3. 貼上下列信任政策 (將 <region> 替換成您的 AWS 區域):

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "Service": "logs.<region>.amazonaws.com"
                },
                "Action": "sts:AssumeRole"
            }
        ]
    }
    
  4. 點選「下一步」

  5. 搜尋並選取「LambdaLogsCWLtoFirehosePolicy」LambdaLogsCWLtoFirehosePolicy

  6. 點選「下一步」

  7. 在「角色名稱」欄位中輸入 LambdaLogsCWLtoFirehoseRole

  8. 按一下「建立角色」

建立 CloudWatch Logs 訂閱篩選器

  1. AWS 控制台中,依序前往「CloudWatch」>「Logs」>「Log groups」
  2. 選取記錄群組 /aws/lambda/<function-name>
  3. 選取「訂閱篩選條件」分頁標籤。
  4. 依序點選「建立」> 建立 Amazon Data Firehose 訂閱篩選器
  5. 請提供下列設定詳細資料:
    • 目的地:選取 Firehose 串流 lambda-logs-to-secops
    • 授予權限:選取 LambdaLogsCWLtoFirehoseRole 角色。
    • 訂閱篩選器名稱:輸入描述性名稱 (例如 lambda-logs-to-secops-filter)。
    • 記錄格式:選取「其他」
    • 訂閱篩選模式:留空即可傳送所有 Lambda 函式記錄事件。
  6. 按一下「開始串流播放」

為 Google SecOps 設定 IAM 使用者

Google SecOps 需要具備 S3 值區存取權的 IAM 使用者,才能擷取傳送的記錄。

  1. 請按照這份使用者指南建立使用者建立 IAM 使用者
  2. 選取建立的「使用者」
  3. 選取「安全憑證」分頁標籤。
  4. 在「Access Keys」部分中,按一下「Create Access Key」
  5. 選取「第三方服務」做為「用途」
  6. 按一下「下一步」
    • 新增說明標記 (如有需要)。
  7. 按一下「建立存取金鑰」
  8. 按一下「Download .csv file」(下載 .csv 檔案),儲存「Access Key」(存取金鑰) 和「Secret Access Key」(私密存取金鑰),以供日後參考。
  9. 按一下 [完成]
  10. 選取「權限」分頁標籤。
  11. 在「權限政策」部分中,按一下「新增權限」
  12. 選取「新增權限」
  13. 選取「直接附加政策」
  14. 搜尋「AmazonS3FullAccess」AmazonS3FullAccess政策。
  15. 選取政策。
  16. 點選「下一步」
  17. 按一下「Add permissions」。

在 Google SecOps 中設定動態饋給,擷取 AWS Lambda 函式記錄

  1. 依序前往「SIEM 設定」>「動態饋給」
  2. 按一下「新增動態消息」
  3. 在下一個頁面中,按一下「設定單一動態饋給」
  4. 輸入動態饋給名稱的專屬名稱。
  5. 選取「Amazon S3 V2」做為「來源類型」
  6. 選取「AWS Lambda Function」(AWS Lambda 函式) 做為「Log type」(記錄類型)
  7. 依序點按「繼續」和「提交」
  8. 為下列欄位指定值:
    • S3 URIs3://lambda-logs-to-secops/lambda-logs/
    • 來源刪除選項:根據偏好設定選取刪除選項
    • 檔案存在時間上限:包含在過去天數內修改的檔案 (預設為 180 天)
    • 存取金鑰 ID:具有 S3 值區存取權的使用者存取金鑰
    • 存取密鑰:具有 S3 bucket 存取權的使用者私密金鑰
    • 資產命名空間資產命名空間
    • 擷取標籤:要套用至這個動態饋給事件的標籤
  9. 依序點按「繼續」和「提交」

UDM 對應表

記錄欄位 UDM 對應 邏輯
Activity_id_label additional.fields 已合併
Arrays_label additional.fields 已合併
Name_label additional.fields 已合併
Type_1_label additional.fields 已合併
Type_id_label additional.fields 已合併
Type_label additional.fields 已合併
Uid_label additional.fields 已合併
Uid_label_1 additional.fields 已合併
Value_label additional.fields 已合併
__type_label additional.fields 已合併
attempts_label additional.fields 已合併
class_name_label additional.fields 已合併
contentType_label additional.fields 已合併
env_label additional.fields 已合併
extendedRequestId_label additional.fields 已合併
feature_name_label additional.fields 已合併
line_number_label additional.fields 已合併
logType_label additional.fields 已合併
product_name_label additional.fields 已合併
requestid_label additional.fields 已合併
sourceAccount_label additional.fields 已合併
stack_label additional.fields 已合併
totalRetryDelay_label additional.fields 已合併
vendor_name_label additional.fields 已合併
version_label additional.fields 已合併
has_principal extensions.auth.type 已對應:trueAUTHTYPE_UNSPECIFIED
description metadata.description 直接對應
file_desc metadata.description 直接對應
Time metadata.event_timestamp 剖析為 UNIX
time metadata.event_timestamp 剖析為 yyyy-MM-ddTHH:mm:ss.SSSZ
has_principal metadata.event_type 已對應:trueUSER_LOGINtrueNETWORK_HTTPtrueNETWORK_CONNECTION、`true...
has_principal_user metadata.event_type 已對應:trueUSER_RESOURCE_ACCESS
Api.Operation metadata.product_event_type 直接對應
name metadata.product_event_type 直接對應
Api.Request.Uid metadata.product_log_id 直接對應
id metadata.product_log_id 直接對應
meta_data.requestId metadata.product_log_id 直接對應
Metadata.Version metadata.product_version 直接對應
version metadata.product_version 直接對應
meta_data.httpStatusCode network.http.response_code 直接對應
Http_request.User_agent network.http.user_agent 直接對應
Actor.Invoked_by principal.administrative_domain 直接對應
Src_endpoint.Domain principal.asset.hostname 直接對應
Src_endpoint.Domain principal.hostname 直接對應
Cloud.Region principal.resource.attribute.cloud.availability_zone 直接對應
Actor.User.Name principal.user.userid 直接對應
Status security_result.action_details 直接對應
Category_name security_result.category_details 已合併
error security_result.description 直接對應
errorMessage security_result.description 直接對應
Metadata_uid_label security_result.detection_fields 已合併
category_uid_label security_result.detection_fields 已合併
class_uid_label security_result.detection_fields 已合併
errorType_label security_result.detection_fields 已合併
event_code_label security_result.detection_fields 已合併
fault_label security_result.detection_fields 已合併
functionName_label security_result.detection_fields 已合併
severity_id_label security_result.detection_fields 已合併
sourceArn_label security_result.detection_fields 已合併
type_name_label security_result.detection_fields 已合併
type_uid_label security_result.detection_fields 已合併
user_type_label security_result.detection_fields 已合併
Severity security_result.severity 已對應:InformationalINFORMATIONAL
severity security_result.severity 已對應:INFOINFORMATIONAL
msg security_result.summary 直接對應
Api.Service.Name target.application 直接對應
service target.application 直接對應
size target.file.size 直接對應
filename target.process.file.full_path 直接對應
Activity_name target.resource.name 直接對應
targetVar target.resource.name 直接對應
不適用 extensions.auth.type 常數:AUTHTYPE_UNSPECIFIED
不適用 metadata.event_type 常數:USER_UNCATEGORIZED
不適用 metadata.product_name 常數:AWS_Lambda_Function
不適用 metadata.vendor_name 常數:AWS_Lambda_Function
不適用 principal.resource.attribute.cloud.environment 常數:AMAZON_WEB_SERVICES
不適用 security_result.severity 常數:INFORMATIONAL

還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求答案。