收集 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
- 按照本使用指南建立 Amazon S3 值區:建立值區。
- 儲存 bucket 的「名稱」和「區域」,以供日後參考 (例如
aws-vpc-flowlogs
)。 - 請按照這份使用者指南建立使用者:建立 IAM 使用者。
- 選取建立的「使用者」。
- 選取「安全憑證」分頁標籤。
- 在「Access Keys」部分中,按一下「Create Access Key」。
- 選取「第三方服務」做為「用途」。
- 點選「下一步」。
- 選用:新增說明標記。
- 按一下「建立存取金鑰」。
- 按一下「下載 CSV 檔案」,儲存「存取金鑰」和「私密存取金鑰」以供日後參考。
- 按一下 [完成]。
- 選取 [權限] 分頁標籤。
- 在「權限政策」部分中,按一下「新增權限」。
- 選取「新增權限」。
- 選取「直接附加政策」。
- 搜尋「AmazonS3FullAccess」AmazonS3FullAccess政策。
- 選取政策。
- 點選「下一步」。
- 按一下「Add permissions」。
建立虛擬私有雲流量記錄 (目的地:Amazon S3,格式:文字)
- 開啟 AWS 控制台 > VPC > 您的 VPC/子網路/網路介面,然後選取要記錄的範圍。
- 依序點選「動作」> 建立流量記錄。
- 提供下列設定詳細資料:
- 篩選:根據政策選擇「全部」 (或「接受」/「拒絕」)。
- 匯總間隔上限:選取「1 分鐘」 (建議) 或「10 分鐘」。
- 目的地:傳送至 Amazon S3 儲存貯體。
- S3 值區 ARN:輸入上一節建立的值區名稱,格式如下:
arn:aws:s3:::<your-bucket>
。 - 記錄檔記錄格式:選取「AWS 預設格式」。
- 記錄檔格式:選取「文字 (純文字)」。
- 選用:除非需要,否則請停用 Hive 相容前置字元和每小時分割區。
- 按一下「建立流量記錄」。
在 Google SecOps 中設定資訊提供,以便擷取 AWS 虛擬私有雲流量記錄 (S3 文字)
- 依序前往「SIEM 設定」>「動態饋給」。
- 按一下「+ 新增動態消息」。
- 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如
AWS VPC Flow Logs - S3 (Text)
)。 - 選取「Amazon S3 V2」做為「來源類型」。
- 選取「AWS VPC Flow」做為「記錄類型」。
- 點選「下一步」。
- 指定下列輸入參數的值:
- S3 URI:輸入 S3 值區位址 (例如
s3://<your-bucket>/AWSLogs/<account-id>/vpcflowlogs/<region>/
)。 - 來源刪除選項:根據偏好設定選取刪除選項。
- 檔案存在時間上限:預設為 180 天。
- 存取金鑰 ID:具有 S3 值區存取權的使用者存取金鑰。
- 存取密鑰:具有 S3 bucket 存取權的使用者私密金鑰。
- 資產命名空間:資產命名空間。
- 擷取標籤:套用至這個動態饋給事件的標籤。
- S3 URI:輸入 S3 值區位址 (例如
- 點選「下一步」。
- 在「Finalize」畫面上檢查新的動態饋給設定,然後按一下「Submit」。
選項 2:使用 Amazon CloudWatch Logs 和 Kinesis Data Firehose 設定 AWS VPC 流量記錄匯出作業
設定將流量記錄傳送至 CloudWatch 後,這個選項會使用 Kinesis Data Firehose 將記錄資料串流至您選擇的目的地,提供額外的資料匯出層。
建立虛擬私有雲流量記錄 (目的地:Amazon CloudWatch Logs)
- 開啟 AWS 控制台 > VPC > 您的 VPC/子網路/網路介面。
- 依序點選「動作」> 建立流量記錄。
- 提供下列設定詳細資料:
- 篩選:根據政策選擇「全部」 (或「接受」/「拒絕」)。
- 匯總間隔上限:選取「1 分鐘」 (建議) 或「10 分鐘」。
- 目的地:選取「傳送至 CloudWatch Logs」。
- 目的地記錄群組:選取或建立記錄群組 (例如
/aws/vpc/flowlogs
)。 - IAM 角色:選取可寫入 CloudWatch Logs 的角色。
- 記錄格式:選取「AWS default」(AWS 預設) (第 2 版) 或「Custom」(自訂) (包含其他欄位)。
- 按一下「建立流量記錄」。
在 Google SecOps 中建立資訊動態,取得端點網址和密鑰
- 依序前往「SIEM 設定」>「動態饋給」。
- 按一下「+ 新增動態消息」。
- 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如
AWS VPC Flow Logs - CloudWatch via Firehose
)。 - 選取「Amazon Data Firehose」做為「來源類型」。
- 選取「AWS VPC Flow」做為「記錄類型」。
- 點選「下一步」。
- 指定下列輸入參數的值:
- 分割分隔符:選用
n
。 - 資產命名空間:資產命名空間 (例如
aws.vpc.flowlogs.cwl
)。 - 擷取標籤:要套用至這個動態饋給事件的標籤 (例如
source=vpc_flow_firehose
)。
- 分割分隔符:選用
- 點選「下一步」。
- 檢查動態饋給設定,然後按一下「提交」。
- 按一下「產生密鑰」,產生驗證這個動態饋給的密鑰。
- 複製並儲存密鑰,因為您無法再次查看這組密鑰。
- 前往「詳細資料」分頁。
- 從「端點資訊」欄位複製動態消息端點網址。
- 按一下 [完成]。
為 Amazon Data Firehose 動態饋給建立 API 金鑰
- 前往 Google Cloud 控制台的「憑證」頁面。
- 按一下「建立」憑證,然後選取「API 金鑰」。
- 複製金鑰並妥善儲存於安全的位置。
- 將 API 金鑰存取權限制為 Google SecOps API。
為 CloudWatch Logs 設為 Firehose 設定 IAM 權限
- 在 AWS Console 中,依序前往「IAM」>「Policies」>「Create policy」>「JSON」。
貼上下列政策 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" } ] }
為政策命名
CWLtoFirehoseWrite
,然後按一下「建立政策」。依序前往「IAM」>「角色」>「建立角色」。
選取「自訂信任政策」並貼上:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "logs.<region>.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
將政策
CWLtoFirehoseWrite
附加至角色。為角色命名
CWLtoFirehoseRole
,然後按一下「建立角色」。
將 Amazon Kinesis Data Firehose 設定為 Google SecOps
- 在 AWS 控制台中,依序前往「Kinesis」>「Data Firehose」>「Create delivery stream」。
- 提供下列設定詳細資料:
- 來源:選取「直接 PUT 或其他來源」。
- 目的地:選擇「HTTP 端點」。
- Name (名稱):
cwlogs-to-secops
- HTTP 端點網址:輸入 Google SecOps 提供的動態饋給 HTTPS 端點網址,並附加 API 金鑰:
<ENDPOINT_URL>?key=<API_KEY>
- HTTP 方法:選取「POST」。
- 在「存取金鑰」下方:
- 輸入 Google SecOps 動態饋給中產生的密鑰 (這會成為
X-Amz-Firehose-Access-Key
標頭)。 - 緩衝區提示:將「緩衝區大小」設為 1 MiB,將「緩衝區間隔」設為 60 秒。
- 壓縮:選取「已停用」。
- S3 備份:選取「已停用」。
- 將「retry」(重試) 和「logging」(記錄) 設定保留為「default」(預設)。
- 輸入 Google SecOps 動態饋給中產生的密鑰 (這會成為
- 按一下「建立傳送串流」。
將 CloudWatch Logs 群組訂閱至 Firehose 串流
- 依序前往 CloudWatch > Logs > Log groups。
- 選取目標記錄群組 (例如
/aws/vpc/flowlogs
)。 - 開啟「訂閱項目篩選器」分頁,然後按一下「建立」。
- 選擇「建立 Amazon Kinesis Data Firehose 訂閱篩選器」。
- 提供下列設定詳細資料:
- 目的地:選取放送串流
cwlogs-to-secops
。 - 授予權限:選擇角色
CWLtoFirehoseRole
。 - 篩選條件名稱:輸入
all-events
。 - 篩選器模式:留空即可傳送所有事件。
- 目的地:選取放送串流
- 按一下「開始串流播放」。
選項 3:使用 Amazon S3 以 CSV 格式設定 AWS 虛擬私有雲流量記錄
將記錄轉換為 CSV 格式 (選用)
- 請確保 CSV 資料列遵循嚴格且一致的欄順序,與您在虛擬私有雲流量記錄自訂格式中選取的欄位相符 (例如標準 v2 欄位集,或您的 v5/v7 集)。除非剖析器選項需要標頭列,否則請勿在製作檔案中加入標頭列。
- 將 CSV 檔案寫入穩定前置字元,例如:
s3://<your-bucket>/vpcflowlogs-csv/<region>/year=<year>/month=<month>/day=<day>/
。
在 Google SecOps 中設定資訊提供,以便擷取 AWS 虛擬私有雲流量記錄 (CSV)
- 依序前往「SIEM 設定」>「動態饋給」。
- 按一下「+ 新增動態消息」。
- 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如
AWS VPC Flow Logs - S3 (CSV)
)。 - 選取「Amazon S3 V2」做為「來源類型」。
- 選取「AWS VPC Flow (CSV)」做為「記錄類型」。
- 點選「下一步」。
- 指定下列輸入參數的值:
- S3 URI:輸入 S3 值區位址 (例如
s3://<your-bucket>/vpcflowlogs-csv/<region>/
)。 - 來源刪除選項:根據偏好設定選取刪除選項。
- 檔案存在時間上限:預設為 180 天。
- 存取金鑰 ID:具有 S3 值區存取權的使用者存取金鑰。
- 存取密鑰:具有 S3 bucket 存取權的使用者私密金鑰。
- 資產命名空間:資產命名空間。
- 擷取標籤:套用至這個動態饋給事件的標籤。
- S3 URI:輸入 S3 值區位址 (例如
- 點選「下一步」。
- 在「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;如果 action 為 REJECT ,則對應至 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_direction 為 ingress ,則對應至「入境」;如果 flow_direction 為 egress ,則對應至「出境」。 |
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 專業人員尋求答案。