收集 AWS 虛擬私有雲流量記錄

支援的國家/地區:

本文說明如何使用三種不同方法,將 AWS VPC 流量記錄擷取至 Google Security Operations:Amazon S3 (文字格式)、Amazon CloudWatch Logs with Kinesis Data Firehose,以及 Amazon S3 中的 CSV 格式。AWS VPC Flow Logs 是一項功能,可讓您擷取 VPC 中網路介面的 IP 流量資訊。整合這項資源,即可將這些記錄傳送至 Google SecOps 進行分析和監控。

支援的 AWS 虛擬私有雲流量記錄格式

Google SecOps 支援以兩種主要文字格式擷取 AWS VPC 流量記錄:

  • JSON 格式AWS_VPC_FLOW 記錄類型會剖析 JSON 格式的記錄。在這個格式中,每個記錄項目都包含鍵和對應的值,因此資料本身就具有說明性。
  • CSV 格式:Google SecOps 也提供 CSV 格式的 AWS VPC 流程記錄剖析器。這個格式只會在標題列中列出欄位鍵一次,後續列只會包含以半形逗號分隔的值。

由於 CSV 格式不會在每個記錄項目中加入欄位鍵,因此 AWS_VPC_FLOW_CSV 剖析器會依據預先定義的嚴格值順序。CSV 檔案必須遵守下列欄位順序,才能正確剖析:

   Version,Account_id,Interface_id,Srcaddr,Dstaddr,Srcport,Dstport,Protocol,Packets,Bytes,Start,End,Action,Log_status,Vpc_id,Subnet_id,Instance_id,Tcp_flags,Type,Pkt_srcaddr,Pkt_dstaddr,Region,Az_id,Sublocation_type,Sublocation_id,Pkt_src_aws_service,Pkt_dst_aws_service,Flow_direction,Traffic_path,Ecs_cluster_arn,Ecs_cluster_name,Ecs_container_instance_arn,Ecs_container_instance_id,Ecs_container_id,Ecs_second_container_id,Ecs_service_name,Ecs_task_definition_arn,Ecs_task_arn,Ecs_task_id

以下是 CSV 記錄行的範例:

   7,369096419186,eni-0520bb5efed19d33a,10.119.32.34,10.119.223.3,51256,16020,6,14,3881,1723542839,1723542871,ACCEPT,OK,vpc-0769a6844ce873a6a,subnet-0cf9b2cb32f49f258,i-088d6080f45f5744f,0,IPv4,10.119.32.34,10.119.223.3,ap-northeast-1,apne1-az4,-,-,-,-,ingress,,-,-,-,-,-,-,-,-,-,-

如果欄位沒有可用的值,請傳遞空白值 (例如 , ,),以維持 CSV 資料列中的正確位置順序。

事前準備

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

  • Google SecOps 執行個體。
  • AWS 的特殊存取權。

選項 1:使用 AWS S3 (文字格式) 設定 AWS 虛擬私有雲流量記錄匯出功能

下一節將說明如何設定 Amazon S3 和 Identity and Access Management 權限,以便匯出虛擬私有雲流量記錄,供 Google SecOps 分析。

為 Google SecOps 設定 AWS S3 值區和 IAM

  1. 按照本使用指南建立 Amazon S3 值區建立值區
  2. 儲存 bucket 的「名稱」和「區域」,以供日後參考 (例如 aws-vpc-flowlogs)。
  3. 請按照這份使用者指南建立使用者建立 IAM 使用者
  4. 選取建立的「使用者」
  5. 選取「安全憑證」分頁標籤。
  6. 在「Access Keys」部分中,按一下「Create Access Key」
  7. 選取「第三方服務」做為「用途」
  8. 點選「下一步」
  9. 選用:新增說明標記。
  10. 按一下「建立存取金鑰」
  11. 按一下「下載 CSV 檔案」,儲存「存取金鑰」和「私密存取金鑰」以供日後參考。
  12. 按一下 [完成]
  13. 選取 [權限] 分頁標籤。
  14. 在「權限政策」部分中,按一下「新增權限」
  15. 選取「新增權限」
  16. 選取「直接附加政策」
  17. 搜尋「AmazonS3FullAccess」AmazonS3FullAccess政策。
  18. 選取政策。
  19. 點選「下一步」
  20. 按一下「Add permissions」。

