

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

# 確定 VPC 的安全要求
<a name="vpc-security-requirements"></a>

**重要**  
最佳實務是在測試環境中設計和測試 VPC 的輸出流量安全架構。在開發環境中測試架構變更可降低產生意外系統行為的風險。

在變更網路輸出流量模式之前，了解應用程式按預期運作所需的流量模式非常重要。此資訊可協助您識別在重新架構網路時允許的流量模式，以及拒絕的流量模式。

若要分析 VPC 的現有輸出流量模式，請先開啟 [VPC 流程日誌](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html)。然後，使用測試環境在各種使用案例中執行應用程式，並分析流程日誌中的模擬流量。

VPC 流量日誌會記錄 VPC 的輸入和輸出 IP 流量。然後，Amazon VPC 會將日誌傳送至 Amazon Simple Storage Service (Amazon S3) 或 Amazon CloudWatch。可以使用下列任一工具來檢視和分析日誌：
+ (對於 Amazon S3) Amazon Athena
+ (對於 CloudWatch) CloudWatch Logs Insights

如需更多資訊和查詢範例，請參閱下列內容：
+ [查詢 Amazon VPC 流程日誌](https://docs.aws.amazon.com/athena/latest/ug/vpc-flow-logs.html) (*Amazon Athena 使用者指南*)
+ [如何搭配使用 CloudWatch Logs Insights 查詢與 VPC 流程日誌？](https://aws.amazon.com/premiumsupport/knowledge-center/vpc-flow-logs-and-cloudwatch-logs-insights/) (*AWS 知識中心*)
+ [CloudWatch Logs Insights 查詢語法](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax.html) (*Amazon CloudWatch Logs 使用者指南*)

如需有關 VPC 流程日誌擷取之資訊類型的詳細資訊，請參閱《Amazon VPC 使用者指南**》中的[流程日誌記錄範例](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs-records-examples.html)。

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

## 使用 VPC 流量日誌時分析 VPC 輸出流量的最佳實務
<a name="best-practices-outbound-traffic-analysis"></a>

使用 Amazon Athena 或 CloudWatch Logs Insights 查詢來分析 VPC 流程日誌時，請務必執行以下操作：
+ 識別和分析流經與應用程式所使用資源附接的[彈性網路介面](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html)的輸入和輸出流量。
+ 識別和分析流經與 NAT 閘道附接的網路介面的應用程式流量。
+ 請確定擷取網路介面的所有輸出流量，方法是將查詢中的來源地址設為網路介面的私有 IP 地址。
+ 撰寫查詢，僅專注於非預期的流量模式。(例如，如果應用程式與第三方實體 (例如 HTTPS API 端點) 進行通訊，則您可以建構查詢以便不包含這些實體。)
+ 調查每個連接埠和目的地 IP 地址的有效性。(例如，對於堡壘主機或使用 SSH 從 Git 中複製儲存庫的主機，輸出目的地連接埠 22 可能是正常的。)

**注意**  
如果您是第一次使用 Amazon Athena，請務必設定查詢結果位置。如需指示，請參閱《Amazon Athena 使用者指南**》中的[使用 Athena 主控台指定查詢結果位置](https://docs.aws.amazon.com/athena/latest/ug/querying.html#query-results-specify-location-console)。

*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 使用者指南**》中的[流量日誌記錄](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html#flow-log-records)。

*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 | 