本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
確定 VPC 的安全要求
重要
最佳實務是在測試環境中設計和測試 VPC 的輸出流量安全架構。在開發環境中測試架構變更可降低產生意外系統行為的風險。
在變更網路輸出流量模式之前,了解應用程式按預期運作所需的流量模式非常重要。此資訊可協助您識別在重新架構網路時允許的流量模式,以及拒絕的流量模式。
若要分析 VPC 的現有輸出流量模式,請先開啟 VPC 流程日誌。然後,使用測試環境在各種使用案例中執行應用程式,並分析流程日誌中的模擬流量。
VPC 流量日誌會記錄 VPC 的輸入和輸出 IP 流量。然後,Amazon VPC 會將日誌傳送至 Amazon Simple Storage Service (Amazon S3) 或 Amazon CloudWatch。可以使用下列任一工具來檢視和分析日誌:
(對於 Amazon S3) Amazon Athena
(對於 CloudWatch) CloudWatch Logs Insights
如需更多資訊和查詢範例,請參閱下列內容:
查詢 Amazon VPC 流程日誌 (Amazon Athena 使用者指南)
CloudWatch Logs Insights 查詢語法 (Amazon CloudWatch Logs 使用者指南)
如需有關 VPC 流程日誌擷取之資訊類型的詳細資訊,請參閱《Amazon VPC 使用者指南》中的流程日誌記錄範例。
注意
VPC 流程日誌不會擷取應用程式層 (第 7 層) 資訊,例如 DNS 主機名稱。如果您的安全要求需要對應用程式層資料進行分析,可以部署 AWS Network Firewall
使用 VPC 流量日誌時分析 VPC 輸出流量的最佳實務
使用 Amazon Athena 或 CloudWatch Logs Insights 查詢來分析 VPC 流程日誌時,請務必執行以下操作:
識別和分析流經與應用程式所使用資源附接的彈性網路介面的輸入和輸出流量。
識別和分析流經與 NAT 閘道附接的網路介面的應用程式流量。
請確定擷取網路介面的所有輸出流量,方法是將查詢中的來源地址設為網路介面的私有 IP 地址。
撰寫查詢,僅專注於非預期的流量模式。(例如,如果應用程式與第三方實體 (例如 HTTPS API 端點) 進行通訊,則您可以建構查詢以便不包含這些實體。)
調查每個連接埠和目的地 IP 地址的有效性。(例如,對於堡壘主機或使用 SSH 從 Git 中複製儲存庫的主機,輸出目的地連接埠 22 可能是正常的。)
注意
如果您是第一次使用 Amazon Athena,請務必設定查詢結果位置。如需指示,請參閱《Amazon Athena 使用者指南》中的使用 Athena 主控台指定查詢結果位置。
Amazon Athena 查詢範例
從特定網路介面傳回輸出管理流量的 Athena 查詢範例
下列 Athena 查詢會從 IP 地址為 10.100.0.10 的網路介面傳回前 200 行輸出管理流量:
SELECT * FROM "<vpc_flow_logs_table_name>" WHERE interface_id = 'eni-1234567890000000' AND srcaddr LIKE '10.100.0.10' AND dstport < 1024 LIMIT 200;
輸出範例
# |
1 |
version |
2 |
account_id |
<account-id> |
interface_id |
eni-123456789000000 |
srcaddr |
10.32.0.10 |
dstaddr |
11.22.33.44 |
srcport |
36952 |
dstport |
443 |
protocol |
6 |
packets |
25 |
位元組 |
5445 |
start |
1659310200 |
end |
1659310225 |
動作 |
ACCEPT |
log_status |
OK |
date |
2022-07-16 |
注意
此模式中的輸出為了演示目的已格式化,在您的系統上可能會有所不同。
Athena 查詢範例會傳回從特定 VPC 中接收最多流量的外部 IP 地址
下列 Athena 查詢會傳回從 VPC (CIDR 區塊以 '10.32' 開頭) 中接收最多輸出流量的外部 IP 地址和連接埠:
SELECT dstport, dstaddr, count(*) AS count FROM "<vpc_flow_logs_table_name>" WHERE dstaddr not like '10.32%' AND interface_id = 'eni-1234567890000000' GROUP BY dstport, dstaddr ORDER BY count desc LIMIT 200;
輸出範例
# | Dstport | Dstaddr | count |
1 | 443 | 52.x.x.x | 1442 |
2 | 443 | 63.x.x.x | 1201 |
3 | 443 | 102.x.x.x | 887 |
從特定 VPC 中傳回被拒絕的輸出流量的 Athena 查詢範例
下列 Athena 查詢會從 VPC (CIDR 區塊以 '10.32' 開頭) 中傳回被拒絕的輸出流量:
SELECT * FROM "<vpc_flow_logs_table_name>" WHERE srcaddr like '10.32%' AND action LIKE 'REJECT'
輸出範例
# |
1 |
version |
2 |
account_id |
<account-id> |
interface_id |
eni-123456789000000 |
srcaddr |
10.32.0.10 |
dstaddr |
11.22.33.44 |
srcport |
36952 |
dstport |
443 |
protocol |
6 |
packets |
25 |
位元組 |
5445 |
start |
1659310200 |
end |
1659310225 |
動作 |
REJECT |
log_status |
OK |
date |
2022-07-16 |
注意
此模式中的輸出為了演示目的已格式化,在您的系統上可能會有所不同。
如需有關如何解譯 Athena 查詢結果的詳細資訊,請參閱《Amazon VPC 使用者指南》中的流量日誌記錄。
CloudWatch Logs Insights 查詢範例
從特定網路介面傳回輸出管理流量的 CloudWatch Logs Insights 查詢範例
下列 CloudWatch Logs Insights 查詢會從 IP 地址為 10.100.0.10 的網路介面傳回前 200 個輸出管理流量結果:
fields @timestamp, @message | filter interfaceId = 'eni-1234567890000000' | filter srcAddr = '10.100.0.10' | filter dstPort < 1024 | limit 200
輸出範例
欄位 | Value |
@ingestionTime | 1659310250813 |
@log | <account-id>:/aws/vpc/flowlogs |
@logStream | eni-123456789000000-all |
@message | 2 <account-id> eni-123456789000000 10.100.0.10 11.22.33.44 36952 443 6 25 5445 1659310200 1659310225 ACCEPT OK |
@timestamp | 1659310200000 |
accountId | <account-id> |
動作 | ACCEPT |
位元組 | 5445 |
dstAddr | 11.22.33.44 |
dstPort | 443 |
end | 1659310225 |
interfaceId | eni-123456789000000 |
logStatus | OK |
packets | 25 |
protocol | 6 |
srcAddr | 10.100.0.10 |
srcPort | 36952 |
入門 | 1659310200 |
version | 2 |
CloudWatch Logs Insights 查詢範例會傳回從特定 VPC 中接收最多流量的外部 IP 地址
下列 CloudWatch Logs Insights 查詢會傳回從 VPC (CIDR 區塊以 '10.32' 開頭) 中接收最多輸出流量的外部 IP 地址和連接埠:
filter @logstream = 'eni-1234567890000000' | stats count(*) as count by dstAddr, dstPort | filter dstAddr not like '10.32' | order by count desc | limit 200
輸出範例
# | dstAddr | dstPort | count |
1 | 52.x.x.x | 443 | 439 |
2 | 51.79.x.x | 63.x.x.x | 25 |
從特定 VPC 中傳回被拒絕的輸出流量的 CloudWatch Logs Insights 查詢範例
下列 CloudWatch Logs Insights 查詢會從 VPC (CIDR 區塊以 '10.32' 開頭) 中傳回被拒絕的輸出流量:
filter @logstream = 'eni-0123456789000000' | fields @timestamp, @message | filter action='REJECT'
輸出範例
欄位 | Value |
@ingestionTime | 1666991000899 |
@log | <account-id>:/aws/vpc/flowlogs |
@logStream | eni-0123456789000000-all |
@message | 2 <account-id> 'eni-0123456789000000' 185.x.x.x 10.10.2.222 55116 11211 17 1 43 1666990939 1666990966 REJECT OK |
@timestamp | 1666990939000 |
accountId | <account-id> |
動作 | REJECT |
位元組 | 43 |
dstAddr | 10.10.2.222 |
dstPort | 11211 |
end | 1666990966 |
interfaceId | 'eni-0123456789000000' |
logStatus | OK |
packets | 1 |
protocol | 17 |
srcAddr | 185.x.x.x |
srcPort | 55116 |
入門 | 1666990939 |
version | 2 |