建立虛擬私有雲流量記錄 (目的地:Amazon S3,格式:文字)

  1. 開啟 AWS 控制台 > VPC > 您的 VPC/子網路/網路介面,然後選取要記錄的範圍。
  2. 依序點選「動作」> 建立流量記錄
  3. 提供下列設定詳細資料:
    • 篩選:根據政策選擇「全部」 (或「接受」/「拒絕」)。
    • 匯總間隔上限:選取「1 分鐘」 (建議) 或「10 分鐘」
    • 目的地傳送至 Amazon S3 儲存貯體
    • S3 值區 ARN:輸入上一節建立的值區名稱,格式如下:arn:aws:s3:::<your-bucket>
    • 記錄檔記錄格式:選取「AWS 預設格式」
    • 記錄檔格式:選取「文字 (純文字)」
    • 選用:除非需要,否則請停用 Hive 相容前置字元每小時分割區
  4. 按一下「建立流量記錄」

在 Google SecOps 中設定資訊提供,以便擷取 AWS 虛擬私有雲流量記錄 (S3 文字)

  1. 依序前往「SIEM 設定」>「動態饋給」
  2. 按一下「+ 新增動態消息」
  3. 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如 AWS VPC Flow Logs - S3 (Text))。
  4. 選取「Amazon S3 V2」做為「來源類型」
  5. 選取「AWS VPC Flow」做為「記錄類型」
  6. 點選「下一步」
  7. 指定下列輸入參數的值:
    • S3 URI:輸入 S3 值區位址 (例如 s3://<your-bucket>/AWSLogs/<account-id>/vpcflowlogs/<region>/)。
    • 來源刪除選項:根據偏好設定選取刪除選項。
    • 檔案存在時間上限:預設為 180 天。
    • 存取金鑰 ID:具有 S3 值區存取權的使用者存取金鑰。
    • 存取密鑰:具有 S3 bucket 存取權的使用者私密金鑰。
    • 資產命名空間資產命名空間
    • 擷取標籤:套用至這個動態饋給事件的標籤。
  8. 點選「下一步」
  9. 在「Finalize」畫面上檢查新的動態饋給設定,然後按一下「Submit」

選項 2:使用 Amazon CloudWatch Logs 和 Kinesis Data Firehose 設定 AWS VPC 流量記錄匯出作業

設定將流量記錄傳送至 CloudWatch 後,這個選項會使用 Kinesis Data Firehose 將記錄資料串流至您選擇的目的地,提供額外的資料匯出層。

建立虛擬私有雲流量記錄 (目的地:Amazon CloudWatch Logs)

  1. 開啟 AWS 控制台 > VPC > 您的 VPC/子網路/網路介面
  2. 依序點選「動作」> 建立流量記錄
  3. 提供下列設定詳細資料:
    • 篩選:根據政策選擇「全部」 (或「接受」/「拒絕」)。
    • 匯總間隔上限:選取「1 分鐘」 (建議) 或「10 分鐘」
    • 目的地:選取「傳送至 CloudWatch Logs」
    • 目的地記錄群組:選取或建立記錄群組 (例如 /aws/vpc/flowlogs)。
    • IAM 角色:選取可寫入 CloudWatch Logs 的角色。
    • 記錄格式:選取「AWS default」(AWS 預設) (第 2 版) 或「Custom」(自訂) (包含其他欄位)。
  4. 按一下「建立流量記錄」

在 Google SecOps 中建立資訊動態,取得端點網址和密鑰

  1. 依序前往「SIEM 設定」>「動態饋給」
  2. 按一下「+ 新增動態消息」
  3. 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如 AWS VPC Flow Logs - CloudWatch via Firehose)。
  4. 選取「Amazon Data Firehose」做為「來源類型」
  5. 選取「AWS VPC Flow」做為「記錄類型」
  6. 點選「下一步」
  7. 指定下列輸入參數的值:
    • 分割分隔符:選用 n
    • 資產命名空間資產命名空間 (例如 aws.vpc.flowlogs.cwl)。
    • 擷取標籤:要套用至這個動態饋給事件的標籤 (例如 source=vpc_flow_firehose)。
  8. 點選「下一步」
  9. 檢查動態饋給設定,然後按一下「提交」
  10. 按一下「產生密鑰」,產生驗證這個動態饋給的密鑰。
  11. 複製儲存密鑰,因為您無法再次查看這組密鑰。
  12. 前往「詳細資料」分頁。
  13. 從「端點資訊」欄位複製動態消息端點網址。
  14. 按一下 [完成]

