

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

# 對 VPC 網路進行故障診斷
<a name="vpc-troubleshooting-guide"></a>

**Topics**
+ [網路監控和故障診斷](#vpc-network-monitoring-troubleshooting)
+ [組態疑難排解](#vpc-configuration-troubleshooting)

## 網路監控和故障診斷
<a name="vpc-network-monitoring-troubleshooting"></a>

### CloudTrail 日誌記錄
<a name="vpc-cloudtrail"></a>

使用 VPC 聯網執行的所有組態 API 操作和工作流程都會記錄在 CloudTrail 中。使用 CloudTrail 稽核組態變更，並追蹤哪些執行使用 VPC 聯網。

### 使用 ENI 流程日誌進行故障診斷
<a name="vpc-flow-logs-troubleshooting"></a>

當您的工作流程透過網際網路執行存取外部資源時，您可以使用 VPC 流程日誌來驗證連線並診斷問題。HealthOmics 會在您的 VPC 子網路中佈建彈性網路介面 (ENIs)，以路由來自工作流程任務的流量。透過檢查這些 ENIs上的流程日誌，您可以追蹤往返外部目的地的網路流量。

**VPC 流程日誌的成本管理**  
VPC 流程日誌可能會產生大量成本，尤其是在 VPC 層級。若要將成本降至最低：  
**故障診斷後刪除流程日誌。**解決連線問題後，請刪除流程日誌以停止產生費用。
**使用 Amazon S3 而非 CloudWatch Logs 進行長期儲存。**Amazon S3 儲存體比 CloudWatch Logs 便宜許多。如果您需要保留日誌以進行合規或安全分析，請將流程日誌設定為發佈至 Amazon S3。
**設定 CloudWatch Logs 保留政策。**如果使用 CloudWatch Logs，請設定自動日誌過期 （例如 7 天），以防止無限期儲存成本。
**使用 ENI 層級的流程日誌進行故障診斷。**對於一次性偵錯，請在特定客戶 ENI 上建立流程日誌，而不是整個 VPC。

#### 設定流程日誌以進行疑難排解
<a name="vpc-flow-logs-setup"></a>

**選項 1：VPC 層級流程日誌 （用於持續監控）**

在 VPC 上啟用流程日誌，以自動擷取來自所有 HealthOmics 工作流程執行的流量。當您有許多工作流程執行，並希望在未追蹤個別 ENIs的情況下獲得全面的可見性時，這是最佳的。

1. **啟用 VPC 流程日誌。**在 Amazon VPC 主控台中：

   1. 選擇**您的 VPCs**然後選取 HealthOmics 組態中使用的 VPC

   1. 選擇**流程日誌**索引標籤

   1. 選擇**建立流程日誌**

   1. 設定流程日誌以擷取**所有**流量 （接受和拒絕）

   1. 選取 CloudWatch Logs 做為目的地，以便於查詢

1. **啟動工作流程執行。**啟動啟用 VPC 聯網的工作流程執行。記下稍後篩選流程日誌的執行 ID 和開始時間。

依時段、目的地 IP 或流量模式使用 CloudWatch Logs Insights 查詢流程日誌。您不需要識別特定的 ENI IDs。

**選項 2：ENI 層級流程日誌 （用於目標故障診斷）**

當您帳戶中只有幾個 HealthOmics ENIs 時，啟用特定 ENIs的流程日誌。這是最具成本效益的方法，可讓您輕鬆隔離特定工作流程執行的流量。

1. **尋找客戶 ENI。**在 Amazon EC2 主控台中：

   1. 選擇**網路界面**

   1. 依標籤篩選`Service: HealthOmics`，僅顯示 HealthOmics 建立ENIs 

   1. 或者，根據您的 HealthOmics 組態中的子網路 ID 進一步篩選

   1. 請注意 ENI ID 和私有 IP 地址

1. **在 ENI 上啟用流程日誌。**

   1. 選取 ENI，然後選擇**流程日誌**索引標籤

   1. 選擇**建立流程日誌**

   1. 設定流程日誌以擷取**所有**流量

   1. 選取 CloudWatch Logs 做為目的地

**注意**  
流程日誌只會擷取啟用時的流量。對於 VPC 層級的流程日誌，請在執行工作流程之前啟用它們。對於在 ENI 上啟用的 ENI 層級流程日誌，相同的流程日誌會擷取使用該 ENI 之所有未來工作流程執行的流量。

#### 了解 VPC 流程日誌格式
<a name="vpc-flow-logs-analyzing"></a>

VPC 流程日誌使用空格分隔格式搭配下列欄位：

```
version account_id interface_id srcaddr dstaddr srcport dstport protocol packets bytes start end action log_status
```

**欄位描述：**
+ **版本** — 流程日誌格式版本 （通常為 2)
+ **account\_id** — AWS 您的帳戶 ID
+ **interface\_id** — ENI ID （例如 eni-0e57c5476efeac402)
+ **srcaddr** — 來源 IP 地址
+ **dstaddr** — 目的地 IP 地址
+ **srcport** — 來源連接埠號碼
+ **dstport** — 目的地連接埠號碼
+ **通訊協定** — IANA 通訊協定編號 (6=TCP、17=UDP、1=ICMP)
+ **封包** — 流程中的封包數量
+ **位元組** — 流程中的位元組數
+ **start** — 流程開始時間 (Unix 時間戳記）
+ **結束** — 流程結束時間 (Unix 時間戳記）
+ **動作** — 接受或拒絕
+ **log\_status** — OK、NODATA 或 SKIPDATA

**流程日誌項目範例：**

```
2 074296239033 eni-0e57c5476efeac402 10.0.130.58 13.226.238.96 40565 443 6 13 1502 1774338927 1774338929 ACCEPT OK
2 074296239033 eni-0e57c5476efeac402 13.226.238.96 10.0.130.58 443 40565 6 8 1024 1774338928 1774338930 ACCEPT OK
```

這些項目會顯示成功的雙向 HTTPS 通訊。金鑰 IPs：**10.0.130.58** 是 HealthOmics 在您帳戶中建立的客戶 ENI，而 **13.226.238.96 **是工作流程正在存取的外部公有網域。第一個項目是傳出流量，第二個項目是傳回流量。兩者都顯示 ACCEPT，表示安全群組允許流量。

#### 在 CloudWatch Logs Insights 中查詢流程日誌
<a name="vpc-flow-logs-querying"></a>

當流程日誌發佈至 CloudWatch Logs 時，請使用 CloudWatch Logs Insights 來查詢和分析資料。

**尋找遭拒的流量 （從這裡開始）**

```
fields @timestamp, interfaceId, srcAddr, dstAddr, srcPort, dstPort, protocol, action
| filter action = "REJECT"
| sort @timestamp desc
```

如果傳回結果，您可能會遇到連線問題。拒絕的項目會顯示安全群組或網路 ACLs 正在封鎖哪些流量。

**尋找特定外部 IP 的流量**

首先，使用 `nslookup`或 將網域解析為 IP 地址`dig`：

```
$ nslookup ftp.ncbi.nlm.nih.gov
Server:  127.53.53.53
Address: 127.53.53.53#53

Non-authoritative answer:
ftp.ncbi.nlm.nih.gov    canonical name = ftp.wip.ncbi.nlm.nih.gov.
Name:    ftp.wip.ncbi.nlm.nih.gov
Address: 130.14.250.10
Name:    ftp.wip.ncbi.nlm.nih.gov
Address: 130.14.250.11
```

頂端的「伺服器」和「地址」是您的 DNS 解析程式。「非授權回答」(130.14.250.10 和 130.14.250.11) 下的地址是網域的實際 IPs。

使用字首查詢流程日誌，以符合該範圍內的任何 IP：

```
fields @timestamp, interfaceId, srcAddr, dstAddr, srcPort, dstPort, protocol, action
| filter dstAddr like "130.14.250"
| sort @timestamp desc
```

這符合從 130.14.250 開始的任何 IP，擷取到該子網路中所有 IPs流量。

**尋找通往外部目的地的 HTTPS 流量**

```
fields @timestamp, interfaceId, srcAddr, dstAddr, srcPort, dstPort, protocol, action
| filter dstPort = 443 and protocol = 6
| filter not (dstAddr like /^10\./ or dstAddr like /^172\./ or dstAddr like /^192\.168\./)
| sort @timestamp desc
```

第二個篩選條件排除私有 IP 範圍，僅顯示通往外部 （公有） 目的地的流量。

**注意**  
通訊協定編號：6=TCP、17=UDP、1=ICMP。對於負載平衡的服務 （例如 CloudFront)，DNS 可能會傳回不同的 IPs，因此依目的地連接埠篩選而非 IP 地址。

#### 常見的流程日誌模式和問題
<a name="vpc-flow-logs-common-issues"></a>

**已拒絕傳出流量**  

```
Outbound: 2 074296239033 eni-0e57c5476efeac402 10.0.130.58 13.226.238.96 40565 443 6 1 60 1774338927 1774338929 REJECT OK
```
**原因：**安全群組不允許傳出流量到目的地連接埠或 IP 範圍。  
**解決方案：**將傳出規則新增至您的安全群組：  
+ 對於 HTTPS：允許 TCP 連接埠 443 到 0.0.0.0/0
+ 對於 HTTP：允許 TCP 連接埠 80 到 0.0.0.0/0
+ 對於更廣泛的存取：允許所有 TCP/UDP 到 0.0.0.0/0

**傳回流量遭拒**  

```
Outbound: 2 074296239033 eni-0e57c5476efeac402 10.0.130.58 8.8.8.8 54321 53 17 1 64 1774338927 1774338929 ACCEPT OK
Return:   2 074296239033 eni-0e57c5476efeac402 8.8.8.8 10.0.130.58 53 54321 17 1 64 1774338928 1774338930 REJECT OK
```
**原因：**網路 ACL 正在封鎖傳回流量。與安全群組 （有狀態） 不同，網路 ACLs 是無狀態的，需要兩個方向的明確規則。  
**解決方案：**在 VPC 主控台中，檢查子網路的網路 ACL 並確認傳入規則允許來自外部來源的暫時性連接埠 ((1024-65535) 流量。視需要新增規則：從 0.0.0.0/0 允許 TCP/UDP 連接埠 1024-65535 

**遺失傳回流量**  

```
Outbound: 2 074296239033 eni-0e57c5476efeac402 10.0.130.58 8.8.8.8 54321 53 17 1 64 1774338927 1774338929 ACCEPT OK
```
**原因：**NAT Gateway/Internet Gateway 未正確設定，或 ENI 無法連線至網際網路。  
**解決方案**：  
+ 確認路由表具有 NAT Gateway 的路由 (0.0.0.0/0 → nat-xxxxx)
+ 使用彈性 IP 驗證 NAT 閘道處於可用狀態
+ 檢查 NAT Gateway 是否位於具有網際網路閘道路由的公有子網路中

**沒有預期流量的流程日誌項目**  
**原因：**流量未到達 ENI，或流量日誌未正確設定。  
**解決方案**：  
+ 確認流程日誌已啟用並設定為擷取所有流量
+ 檢查 CloudWatch Logs 中的工作流程日誌，以確認工作流程嘗試存取外部資源
+ 確認路由表具有 NAT Gateway 的路由 (0.0.0.0/0 → nat-xxxxx)
+ 使用彈性 IP 驗證 NAT 閘道處於可用狀態

#### 流程日誌疑難排解的最佳實務
<a name="vpc-flow-logs-best-practices"></a>

1. **在開始故障診斷之前啟用流程日誌。**流程日誌只會擷取啟用時的流量。在執行工作流程之前，在 HealthOmics 組態中的所有子網路上啟用它們。

1. **使用 CloudWatch Logs Insights 進行分析。**CloudWatch Logs Insights 為流程日誌提供強大的查詢功能。儲存常用的查詢以快速存取。

1. **依時段篩選。**將流程日誌查詢縮小到工作流程執行作用中的特定時段，以減少雜訊並改善查詢效能。

1. **尋找流量的兩個方向。**一律確認傳出和傳回流量都顯示 ACCEPT。連線需要雙向通訊。

1. **記錄您的問題清單。**疑難排解連線問題時，請記錄客戶 ENI ID、IP 地址、連接埠和流程日誌項目。此資訊對於支援案例和未來的故障診斷非常有用。

1. **首先使用簡單的工作流程進行測試。**在執行複雜的工作流程之前，請使用嘗試存取外部資源並記錄結果的簡單工作流程來測試連線能力。這有助於隔離網路問題與工作流程邏輯問題。

## 組態疑難排解
<a name="vpc-configuration-troubleshooting"></a>

### 組態卡在 CREATING 狀態
<a name="vpc-ts-creating-status"></a>

**原因：**網路資源佈建可能需要幾分鐘的時間。

**解決方案：**等待最多 10 分鐘。如果狀態未變更為 ACTIVE，請檢查下列項目：
+ 您的子網路和安全群組存在，且位於相同的 VPC 中。
+ 您擁有必要的 IAM 許可。
+ 已成功建立服務連結角色。

### 執行無法從 VPC 聯網開始
<a name="vpc-ts-run-fails"></a>

**原因：**組態可能不是 ACTIVE，或可能有網路連線問題。

**解決方案**：
+ 使用 驗證組態狀態為 ACTIVE`GetConfiguration`。
+ 檢查安全群組規則是否允許所需的傳出流量。
+ 確保子網路位於 HealthOmics 運作所在的可用區域中。

### 無法刪除組態
<a name="vpc-ts-delete-config"></a>

**原因：**啟用的工作流程執行正在使用組態。

**解決方案：**等待使用組態完成所有執行，然後重試刪除。

### 無法刪除服務連結角色
<a name="vpc-ts-delete-slr"></a>

**原因：**您的帳戶中存在作用中 VPC 組態。

**解決方案：**先刪除所有 VPC 組態，然後刪除服務連結角色。

### 工作流程無法連線至外部資源
<a name="vpc-ts-connectivity"></a>

**原因：**安全群組或路由表組態錯誤。

**解決方案**：

1. 啟用 VPC 流程日誌以識別遭拒的封包

1. 檢查安全群組傳出規則允許流向目的地的流量

1. 確認路由表具有 NAT Gateway 的路由 (0.0.0.0/0 → nat-xxxxxx)

1. 對於跨區域 AWS 服務存取，請確保可以連接目的地區域

1. 測試來自相同子網路中 Amazon EC2 執行個體的連線

### 網路效能問題
<a name="vpc-ts-performance"></a>

**徵狀：**資料傳輸緩慢或工作流程逾時。

**原因：**網路輸送量限制或 NAT Gateway 飽和度。

**解決方案**：
+ 網路輸送量從每個 ENI 的 10 Gbps 開始，並在 60 分鐘內以持續的流量擴展至 100 Gbps
+ 如需具有立即高輸送量需求的工作流程，請聯絡 AWS Support
+ 在 CloudWatch 中監控 NAT Gateway 指標以識別飽和度
+ 考慮在多個可用區域中部署其他 NAT 閘道，以提高輸送量

### 工作流程無法連線到網際網路
<a name="vpc-ts-no-internet"></a>

**原因：**私有子網路可能沒有 NAT 閘道的路由，或安全群組規則可能封鎖傳出流量。

**解決方案**：
+ 確認私有子網路的路由表包含 NAT 閘道的路由 (0.0.0.0/0 → nat-xxxxxxxxx)。
+ 檢查安全群組規則是否允許所需連接埠上的傳出流量。
+ 確認 NAT 閘道位於具有網際網路閘道路由的公有子網路中。

### 工作流程執行失敗並發生連線錯誤
<a name="vpc-ts-connectivity-errors"></a>

**原因：**網路流量可能遭到封鎖或設定錯誤。

**解決方案**：

1. 使用 驗證組態是否仍處於 ACTIVE 狀態`GetConfiguration`。

1. 在 VPC 的 ENIs 上建立 VPC 流程日誌，以檢查流量。如需詳細資訊，請參閱「Amazon VPC 使用者指南」**中的 [VPC 流程日誌](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html)。

1. 檢查流程日誌是否有 REJECT 項目。如果您看到遭到拒絕的封包，請更新您的安全群組規則，以允許所需的傳出流量。

1. 如果流程日誌未顯示根本原因，請聯絡 AWS Support。