

# 示例：控制对子网中的实例的访问
<a name="nacl-examples"></a>

在本示例中，子网中的任意两个实例可相互通信，并可从受信任的远程计算机访问它们，以执行管理任务。远程计算机可能是本地网络中的计算机（如图所示），也可能是其他子网或 VPC 中的实例。子网的网络 ACL 规则和实例的安全组规则允许从远程计算机的 IP 地址进行访问。来自 Internet 或其他网络的所有其他流量会被拒绝。

![\[使用安全组和 NACL\]](http://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/images/nacl-example-diagram.png)


使用网络 ACL 让您能够灵活地更改实例的安全组或安全组规则，同时依赖网络 ACL 作为备份防御层。例如，如果意外更新安全组以允许从任何地方进行入站 SSH 访问，但网络 ACL 仅允许从远程计算机的 IP 地址范围访问，则网络 ACL 会拒绝来自任何其他 IP 地址的入站 SSH 流量。

## 网络 ACL 规则
<a name="nacl-examples-network-acl-rules"></a>

下面是与子网关联的网络 ACL 的示例入站规则。这些规则应用到子网中的所有实例。


| 规则 \$1 | 类型 | 协议 | 端口范围 | 源 | 允许/拒绝 | 注释 | 
| --- | --- | --- | --- | --- | --- | --- | 
| 100 | SSH | TCP | 22 | 172.31.1.2/32 | 允许 | 允许远程计算机的入站流量。 | 
| \$1 | 所有流量 | All | 全部 | 0.0.0.0/0 | DENY | 拒绝所有其他入站流量。 | 

下面是与子网关联的网络 ACL 的示例出站规则。网络 ACL 没有任何状态。因此，您必须包含允许对入站流量做出响应的规则。


| 规则 \$1 | 类型 | 协议 | 端口范围 | 目的地 | 允许/拒绝 | 注释 | 
| --- | --- | --- | --- | --- | --- | --- | 
| 100 | 自定义 TCP | TCP | 1024-65535 | 172.31.1.2/32 | 允许 | 允许到远程计算机的出站响应。 | 
| \$1 | 所有流量 | All | 全部 | 0.0.0.0/0 | 拒绝 | 拒绝所有其他出站流量。 | 

## 安全组规则
<a name="nacl-examples-security-group-rules"></a>

下表是与实例关联的安全组的示例入站规则。这些规则适用于与安全组关联的所有实例。拥有私钥（适用于与实例关联的密钥对）的用户可以使用 SSH 从远程计算机连接到实例。


| 协议类型 | 协议 | 端口范围 | 源 | 注释 | 
| --- | --- | --- | --- | --- | 
| 所有流量 | All | All | sg-1234567890abcdef0 | 允许在与此安全组关联的实例之间进行通信。 | 
| SSH | TCP | 22 | 172.31.1.2/32 | 允许从远程计算机进行入站 SSH 访问。 | 

下表是与实例关联的安全组的示例出站规则。安全组是有状态的。因此，您不需要允许对入站流量做出响应的规则。


| 协议类型 | 协议 | 端口范围 | 目的地 | 注释 | 
| --- | --- | --- | --- | --- | 
| 所有流量 | All | All | sg-1234567890abcdef0 | 允许在与此安全组关联的实例之间进行通信。 | 

## 网络 ACL 和安全组之间的区别
<a name="compare-security-layers"></a>

下表总结了网络 ACL 和安全组之间的基本区别。


| 特征 | 网络 ACL | 安全组 | 
| --- | --- | --- | 
| 操作级别 | 子网级别 | 实例级别 | 
| 范围 | 适用于关联子网中的所有实例 | 适用于与安全组关联的所有实例 | 
| 规则类型 | 允许和拒绝规则 | 仅允许规则 | 
| 规则评估 | 按升序评估规则，直到找到与流量匹配的规则 | 在决定是否允许流量前评估所有规则 | 
| 返回流量 | 必须明确允许（无状态） | 自动允许（有状态） | 