為 Amazon Data Firehose 動態饋給建立 API 金鑰

  1. 前往 Google Cloud 控制台的「憑證」頁面。
  2. 按一下「建立」憑證,然後選取「API 金鑰」
  3. 複製金鑰並妥善儲存於安全的位置。
  4. 將 API 金鑰存取權限制為 Google SecOps API

為 CloudWatch Logs 設為 Firehose 設定 IAM 權限

  1. AWS Console 中,依序前往「IAM」>「Policies」>「Create policy」>「JSON」
  2. 貼上下列政策 JSON,並將 <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/cwlogs-to-secops"
       }
    ]
    }
    
  3. 為政策命名 CWLtoFirehoseWrite,然後按一下「建立政策」

  4. 依序前往「IAM」>「角色」>「建立角色」

  5. 選取「自訂信任政策」並貼上:

    {
    "Version": "2012-10-17",
    "Statement": [
       {
          "Effect": "Allow",
          "Principal": {
          "Service": "logs.<region>.amazonaws.com"
          },
          "Action": "sts:AssumeRole"
       }
    ]
    }
    
  6. 將政策 CWLtoFirehoseWrite 附加至角色。

  7. 為角色命名 CWLtoFirehoseRole,然後按一下「建立角色」

將 Amazon Kinesis Data Firehose 設定為 Google SecOps

  1. AWS 控制台中,依序前往「Kinesis」>「Data Firehose」>「Create delivery stream」
  2. 提供下列設定詳細資料:
    • 來源:選取「直接 PUT 或其他來源」
    • 目的地:選擇「HTTP 端點」
    • Name (名稱):cwlogs-to-secops
    • HTTP 端點網址:輸入 Google SecOps 提供的動態饋給 HTTPS 端點網址,並附加 API 金鑰:<ENDPOINT_URL>?key=<API_KEY>
    • HTTP 方法:選取「POST」
  3. 在「存取金鑰」下方:
    • 輸入 Google SecOps 動態饋給中產生的密鑰 (這會成為 X-Amz-Firehose-Access-Key 標頭)。
    • 緩衝區提示:將「緩衝區大小」設為 1 MiB,將「緩衝區間隔」設為 60 秒
    • 壓縮:選取「已停用」
    • S3 備份:選取「已停用」
    • 將「retry」(重試) 和「logging」(記錄) 設定保留為「default」(預設)
  4. 按一下「建立傳送串流」

將 CloudWatch Logs 群組訂閱至 Firehose 串流

  1. 依序前往 CloudWatch > Logs > Log groups
  2. 選取目標記錄群組 (例如 /aws/vpc/flowlogs)。
  3. 開啟「訂閱項目篩選器」分頁,然後按一下「建立」
  4. 選擇「建立 Amazon Kinesis Data Firehose 訂閱篩選器」
  5. 提供下列設定詳細資料:
    • 目的地:選取放送串流 cwlogs-to-secops
    • 授予權限:選擇角色 CWLtoFirehoseRole
    • 篩選條件名稱:輸入 all-events
    • 篩選器模式:留空即可傳送所有事件。
  6. 按一下「開始串流播放」

選項 3:使用 Amazon S3 以 CSV 格式設定 AWS 虛擬私有雲流量記錄

將記錄轉換為 CSV 格式 (選用)

  1. 請確保 CSV 資料列遵循嚴格且一致的欄順序,與您在虛擬私有雲流量記錄自訂格式中選取的欄位相符 (例如標準 v2 欄位集,或您的 v5/v7 集)。除非剖析器選項需要標頭列,否則請在製作檔案中加入標頭列。
  2. 將 CSV 檔案寫入穩定前置字元,例如:s3://<your-bucket>/vpcflowlogs-csv/<region>/year=<year>/month=<month>/day=<day>/

