如何使用 Athena 分析 Amazon VPC 流程日誌?

3 分的閱讀內容
0

我想使用 Amazon Athena 分析 Amazon Virtual Private Cloud (Amazon VPC) 流程日誌。

簡短描述

您可以使用 Athena 主控台查詢編輯器來建立資料庫為 VPC 流程日誌建立資料表,以及執行範例查詢。使用流程日誌來分析網路流量模式,並識別 Amazon VPC 網路中的威脅與風險。

解決方法

使用 Athena 主控台查詢編輯器建立資料庫

請完成下列步驟:

  1. 開啟 Athena console query editor (Athena 主控台查詢編輯器)。
  2. 執行下列命令:
    CREATE DATABASE test_db_vpclogs;
    **注意:**將 test_db_vpclogs 替換為您的資料庫名稱。

**重要:**最佳做法是在儲存流程日誌的 Amazon Simple Storage Service (Amazon S3) 儲存貯體所在的相同 AWS 區域中建立資料庫。

在資料庫中為流程日誌建立資料表

請完成下列步驟:

  1. Athena 主控台查詢編輯器中,執行下列命令:
    CREATE EXTERNAL TABLE `vpcflow_logs`(  
     `version` int,  
     `resource_type` string,  
     `account_id` string,  
     `tgw_id` string,  
     `tgw_attachment_id` string,  
     `tgw_src_vpc_account_id` string,  
     `tgw_dst_vpc_account_id` string,  
     `tgw_src_vpc_id` string,  
     `tgw_dst_vpc_id` string,  
     `tgw_src_subnet_id` string,  
     `tgw_dst_subnet_id` string,  
     `tgw_src_eni` string,  
     `tgw_dst_eni` string,  
     `tgw_src_az_id` string,  
     `tgw_dst_az_id` string,  
     `tgw_pair_attachment_id` string,  
     `srcaddr` string,  
     `dstaddr` string,  
     `srcport` int,  
     `dstport` int,  
     `protocol` bigint,  
     `packets` bigint,  
     `bytes` bigint,  
     `start` bigint,  
     `end` bigint,  
     `log_status` string,  
     `type` string,  
     `packets_lost_no_route` bigint,  
     `packets_lost_blackhole` bigint,  
     `packets_lost_mtu_exceeded` bigint,  
     `packets_lost_ttl_expired` bigint,  
     `tcp_flags` int,  
     `region` string,  
     `flow_direction` string,  
     `pkt_src_aws_service` string,  
     `pkt_dst_aws_service` string)  
    PARTITIONED BY (  
     `aws_region` string,  
     `log_time` string)  
    ROW FORMAT DELIMITED  
     FIELDS TERMINATED BY ' '  
    STORED AS INPUTFORMAT  
     'org.apache.hadoop.mapred.TextInputFormat'  
    OUTPUTFORMAT  
     'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'  
    LOCATION  
     's3://AWS_S3_BUCKET/awsexampleprefix/AWSLogs/AWS_ACCOUNT_NUMBER/vpcflowlogs/'  
    TBLPROPERTIES (  
     'projection.aws_region.type'='enum',  
     'projection.aws_region.values'='us-east-1,us-west-2,ap-southeast-2',  
     'projection.log_time.format'='yyyy/MM/dd',  
     'projection.log_time.range'='2025/01/01,NOW',  
     'projection.log_time.type'='date',  
     'projection.enabled'='true',  
     'skip.header.line.count'='1',  
     'storage.location.template'='s3://AWS_S3_BUCKET/awsexampleprefix/AWSLogs/AWS_ACCOUNT_NUMBER/vpcflowlogs/${aws_region}/${log_time}')
    **注意:**將 test_table_vpclogs 替換為您資料表的名稱。

修改 LOCATION 參數,以指向包含日誌資料的 Amazon S3 儲存貯體。根據資料中最早可用的日誌,設定 projection.log_time.range 的第一個值。例如,如果您的日誌從 2023 年 3 月 1 日開始,則將時間範圍設為 '2025/03/01,NOW'。根據日誌的實際開始日期修改值,以進行準確的資料投影。上述命令使用分區投影來建立資料表、分割資料表,並自動填入分區。如果 Amazon S3 中沒有投影的分區,則 Athena 仍然會投影該分區。最佳做法就是在查詢中使用分割的屬性。

在資料表上執行 SQL 陳述式以查詢流程日誌

使用 Athena 主控台查詢編輯器在資料表上執行 SQL 陳述式。您可以儲存查詢、檢視先前的查詢或下載 .csv 格式的查詢結果。

查詢範例

**注意:**在下列範例查詢中,將 test_table_vpclogs 替換為您資料表的名稱。根據您的使用案例修改欄值和其他變數。

若要依照時間順序查看指定時間段內的前 100 個流程日誌項目,請執行下列查詢:

SELECT *  FROM test_table_vpclogs   
 WHERE day >= '2021/02/01' AND day < '2021/02/28'   
 ORDER BY day ASC   
 LIMIT 100;

若要查看指定時間段內接收 HTTP 封包數量前十的伺服器,請執行下列查詢:

SELECT SUM(packets) AS packetcount,  
        dstaddr  
FROM test_table_vpclogs  
WHERE dstport = 443  
  AND day >= '2021/03/01'  
  AND day < '2021/03/31'  
GROUP BY dstaddr  
ORDER BY packetcount DESC  
LIMIT 10;

**注意:**上述查詢會計算 HTTPS 連接埠 443 上接收到的封包數目,並依目標 IP 位址將它們分組。然後,查詢會傳回前一週的前 10 個項目。

若要檢查指定時間範圍內建立的日誌,請執行下列查詢:

SELECT interface_id,         
       srcaddr,  
       action,  
       protocol,  
       to_iso8601(from_unixtime(start)) AS start_time,  
       to_iso8601(from_unixtime("end")) AS end_time  
FROM test_table_vpclogs  
WHERE DAY >= '2021/04/01'  
  AND DAY < '2021/04/30';

若要檢視指定時間範圍內特定來源 IP 位址的流程日誌,請執行下列查詢:

SELECT *FROM test_table_vpclogs  
WHERE srcaddr = '10.117.1.22'  
  AND day >= '2021/02/01'  
  AND day < '2021/02/28';

若要列出指定時間範圍內遭拒絕的 TCP 連線,請執行下列查詢:

SELECT day,         
interface_id,  
       srcaddr,  
       action,  
       protocol  
FROM test_table_vpclogs  
WHERE action = 'REJECT'   
    AND protocol = 6   
    AND day >= '2021/02/01' AND day < '2021/02/28'  
LIMIT 10;

若要檢視以 10.117 開頭之 IP 位址範圍的流程日誌,請執行下列查詢:

SELECT *FROM test_table_vpclogs  
WHERE split_part(srcaddr,'.', 1)='10'  
  AND split_part(srcaddr,'.', 2) ='117'

若要檢視時間範圍內特定目的地 IP 位址的流程日誌,請執行下列查詢:

SELECT *FROM test_table_vpclogs  
WHERE dstaddr = '10.0.1.14'  
AND day >= '2021/01/01'  
AND day < '2021/01/31'

相關資訊

如何使用流程日誌監控 VPC 中的流量?

使用 Amazon Athena 和 Amazon QuickSight 分析 VPC 流程日誌

AWS 官方
AWS 官方已更新 22 天前