

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

# EC2 執行個體的 Amazon EC2 安全群組
<a name="ec2-security-groups"></a>

*安全群組*會做為您 EC2 執行個體的虛擬防火牆，控制傳入及傳出流量。傳入規則會控制傳入至您的執行個體的流量，以及傳出規則會控制從您的執行個體傳出的流量。啟動執行個體時，您會為其指派一個或多個安全群組。如果您未指定安全群組，Amazon EC2 便會使用 VPC 的預設安全群組。在您啟動執行個體之後，您可變更其安全群組。

安全性是 AWS 與您之間的共同責任。如需詳細資訊，請參閱 [Amazon EC2 中的安全](ec2-security.md)。 AWS 提供安全群組做為保護執行個體的工具之一，而且您需要設定這些群組以符合您的安全需求。若您有安全群組無法完全滿足的需求，您可以在使用安全群組的同時在您的任何執行個體上維持您自己的防火牆。

**定價**  
使用安全群組無需額外收費。

**Topics**
+ [概要](#security-group-basics)
+ [為您的 Amazon EC2 執行個體建立安全群組。](creating-security-group.md)
+ [變更 Amazon EC2 執行個體的安全群組。](changing-security-group.md)
+ [刪除一個 Amazon EC2 安全群組](deleting-security-group.md)
+ [Amazon EC2 安全群組連線追蹤](security-group-connection-tracking.md)
+ [不同使用案例的安全群組規則](security-group-rules-reference.md)

## 概要
<a name="security-group-basics"></a>

您可以將每個執行個體與多個安全群組建立關聯，也可以將每個安全群組與多個執行個體建立關聯。您在各個安全群組新增規則，允許流量往返於建立關聯的執行個體。您可以隨時修改安全群組的規則。新的、修改過的規則會自動套用至與安全群組建立關聯的所有執行個體。當 Amazon EC2 決定是否要允許流量觸達執行個體時，我們會評估所有與執行個體建立關聯之安全群組的所有規則。如需詳細資訊，請參閱「Amazon VPC 使用者指南」**中的[安全群組規則](https://docs.aws.amazon.com/vpc/latest/userguide/security-group-rules.html)。

下圖顯示具有子網路、網際網路閘道和安全群組的 VPC。子網路包含 EC2 執行個體。要與執行個體建立關聯的安全群組。僅有安全群組規則允許的流量才能到達執行個體。例如，如果安全群組包含允許 ICMP 流量從您的網路傳輸至執行個體的規則，您即可從電腦 SSH 執行個體。如果安全群組包含的規則允許來自與其相關聯的資源的所有流量，則每個執行個體都可以接收從其他執行個體傳送的任何流量。

![\[VPC，包含一個安全群組。子網路中的 EC2 執行個體與安全群組關聯。\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/images/ec2-security-groups.png)


安全群組是具有狀態的群組—若您從執行個體傳送請求，該請求的回應流量將允許流入，與對內安全群組規則無關。無論傳出規則為何，針對允許傳入流量的回應都會允許傳出。如需詳細資訊，請參閱[連線追蹤](security-group-connection-tracking.md)。

# 為您的 Amazon EC2 執行個體建立安全群組。
<a name="creating-security-group"></a>

安全群組就像是防火牆，用於關聯的執行個體，可在執行個體層級控制傳入及傳出流量。您可以將規則新增至安全群組，讓您能夠使用 SSH (Linux 執行個體) 或 RDP (Windows 執行個體) 連線至執行個體。您也可以新增允許用戶端流量的規則，例如，目的地為 Web 伺服器的 HTTP 和 HTTPS 流量。

您可以在啟動執行個體時，為執行個體指派安全群組。當您新增或移除規則時，這些變更會自動套用到所有您已指派該安全群組的執行個體。

在您啟動執行個體之後，您便無法變更指派給它的安全群組。如需詳細資訊，請參閱[變更 Amazon EC2 執行個體的安全群組。](changing-security-group.md)。

您可以在建立安全群組時新增傳入和傳出安全群組規則，也可以稍後再新增這些規則。如需詳細資訊，請參閱[設定安全群組規則](changing-security-group.md#add-remove-security-group-rules)。如需可新增至安全群組的規則範例，請參閱[不同使用案例的安全群組規則](security-group-rules-reference.md)。

**考量事項**
+ 新的安全群組一開始只有允許流量離開資源的傳出規則。您必須新增規則啟用任何傳入流量，或是限制傳出流量。
+ 為允許 SSH 或 RDP 存取執行個體的規則設定來源時，請勿允許從任何地方存取，因為它會允許從網際網路上的所有 IP 位址存取執行個體。通常在測試環境中短暫進行此操作是沒有問題的，但用在生產環境則不安全。
+ 若特定連接埠有超過一個規則，Amazon EC2 會套用最寬鬆的規則。例如，若您有一個規則，允許 IP 位址 203.0.113.1 存取 TCP 連接埠 22 (SSH)；另一個規則允許所有人存取 TCP 連接埠 22，則所有人皆能存取 TCP 連接埠 22。
+ 您可以將多個安全性群組指派給執行個體。因此，執行個體可以有數百個適用的規則。這可能會在您存取執行個體時產生問題。但建議您盡可能緊縮您的規則。
+ 當您將安全群組指定為規則的來源或目標時，規則會影響所有與安全群組相關聯的執行個體。傳入流量會根據與來源安全群組相關聯之執行個體的私有 IP 地址允許 (而非公有 IP 或彈性 IP 地址)。如需有關 IP 地址的詳細資訊，請參閱 [Amazon EC2 執行個體 IP 定址](using-instance-addressing.md)。
+ 請注意，根據預設 Amazon EC2 會封鎖連接埠 25 上的流量。如需詳細資訊，請參閱[使用通訊埠 25 傳送的電子郵件限制](ec2-resource-limits.md#port-25-throttle)。

------
#### [ Console ]

**建立安全群組**

1. 在 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇 **Security Groups** (安全群組)。

1. 選擇 **Create Security Group** (建立安全群組)。

1. 輸入安全性群組的描述性名稱和簡短描述。您無法在建立安全群組之後變更安全群組的名稱和說明。

1. 針對 **VPC**，選擇您要在其中執行 Amazon EC2 執行個體的 VPC。

1. (選用) 若要新增傳入規則，請選擇**傳入規則**。針對每個規則，選擇**新增規則**並指定通訊協定、連接埠和來源。例如，若要允許 SSH 流量，請選擇 **SSH** for **Type**，並為**來源**指定電腦或網路的公有 IPv4 地址。

1. (選用) 若要新增傳出規則，請選擇**傳出規則**。針對每個規則，選擇**新增規則**並指定通訊協定、連接埠和目的地。在 Outbound (傳出) 索引標籤上，保留允許所有傳出流量的預設規則。

1. (選用) 若要新增標籤，請選擇 **Add new tag** (新增標籤)，然後輸入標籤金鑰和值。

1. 選擇**建立安全群組**。

------
#### [ AWS CLI ]

**建立安全群組**  
使用下面的 [create-security-group](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-security-group.html) 命令。

```
aws ec2 create-security-group \
    --group-name my-security-group \
    --description "my security group" \
    --vpc-id vpc-1234567890abcdef0
```

若要了解新增規則的範例，請參閱 [設定安全群組規則](changing-security-group.md#add-remove-security-group-rules)。

------
#### [ PowerShell ]

**建立安全群組**  
使用 [New-EC2SecurityGroup](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2SecurityGroup.html) cmdlet。

```
New-EC2SecurityGroup `
    -GroupName my-security-group `
    -Description "my security group" `
    -VpcId vpc-1234567890abcdef0
```

若要了解新增規則的範例，請參閱 [設定安全群組規則](changing-security-group.md#add-remove-security-group-rules)。

------

# 變更 Amazon EC2 執行個體的安全群組。
<a name="changing-security-group"></a>

您可以在啟動 Amazon EC2 執行個體時為其指定安全群組。在您啟動執行個體之後，您可變更其安全群組。您也可以隨時新增、移除或編輯關聯安全群組的安全群組規則。

安全群組與網路介面關聯。新增或移除安全群組會變更與主要網路介面相關聯的安全群組。您也可以變更與任何其他網路介面關聯的安全群組。如需詳細資訊，請參閱[修改網路介面屬性](modify-network-interface-attributes.md)。

**Topics**
+ [新增或移除 VPC 安全群組。](#add-remove-instance-security-groups)
+ [設定安全群組規則](#add-remove-security-group-rules)

## 新增或移除 VPC 安全群組。
<a name="add-remove-instance-security-groups"></a>

啟動執行個體後，您可以從相關聯的安全群組清單中新增或移除安全群組。當您將多個安全群組與執行個體建立關聯時，每個安全群組的規則都會有效彙總並建立一組規則。Amazon EC2 會使用這一組規則判斷是否要允許存取。

**要求**
+ 執行個體必須處於 `running` 或 `stopped` 狀態。

------
#### [ Console ]

**變更執行個體的安全群組**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇 **Instances** (執行個體)。

1. 選取執行個體，然後選取 **動作**、**安全性**、**變更安全群組**。

1. 對於**關聯的安全群組**，請從清單中選取安全群組，然後選取**新增安全群組**。

   若要移除關聯的安全群組，請為該安全群組選擇**移除**。

1. 選擇**儲存**。

------
#### [ AWS CLI ]

**變更執行個體的安全群組**  
請使用下面的 [modify-instance-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-attribute.html) 命令。

```
aws ec2 modify-instance-attribute \
    --instance-id i-1234567890abcdef0 \
    --groups sg-1234567890abcdef0
```

------
#### [ PowerShell ]

**變更執行個體的安全群組**  
使用 [Edit-EC2InstanceAttribute](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceAttribute.html) cmdlet。

```
Edit-EC2InstanceAttribute `
    -InstanceId i-1234567890abcdef0 `
    -Group sg-1234567890abcdef0
```

------

## 設定安全群組規則
<a name="add-remove-security-group-rules"></a>

建立安全群組之後，您可以新增、更新和刪除其安全群組規則。當您更新規則時，更新的規則會自動套用至與安全群組相關聯的任何資源。

如需可新增至安全群組的規則範例，請參閱[不同使用案例的安全群組規則](security-group-rules-reference.md)。

**所需的許可**  
開始之前，請務必備妥必要的許可。如需詳細資訊，請參閱[範例：使用安全群組](iam-policies-ec2-console.md#ex-security-groups)。

**通訊協定與連接埠**
+ 在主控台中選取預先定義的類型後，系統會為您指定**通訊協定**與**連接埠範圍**。如需輸入連接埠範圍，必須選取以下自訂類型之一：**自訂 TCP** 或**自訂 UDP**。
+ 使用 AWS CLI，您可以使用 `--protocol`和 `--port`選項新增具有單一連接埠的單一規則。如需新增多項規則，或具有連接埠範圍的規則，請改用 `--ip-permissions` 選項。

**資料來源和目的地**
+ 透過主控台，可指定下列內容作為傳入規則的來源，或傳出規則的目的地：
  + **自訂** – IPv4 CIDR 區塊、IPv6 CIDR 區塊、安全群組或字首清單。
  + **Anywhere-IPv4** – 0.0.0.0/0 IPv4 CIDR 區塊。
  + **Anywhere-IPv6** – ::/0 IPv6 CIDR 區塊。
  + **我的 IP**：自動新增您本機電腦的公有 IPv4 地址。
+ 透過 AWS CLI，您可以使用 `--cidr`選項指定 IPv4 CIDR 區塊，或使用 `--source-group`選項指定安全群組。如需指定字首清單或 IPv6 CIDR 區塊，請使用 `--ip-permissions` 選項。

**警告**  
如果您要為連接埠 22 (SSH) 或 3389 (RDP) 新增規則，則應只授權特定 IP 位址或特定範圍的地址來存取您的執行個體。如果選擇 **Anywhere-IPv4**，則可讓所有 IPv4 地址使用指定的通訊協定存取您的執行個體。如果選擇 **Anywhere-IPv6**，則可讓所有 IPv6 地址使用指定的通訊協定存取您的執行個體。

------
#### [ Console ]

**設定安全群組規則**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇**安全群組**。

1. 選取安全群組。

1. 若要編輯傳入規則，請從**動作**或傳入規則索引標籤中選擇**編輯****傳入規則**。

   1. 若要新增規則，請選擇**新增規則**，並輸入規則的類型、通訊協定、連接埠和來源。

      針對 TCP 或 UDP，您必須輸入要允許的連接埠範圍。針對自訂 ICMP，則必須從 **Protocol (通訊協定)** 中選擇 ICMP 類型名稱，然後再從 **Port Range (連接埠範圍)** 中選擇代碼名稱 (若適用)。如果是任何其他類型，則系統會自動為您設定通訊協定和連接埠範圍。

   1. 若要更新規則，請視需要變更其通訊協定、描述和來源。不過，您無法變更來源類型。例如，如果來源是 IPv4 CIDR 區塊，則無法指定 IPv6 CIDR 區塊、字首清單或安全群組。

   1. 若要刪除規則，請選擇其**刪除**按鈕。

1. 若要編輯傳出規則，請從**動作**或傳出規則索引標籤中選擇**編輯傳****出規則**。

   1. 若要新增規則，請選擇**新增規則**，並輸入規則的類型、通訊協定、連接埠和目的地。您也可以選擇輸入描述。

      針對 TCP 或 UDP，您必須輸入要允許的連接埠範圍。針對自訂 ICMP，則必須從 **Protocol (通訊協定)** 中選擇 ICMP 類型名稱，然後再從 **Port Range (連接埠範圍)** 中選擇代碼名稱 (若適用)。如果是任何其他類型，則系統會自動為您設定通訊協定和連接埠範圍。

   1. 若要更新規則，請視需要變更其通訊協定、描述和來源。不過，您無法變更來源類型。例如，如果來源是 IPv4 CIDR 區塊，則無法指定 IPv6 CIDR 區塊、字首清單或安全群組。

   1. 若要刪除規則，請選擇其**刪除**按鈕。

1. 選擇**儲存規則**。

------
#### [ AWS CLI ]

**如需新增安全群組規則**  
請使用 [authorize-security-group-ingress](https://docs.aws.amazon.com/cli/latest/reference/ec2/authorize-security-group-ingress.html) 命令，來新增傳入規則。在下面的範例中，允許從指定字首清單中的 CIDR 區塊傳入 SSH 流量。

```
aws ec2 authorize-security-group-ingress \
    --group-id sg-1234567890abcdef0 \
    --ip-permissions 'IpProtocol=tcp,FromPort=22,ToPort=22,PrefixListIds=[{PrefixListId=pl-f8a6439156EXAMPLE}]'
```

請使用 [authorize-security-group-egress](https://docs.aws.amazon.com/cli/latest/reference/ec2/authorize-security-group-egress.html) 命令，來新增傳出規則。在下面的範例中，允許連接埠 80 上的 TCP 流量傳出至指定安全群組的執行個體。

```
aws ec2 authorize-security-group-egress \
    --group-id sg-1234567890abcdef0 \
    --ip-permissions 'IpProtocol=tcp,FromPort=80,ToPort=80,UserIdGroupPairs=[{GroupId=sg-0aad1c26bb6EXAMPLE}]'
```

**如需移除安全群組規則**  
請使用下面的 [revoke-security-group-ingress](https://docs.aws.amazon.com/cli/latest/reference/ec2/revoke-security-group-ingress.html) 命令，來移除傳入規則。

```
aws ec2 revoke-security-group-egress \
    --group id sg-1234567890abcdef0 \
    --security-group-rule-ids sgr-09ed298024EXAMPLE
```

請使用下面的 [revoke-security-group-egress](https://docs.aws.amazon.com/cli/latest/reference/ec2/revoke-security-group-egress.html) 命令，來移除傳出規則。

```
aws ec2 revoke-security-group-ingress \
    --group id sg-1234567890abcdef0 \
    --security-group-rule-ids sgr-0352250c1aEXAMPLE
```

**如需修改安全群組規則**  
請使用 [modify-security-group-rules](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-security-group-rules.html) 命令。在下面的範例中，變更了指定安全群組規則的 IPv4 CIDR 區塊。

```
aws ec2 modify-security-group-rules \
    --group id sg-1234567890abcdef0 \
    --security-group-rules 'SecurityGroupRuleId=sgr-09ed298024EXAMPLE,SecurityGroupRule={IpProtocol=tcp,FromPort=80,ToPort=80,CidrIpv4=0.0.0.0/0}'
```

------
#### [ PowerShell ]

**如需新增安全群組規則**  
請使用 [Grant-EC2SecurityGroupIngress](https://docs.aws.amazon.com/powershell/latest/reference/items/Grant-EC2SecurityGroupIngress.html) cmdlet，來新增傳入規則。在下面的範例中，允許從指定字首清單中的 CIDR 區塊傳入 SSH 流量。

```
$plid = New-Object -TypeName Amazon.EC2.Model.PrefixListId
$plid.Id = "pl-f8a6439156EXAMPLE"
Grant-EC2SecurityGroupIngress `
    -GroupId sg-1234567890abcdef0 `
    -IpPermission @{IpProtocol="tcp"; FromPort=22; ToPort=22; PrefixListIds=$plid}
```

請使用 [Grant-EC2SecurityGroupEgress](https://docs.aws.amazon.com/powershell/latest/reference/items/Grant-EC2SecurityGroupEgress.html) cmdlet，來新增傳出規則。在下面的範例中，允許連接埠 80 上的 TCP 流量傳出至指定安全群組的執行個體。

```
$uigp = New-Object -TypeName Amazon.EC2.Model.UserIdGroupPair
$uigp.GroupId = "sg-0aad1c26bb6EXAMPLE"
Grant-EC2SecurityGroupEgress `
    -GroupId sg-1234567890abcdef0 `
    -IpPermission @{IpProtocol="tcp"; FromPort=80; ToPort=80; UserIdGroupPairs=$uigp}
```

**如需移除安全群組規則**  
請使用 [Revoke-EC2SecurityGroupIngress](https://docs.aws.amazon.com/powershell/latest/reference/items/Revoke-EC2SecurityGroupIngress.html) cmdlet，來移除傳入規則。

```
Revoke-EC2SecurityGroupIngress `
    -GroupId sg-1234567890abcdef0 `
    -SecurityGroupRuleId sgr-09ed298024EXAMPLE
```

請使用 [Revoke-EC2SecurityGroupEgress](https://docs.aws.amazon.com/powershell/latest/reference/items/Revoke-EC2SecurityGroupEgress.html) cmdlet，來移除傳出規則。

```
Revoke-EC2SecurityGroupEgress `
    -GroupId sg-1234567890abcdef0 `
    -SecurityGroupRuleId sgr-0352250c1aEXAMPLE
```

**如需修改安全群組規則**  
使用 [Edit-EC2SecurityGroupRule](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2SecurityGroupRule.html) cmdlet。在下面的範例中，變更了指定安全群組規則的 IPv4 CIDR 區塊。

```
$sgrr = New-Object -TypeName Amazon.EC2.Model.SecurityGroupRuleRequest
$sgrr.IpProtocol = "tcp"
$sgrr.FromPort = 80
$sgrr.ToPort = 80
$sgrr.CidrIpv4 = "0.0.0.0/0"
$sgr = New-Object -TypeName Amazon.EC2.Model.SecurityGroupRuleUpdate
$sgr.SecurityGroupRuleId = "sgr-09ed298024EXAMPLE"
$sgr.SecurityGroupRule = $sgrr
Edit-EC2SecurityGroupRule  `
    -GroupId sg-1234567890abcdef0 `
    -SecurityGroupRule $sgr
```

------

# 刪除一個 Amazon EC2 安全群組
<a name="deleting-security-group"></a>

當您完成建立用於 Amazon EC2 執行個體的安全群組時，您可以將其刪除。

**要求**
+ 安全群組無法與執行個體或網路介面建立關聯。
+ 由另一個安全群組規則參考的安全群組無法刪除。

------
#### [ Console ]

**刪除安全群組**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. (選用) 若要確認您的安全群組未與執行個體建立關聯，請執行下列動作：

   1. 在導覽窗格中，選擇**安全群組**。

   1. 複製要刪除的安全群組 ID。

   1. 在導覽窗格中，選擇**執行個體**。

   1. 在搜尋列中，新增**安全群組 IDs 等於**篩選條件，並貼上安全群組的 ID。如果沒有結果，則安全群組不會與執行個體建立關聯。否則，您必須先取消安全群組的關聯，才能將其刪除。

1. 在導覽窗格中，選擇**安全群組**。

1. 選取安全群組，然後選擇**動作**、**刪除安全群組**。

1. 如果您選擇多個安全群組，系統會提示您進行確認。如果無法刪除某些安全群組，我們會顯示每個安全群組的狀態，指出是否要刪除。若要確認刪除，請輸入**刪除**。

1. 選擇 **刪除**。

------
#### [ AWS CLI ]

**刪除安全群組**  
請使用下面的 [delete-security-group](https://docs.aws.amazon.com/cli/latest/reference/ec2/delete-security-group.html) 命令。

```
aws ec2 delete-security-group --group-id sg-1234567890abcdef0
```

------
#### [ PowerShell ]

**刪除安全群組**  
使用 [Remove-EC2SecurityGroup](https://docs.aws.amazon.com/powershell/latest/reference/items/Remove-EC2SecurityGroup.html) cmdlet。

```
Remove-EC2SecurityGroup -GroupId sg-1234567890abcdef0
```

------

# Amazon EC2 安全群組連線追蹤
<a name="security-group-connection-tracking"></a>

您的安全群組使用連線追蹤來追蹤流入和流出執行個體流量的資訊。規則會根據流量的連線狀態套用，以判斷該允許或拒絕該流量。使用這種方法，安全群組是可設定狀態的。這表示傳入流量的回應可從執行個體傳出，與對外安全群組規則無關，反之亦然。

舉例來說，假設您從家用電腦中對執行個體啟動一個命令 (例如 netcat 或類似的命令)，並且您的傳入安全群組規則允許 ICMP 流量。會追蹤連線的相關資訊 (包括連接埠資訊)。來自執行個體對命令的回應流量不會作為新的請求追蹤，而是作為已建立的連線，並且將允許流出執行個體，即使您的傳出安全群組規則限制傳出 ICMP 流量。

針對 TCP、UDP 或 ICMP 之外的通訊協定，只會追蹤 IP 地址和通訊協定號碼。若您的執行個體傳送流量到另一個主機，且該主機也在 600 秒內將相同類型的流量傳送至您的執行個體，無論傳入安全群組規則為何，執行個體的安全群組都會接受該流量。安全群組會接受該流量，因為將其視為原始流量的回應流量。

變更安全群組規則時，其跟蹤的連線不會立即中斷。安全群組將繼續允許封包，直到現有連線逾時為止。若要確保無論追蹤狀態為何，流量皆會立即中斷，或所有流量都受到防火牆規則的限制，您可以為子網使用網路 ACL。網路 ACL 為無狀態，因此不會自動允許回應流量。新增阻止任一方向流量的網路 ACL 會破壞現有連線。如需詳細資訊，請參閱「Amazon VPC 使用者指南」**中的[網路 ACL](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html)。

**注意**  
安全群組對 Route 53 Resolver 接收或發出的 DNS 流量沒有影響，有時稱為「VPC\$12 IP 地址」 (請參閱「Amazon Route 53 開發人員指南」**中的 [Amazon Route 53 Resolver 是什麼？](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver.html))，或稱為 「AmazonProvidedDNS」 (請參閱「Amazon Virtual Private Cloud 使用者指南」**中的[使用 DHCP 選項集](https://docs.aws.amazon.com/vpc/latest/userguide/DHCPOptionSet.html))。如果您想要透過 Route 53 Resolver 篩選 DNS 請求，則可以啟用 Route 53 Resolver DNS Firewall (請參閱「Amazon Route 53 開發人員指南」**中的 [Route 53 Resolver DNS Firewall](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-dns-firewall.html))。

## 未追蹤的連線
<a name="untracked-connections"></a>

並非所有的流量流程都會追蹤。若安全群組規則允許所有流量的 TCP 或 UDP 流 (0.0.0.0/0 或 ::/0)，且另一個方向也有對應的規則，它允許所有連接埠 (0-65535) 的所有回應流量 (0.0.0.0/0 或 ::/0)，則不會追蹤流量，除非其為[自動追蹤連線](#automatic-tracking)的一部分。接著會依據允許回應流量的傳入或傳出規則允許未追蹤流的回應流量，而非依據追蹤資訊。

若啟用未受追蹤之流量流程的規則遭到移除或修改，則該流程會立即中斷。例如，如果您有一個開啟的 (0.0.0.0/0) 輸出規則，並移除允許所有 (0.0.0.0/0) 輸入 SSH (TCP 連接埠 22) 流量至執行個體的規則 (或進行修改以不再允許連線)，則您現有的 SSH 連線會立即中斷與執行個體的連線。該連線之前未被追蹤，因此該變更會中斷連線。另一方面，如果您的輸入規則範圍較窄，最初允許 SSH 連線 (表示連線已被追蹤)，但會將規則變更為不再允許來自目前 SSH 用戶端地址的新連線，則現有的 SSH 連線將不會因為其遭到追蹤而中斷。

## 自動追蹤連線
<a name="automatic-tracking"></a>

即使安全群組組態未以其他方式要求追蹤，也會自動追蹤透過以下方式所建立的連線。
+ 輸出限定網際網路閘道
+ Global Accelerator 加速器
+ NAT 閘道
+ Network Firewall 防火墻端點
+ Network Load Balancer
+ AWS PrivateLink （介面 VPC 端點）
+ AWS Lambda （超平面彈性網路介面）
+ DynamoDB 閘道端點 – 每個 DynamoDB 連線皆會取用 2 個 Conntrack 項目。

## 連線追蹤額度
<a name="connection-tracking-throttling"></a>

Amazon EC2 會定義每個執行個體可追蹤的連線數目上限。達到最大值之後，任何傳送或接收的封包都會捨棄，因為無法建立新的連線。發生這種情況時，傳送及接收封包的應用程式無法正確通訊。使用 `conntrack_allowance_available` 網路效能指標來判斷該執行個體類型仍可使用的追蹤連線數目。

若要判斷是否因為執行個體的網路流量超過可追蹤的連線數目上限而捨棄封包，請使用 `conntrack_allowance_exceeded` 網路效能指標。如需詳細資訊，請參閱[監控 EC2 執行個體的 ENA 設定網路效能](monitoring-network-performance-ena.md)。

使用 Elastic Load Balancing 時，如果超過每個執行個體可追蹤的連線數目上限，建議您使用負載平衡器調整執行個體數目，或使用負載平衡器調整執行個體大小。

## 連線追蹤最佳實務
<a name="connection-tracking-performance"></a>

非對稱路由，也就是當流量透過一個網路介面進入執行個體，並透過不同的網路介面離開，可能導致執行個體在追蹤流程時，可達的峰值效能降低。

若要在為您的安全群組啟用連線追蹤時維持尖峰效能並最佳化連線管理，我們建議您使用下列組態：
+ 如果可能，請避免非對稱路由拓撲。
+ 使用網路 ACLs 而不是使用安全群組進行篩選。
+ 如果您必須使用安全群組進行連線追蹤，請設定最短的閒置連線追蹤逾時。如需閒置連線追蹤逾時的詳細資訊，請參閱下一節。
+ 隨著 Nitrov6 執行個體的預設逾時較短，具有長期連線 （例如資料庫連線集區、持久性 HTTP 連線或串流工作負載） 的應用程式應在執行個體啟動時設定適當的`TcpEstablishedTimeout`值。
+ 對於長期連線，請將 TCP 保持運作狀態設定為以少於 5 分鐘的間隔傳送，以確保連線保持開啟並維持其追蹤狀態。這有助於防止因閒置逾時而捨棄連線，並減少連線重新建立的額外負荷。

如需開啟績效詳情的詳細資訊，請參閱[Nitro 系統效能調校的考量因素](ena-nitro-perf.md)。

## 閒置連線追蹤逾時
<a name="connection-tracking-timeouts"></a>

安全群組會追蹤每個建立的連線，以確保傳回封包如預期交付。每個執行個體可追蹤的連線數目上限。處於閒置狀態的連線可能會導致連線追蹤耗盡，並造成不追蹤連線及捨棄封包。您可以在彈性網路介面上設定閒置連線追蹤的逾時。

**注意**  
此功能僅適用於 [Nitro 型執行個體](instance-types.md#instance-hypervisor-type)。在部署到生產環境之前，您應該在 Nitrov6 世代執行個體上測試應用程式，減少`350`第二個預設連線追蹤逾時。

可設定的逾時有三種：
+ **已建立的 TCP 逾時**：處於已建立狀態的閒置 TCP 連線逾時 (以秒為單位)。
  + 最小值：`60` 秒
  + 最大值：`432000` 秒
  + 預設：[Nitrov6](https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-nitro-instances.html) 執行個體類型為 `350` 秒，P6e-GB200 除外。其他執行個體類型為 `432000` 秒，包括 P6e-GB200。
  + 建議：`432000` 秒以下。
+ **UDP 逾時**：只出現單一方向或單一請求回應交易流量的閒置 UDP 流量逾時 (以秒為單位)。
  + 最小值：`30` 秒
  + 最大值：`60` 秒
  + 預設：`30` 秒
+ **UDP 串流逾時**：分類為出現多個請求回應交易串流的閒置 UDP 流量逾時 (以秒為單位)。
  + 最小值：`60` 秒
  + 最大值：`180` 秒
  + 預設：`180` 秒

您可修改下列任何情況的預設逾時：
+  如果您[使用 Amazon EC2 網路效能指標監控追蹤的連線](monitoring-network-performance-ena.md)，*conntrack\$1allowance\$1exceeded* 和 *conntrack\$1allowance\$1available* 可用指標可讓您監控丟棄的封包和追蹤連線使用率，以透過縱向擴展或橫向擴展動作來主動管理 EC2 執行個體容量，以協助在丟棄封包之前滿足網路連線需求。如果您在 EC2 執行個體上觀察到 *conntrack\$1allowance\$1exceeded*，將已建立的 TCP 逾時設定得較低可能對您有所幫助，可解決因不正確的用戶端或網路中間盒造成的過時 TCP/UDP 工作階段。
+ 一般而言，負載平衡器或防火牆已建立的 TCP 閒置逾時範圍為 60 到 90 分鐘。如果您執行的工作負載預期會處理來自網路防火牆等設備的大量連線 (10 萬以上)，建議您在 EC2 網路介面上設定相似的逾時。
+ 如果您執行的工作負載使用非對稱路由拓撲，建議您設定 TCP 建立的閒置逾時為 60秒。
+ 如果您執行的工作負載具有大量連線 (例如 DNS、SIP、SNMP、Syslog、Radius 和其他主要使用 UDP 來處理請求的服務)，則將「UDP 串流」逾時設為 60 秒，可為現有容量提供更高的規模/效能，並防止發生灰色故障。
+ 系統會追蹤所有經過 Network Load Balancer 的 TCP/UDP 連線。TCP 流量的閒置逾時值為 350 秒，UDP 流量為 120 秒，且會隨介面層級逾時值而異。您可在網路介面層級設定逾時，讓逾時的彈性大於負載平衡器的預設值。

執行下列操作時，您可以選擇設定連線追蹤逾時：
+ [建立網路介面](create-network-interface.md)
+ [修改網路介面屬性](modify-network-interface-attributes.md)
+ [啟動 EC2 執行個體](ec2-instance-launch-parameters.md#liw-network-settings)
+ [建立 EC2 執行個體啟動範本](ec2-instance-launch-parameters.md#liw-network-settings)

## 範例
<a name="connection-tracking-example"></a>

在下列範例中，安全群組具備允許 TCP 和 ICMP 流量的傳入規則，以及允許所有傳出流量的對外規則。


**傳入**  

| 通訊協定類型 | 連接埠號碼 | 來源 | 
| --- | --- | --- | 
| TCP  | 22 (SSH) | 203.0.113.1/32 | 
| TCP  | 80 (HTTP) | 0.0.0.0/0 | 
| TCP  | 80 (HTTP) | ::/0 | 
| ICMP | 全部 | 0.0.0.0/0 | 


**傳出**  

| 通訊協定類型 | 連接埠號碼 | 目的地 | 
| --- | --- | --- | 
| 全部 | 全部 | 0.0.0.0/0 | 
| 全部 | 全部 | ::/0 | 

對於執行個體或網路介面的直接網路連線，追蹤行為如下：
+ 會追蹤連接埠 22 (SSH) 上傳入和傳出的 TCP 流量，因為傳入規則僅允許來自 203.0.113.1/32 的流量，而非所有 IP 地址 (0.0.0.0/0)。
+ 連接埠 80 (HTTP) 上傳入和傳出的 TCP 流量則不會受到追蹤，因為傳入和傳出規則允許來自所有 IP 地址的流量。
+ ICMP 流量一律會受到追蹤。

若您移除 IPv4 流量的傳出規則，則所有傳入和傳出的 IPv4 流量都會受到追蹤，包括位於連接埠 80 (HTTP) 上的流量。如果您移除 IPv6 流量的傳出規則，IPv6 流量也會受到相同影響。

# 不同使用案例的安全群組規則
<a name="security-group-rules-reference"></a>

您可以建立安全群組並新增可反映與該安全群組相關聯之執行個體角色的規則。例如，設定為 Web 伺服器的執行個體需要允許輸入 HTTP 和 HTTPS 存取的安全性群組規則。同樣，資料庫執行個體需要允許存取資料庫類型的規則，例如 MySQL 透過連接埠 3306 的存取。

以下為您可以針對特定類型存取，為安全群組新增之規則類型的範例。

**Topics**
+ [Web 伺服器規則](#sg-rules-web-server)
+ [資料庫伺服器規則](#sg-rules-db-server)
+ [從您電腦連線到執行個體的規則](#sg-rules-local-access)
+ [從執行個體使用相同安全群組連線到執行個體的規則](#sg-rules-other-instances)
+ [Ping/ICMP 的規則](#sg-rules-ping)
+ [DNS 伺服器規則](#sg-rules-dns)
+ [Amazon EFS 規則](#sg-rules-efs)
+ [Elastic Load Balancing 規則](#sg-rules-elb)

如需說明，請參閱 [建立安全群組](creating-security-group.md) 與 [設定安全群組規則](changing-security-group.md#add-remove-security-group-rules)。

## Web 伺服器規則
<a name="sg-rules-web-server"></a>

以下對內規則會允許來自任何 IP 地址的 HTTP 和 HTTPS 存取。若您的 VPC 已啟用 IPv6，您可以新增規則，控制來自 IPv6 地址的對內 HTTP 和 HTTPS 流量。


| 通訊協定類型 | 通訊協定號碼 | 連接埠 | 來源 IP | 備註 | 
| --- | --- | --- | --- | --- | 
| TCP | 6 | 80 (HTTP) | 0.0.0.0/0 | 允許來自任何 IPv4 地址的對內 HTTP 存取 | 
| TCP | 6 | 443 (HTTPS) | 0.0.0.0/0 | 允許來自任何 IPv4 地址的對內 HTTPS 存取 | 
| TCP | 6 | 80 (HTTP) | ::/0 | 允許來自任何 IPv6 地址的傳入 HTTP 存取 | 
| TCP | 6 | 443 (HTTPS) | ::/0 | 允許來自任何 IPv6 地址的傳入 HTTPS 存取 | 

## 資料庫伺服器規則
<a name="sg-rules-db-server"></a>

以下對內規則是您可以為資料庫存取新增之規則的範例，取決於您在執行個體上執行的資料庫類型為何。如需 Amazon RDS 執行個體的詳細資訊，請參閱 [Amazon RDS 使用者指南](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/)。

針對來源 IP，請指定下列其中一項：
+ 您本機網路中的特定 IP 地址或 IP 地址範圍 (CIDR 區塊標記法)
+ 存取資料庫之執行個體群組的安全群組 ID


| 通訊協定類型 | 通訊協定號碼 | 連接埠 | 備註 | 
| --- | --- | --- | --- | 
| TCP | 6 | 1433 (MS SQL) | 在 Amazon RDS 執行個體上存取 Microsoft SQL Server 資料庫的預設連接埠 (範例) | 
| TCP | 6 | 3306 (MYSQL/Aurora) | 在 Amazon RDS 執行個體上存取 MySQL 或 Aurora 資料庫的預設連接埠 (範例) | 
| TCP | 6 | 5439 (Redshift) | 存取 Amazon Redshift 叢集資料庫的預設連接埠。 | 
| TCP | 6 | 5432 (PostgreSQL) | 在 Amazon RDS 執行個體上存取 PostgreSQL 資料庫的預設連接埠 (範例) | 
| TCP | 6 | 1521 (Oracle) | 在 Amazon RDS 執行個體上存取 Oracle 資料庫的預設連接埠 (範例) | 

您可以選擇性限制來自資料庫伺服器的輸出流量。例如，您可能想允許存取網際網路以取得軟體更新，但限制所有其他類型的流量。您必須先移除允許所有對外流量的預設對外規則。


| 通訊協定類型 | 通訊協定號碼 | 連接埠 | 目標 IP | 備註 | 
| --- | --- | --- | --- | --- | 
| TCP | 6 | 80 (HTTP) | 0.0.0.0/0 | 允許前往任何 IPv4 地址的對外 HTTP 存取 | 
| TCP | 6 | 443 (HTTPS) | 0.0.0.0/0 | 允許前往任何 IPv4 地址的對外 HTTPS 存取 | 
| TCP | 6 | 80 (HTTP) | ::/0 | (僅限啟用 IPv6 的 VPC) 允許前往任何 IPv6 地址的對外 HTTP 存取 | 
| TCP | 6 | 443 (HTTPS) | ::/0 | (僅限啟用 IPv6 的 VPC) 允許前往任何 IPv6 地址的對外 HTTPS 存取 | 

## 從您電腦連線到執行個體的規則
<a name="sg-rules-local-access"></a>

若要連線到您的執行個體，您的安全群組必須具有允許 SSH 存取 (適用於 Linux 執行個體) 或 RDP 存取 (適用於 Windows 執行個體) 的對內規則。


| 通訊協定類型 | 通訊協定號碼 | 連接埠 | 來源 IP | 
| --- | --- | --- | --- | 
| TCP | 6 | 22 (SSH) | 您電腦的公有 IPv4 地址，或是您本機網路中的 IP 地址範圍。若您的 VPC 已啟用 IPv6，且您的執行個體具有 IPv6 地址，您可以輸入 IPv6 地址或範圍。 | 
| TCP | 6 | 3389 (RDP) | 您電腦的公有 IPv4 地址，或是您本機網路中的 IP 地址範圍。若您的 VPC 已啟用 IPv6，且您的執行個體具有 IPv6 地址，您可以輸入 IPv6 地址或範圍。 | 

## 從執行個體使用相同安全群組連線到執行個體的規則
<a name="sg-rules-other-instances"></a>

若要允許與相同安全群組相關聯的執行個體彼此之間互相通訊，您必須為此明確新增規則。

**注意**  
如果您將路由設定為透過中間設備來轉遞不同子網中兩個執行個體之間的流量，則您必須確保兩個執行個體的安全群組均允許流量在執行個體之間流動。每個執行個體的安全群組都必須參考另一個執行個體的私有 IP 地址，或是包含其他執行個體之子網的 CIDR 範圍作為來源。如果您參考另一個執行個體的安全群組作為來源，這不會允許流量在執行個體之間流動。

下表說明可讓相關聯的執行個體互相通訊的安全群組傳入規則。規則允許所有類型的流量。


| 通訊協定類型 | 通訊協定號碼 | 連接埠 | 來源 IP | 
| --- | --- | --- | --- | 
| -1 (全部) | -1 (全部) | -1 (全部) | 安全群組的 ID，或是包含其他執行個體之子網的 CIDR 範圍 (請參閱備註)。 | 

## Ping/ICMP 的規則
<a name="sg-rules-ping"></a>

**ping** 命令是一種 ICMP 流量。若要 ping 您的執行個體，您必須新增下列任一對內 ICMP 規則。


| Type | 通訊協定 | 來源 | 
| --- | --- | --- | 
| 自訂 ICMP - IPv4 | 回聲請求 | 您電腦的公有 IPv4 地址、特定 IPv4 地址，或任何位置的 IPv4 或 IPv6 地址。 | 
| 所有 ICMP - IPv4 | IPv4 ICMP (1) | 您電腦的公有 IPv4 地址、特定 IPv4 地址，或任何位置的 IPv4 或 IPv6 地址。 | 

若要使用 **ping6** 命令 ping 您執行個體的 IPv6 地址，您必須新增下列對內 ICMPv6 規則。


| Type | 通訊協定 | 來源 | 
| --- | --- | --- | 
| 所有 ICMP - IPv6 | IPv6 ICMP (58) | 您電腦的 IPv6 地址、特定 IPv4 地址，或任何位置的 IPv4 或 IPv6 地址。 | 

## DNS 伺服器規則
<a name="sg-rules-dns"></a>

若您已將您的 EC2 執行個體設為 DNS 伺服器，您必須確保 TCP 和 UDP 流量能透過連接埠 53 觸達您的 DNS 伺服器。

針對來源 IP，請指定下列其中一項：
+ 網路中的特定 IP 地址或 IP 地址範圍 (CIDR 區塊標記法)
+ 您網路中需要存取 DNS 伺服器之執行個體集的安全群組 ID


| 通訊協定類型 | 通訊協定號碼 | 連接埠 | 
| --- | --- | --- | 
| TCP | 6 | 53 | 
| UDP | 17 | 53 | 

## Amazon EFS 規則
<a name="sg-rules-efs"></a>

若您正在搭配 Amazon EC2 執行個體使用 Amazon EFS 檔案系統，您與 Amazon EFS 掛載目標建立關聯的安全群組必須允許透過 NFS 通訊協定的流量。


| 通訊協定類型 | 通訊協定號碼 | 連接埠 | 來源 IP | 備註 | 
| --- | --- | --- | --- | --- | 
| TCP | 6 | 2049 (NFS) | 安全群組的 ID | 允許來自與此安全群組相關聯之資源 (包括掛載目標) 的對內 NFS 存取。 | 

若要在您的 Amazon EC2 執行個體上掛載 Amazon EFS 檔案系統，您必須連線到您的執行個體。因此，與您的執行個體相關聯的安全群組必須具備允許來自您本機電腦或本機網路對內 SSH 的規則。


| 通訊協定類型 | 通訊協定號碼 | 連接埠 | 來源 IP | 備註 | 
| --- | --- | --- | --- | --- | 
| TCP | 6 | 22 (SSH) | 您本機電腦的 IP 地址範圍，或是您網路的 IP 地址範圍 (CIDR 區塊標記法)。 | 允許來自您本機電腦的對內 SSH 存取。 | 

## Elastic Load Balancing 規則
<a name="sg-rules-elb"></a>

若您正在使用負載平衡器註冊 EC2 執行個體，與您負載平衡器相關聯的安全群組必須具備允許和您的執行個體通訊的規則。如需詳細資訊，請參閱 Elastic Load Balancing 說明文件。
+ [Application Load Balancer 的安全群組](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-update-security-groups.html)
+ [Network Load Balancer 的安全群組](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-security-groups.html)
+ [設定您的 Classic Load Balancer 的安全群組](https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-vpc-security-groups.html)