確定 VPC 的安全要求 - AWS 方案指引

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

確定 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

如需更多資訊和查詢範例,請參閱下列內容:

如需有關 VPC 流程日誌擷取之資訊類型的詳細資訊,請參閱《Amazon VPC 使用者指南》中的流程日誌記錄範例

注意

VPC 流程日誌不會擷取應用程式層 (第 7 層) 資訊,例如 DNS 主機名稱。如果您的安全要求需要對應用程式層資料進行分析,可以部署 AWS Network Firewall 來擷取所需的詳細資訊。如需詳細資訊,請參閱本指南中使用 AWS Network Firewall 和 DNS 主機名稱限制 VPC 的傳出流量一節。

使用 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