在 Google SecOps 中設定資訊提供,以便擷取 AWS 虛擬私有雲流量記錄 (CSV)

  1. 依序前往「SIEM 設定」>「動態饋給」
  2. 按一下「+ 新增動態消息」
  3. 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如 AWS VPC Flow Logs - S3 (CSV))。
  4. 選取「Amazon S3 V2」做為「來源類型」
  5. 選取「AWS VPC Flow (CSV)」做為「記錄類型」
  6. 點選「下一步」
  7. 指定下列輸入參數的值:
    • S3 URI:輸入 S3 值區位址 (例如 s3://<your-bucket>/vpcflowlogs-csv/<region>/)。
    • 來源刪除選項:根據偏好設定選取刪除選項。
    • 檔案存在時間上限:預設為 180 天。
    • 存取金鑰 ID:具有 S3 值區存取權的使用者存取金鑰。
    • 存取密鑰:具有 S3 bucket 存取權的使用者私密金鑰。
    • 資產命名空間資產命名空間
    • 擷取標籤:套用至這個動態饋給事件的標籤。
  8. 點選「下一步」
  9. 在「Finalize」畫面上檢查新的動態饋給設定,然後按一下「Submit」

UDM 對應表

記錄欄位 UDM 對應 邏輯
accountId read_only_udm.metadata.product_log_id 從原始記錄欄位 accountId 擷取的值。
動作 read_only_udm.security_result.action_details 從原始記錄欄位 action 擷取的值。
動作 read_only_udm.security_result.action 如果 action 為 ACCEPT,則對應至 ALLOW;如果 actionREJECT,則對應至 BLOCK。
az_id read_only_udm.principal.cloud.availability_zone 從原始記錄欄位 az_id 擷取的值。
位元組 read_only_udm.network.received_bytes 從原始記錄欄位 bytes 擷取的值。
dstaddr read_only_udm.target.ip 從原始記錄欄位 dstaddr 擷取的值。
dstport read_only_udm.target.port 從原始記錄欄位 dstport 擷取的值。
end_time read_only_udm.about.resource.attribute.labels.value 從原始記錄欄位 end_time 擷取的值。
end_time read_only_udm.metadata.ingested_timestamp 從原始記錄欄位 end_time 擷取的值。
flow_direction read_only_udm.network.direction 如果 flow_directioningress,則對應至「入境」;如果 flow_directionegress,則對應至「出境」。
InstanceID read_only_udm.principal.cloud.project.id 從原始記錄欄位 InstanceID 擷取的值。
interfaceId read_only_udm.about.resource.attribute.labels.value 從原始記錄欄位 interfaceId 擷取的值。
logStatus read_only_udm.about.resource.attribute.labels.value 從原始記錄欄位 logStatus 擷取的值。
封包 read_only_udm.about.resource.attribute.labels.value 從原始記錄欄位 packets 擷取的值。
pkt_dst_aws_service read_only_udm.about.resource.attribute.labels.value 從原始記錄欄位 pkt_dst_aws_service 擷取的值。
pkt_dstaddr read_only_udm.intermediary.ip 從原始記錄欄位 pkt_dstaddr 擷取的值。
pkt_srcaddr read_only_udm.intermediary.ip 從原始記錄欄位 pkt_srcaddr 擷取的值。
pkt_src_aws_service read_only_udm.about.resource.attribute.labels.value 從原始記錄欄位 pkt_src_aws_service 擷取的值。
通訊協定 read_only_udm.network.ip_protocol 如果 protocol 為 6,則對應至 TCP;如果 protocol 為 17,則對應至 UDP;否則對應至 UNKNOWN_IP_PROTOCOL。
區域 read_only_udm.principal.location.country_or_region 從原始記錄欄位 Region 擷取的值。
srcaddr read_only_udm.principal.ip 從原始記錄欄位 srcaddr 擷取的值。
srcport read_only_udm.principal.port 從原始記錄欄位 srcport 擷取的值。
start_time read_only_udm.about.resource.attribute.labels.value 從原始記錄欄位 start_time 擷取的值。
start_time read_only_udm.metadata.event_timestamp 從原始記錄欄位 start_time 擷取的值。
SubnetID read_only_udm.about.resource.attribute.labels.value 從原始記錄欄位 SubnetID 擷取的值。
tcp_flags read_only_udm.about.resource.attribute.labels.value 從原始記錄欄位 tcp_flags 擷取的值。
traffic_path read_only_udm.about.resource.attribute.labels.value 從原始記錄欄位 traffic_path 擷取的值。
version read_only_udm.metadata.product_version 從原始記錄欄位 version 擷取的值。
vpcID read_only_udm.principal.cloud.vpc.id 從原始記錄欄位 vpcID 擷取的值。
read_only_udm.metadata.vendor_name 硬式編碼為 AMAZON
read_only_udm.metadata.product_name 硬式編碼為 AWS VPC Flow
read_only_udm.metadata.log_type 硬式編碼為 AWS_VPC_FLOW
read_only_udm.metadata.event_type 如果 dstaddr 不為空白,則會對應至 NETWORK_CONNECTION,否則會對應至 GENERIC_EVENT

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