# VPC访问控制概述
虚拟私有云VPC是您在云上的私有网络，通过配置安全策略，可以保障VPC内部署的实例安全运行，比如弹性云服务器、数据库、云容器等。
- 安全组对实例进行防护，将实例加入安全组内后，该实例将会受到安全组的保护。
- 网络ACL是一个子网级别的可选安全防护层，可以对出入子网的流量防护。相比安全组针对实例防护，在规则配置正确的前提下，网络ACL的防护范围可覆盖整个子网，即能够实现对子网内所有实例的批量防护。
- 云防火墙（Cloud Firewall，CFW）对VPC边界网络防护，可以对不同VPC之间、VPC和公网之间、VPC与云下IDC之间的流量防护，实现业务互访活动的可视化与安全防护。相比安全组和网络ACL，防护范围更大。
 
安全组、网络ACL和云防火墙的应用示例如[图1]所示。本示例中：
- 安全组：使用安全组Sg-A和安全组Sg-B，来防护安全组内ECS的流量。
- 网络ACL：使用网络ACL Fw-A防护子网Subnet-A01内所有ECS的流量，网络ACL Fw-B防护子网Subnet-A02和子网Subnet-B01内所有ECS的流量，网络ACL和安全组一起使用，双层防护提升安全保障。
- 云防火墙：
  - 防护VPC和公网之间的流量：ECS通过EIP-A访问公网，从EIP-A送达公网的流量需要经过云防火墙CFW-A的清洗。
  
  - 防护不同VPC之间的流量：通过ER-X连通VPC-A和VPC-B的网络，VPC之间互访的流量需要经过云防火墙CFW-B清洗。
  
  - 防护VPC和云下IDC之间的流量：通过ER-X和DC-A，连通VPC-A和云下IDC之间的网络，VPC-A去往DC-A的流量需要经过云防火墙CFW-B清洗，最终确保通过DC-A送至IDC的流量安全。
   
 
图1VPC访问控制防护示意图   
![](https://support.huaweicloud.com/usermanual-vpc/zh-cn_image_0000002049901256.png)
#### VPC访问控制策略的区别说明
[表1]为您提供了不同VPC访问控制策略的区别，您可以根据业务需求按需选择。
 表1不同VPC访问控制策略的区别 
| 对比项   | 安全组                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | 网络ACL                                                                                                                                                                                                                                                                                       | 云防火墙 CFW                                                                                                                                                                       |
|:---|:---|:---|:---|
| 防护范围    | **实例级别：**防护安全组内的实例，比如弹性云服务器、数据库、云容器实例等。                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | **子网级别：**防护整个子网，子网内的所有实例都会受到网络ACL的保护。                                                                                                                                                                                                                                                        | **VPC边界网络防护：**支持不同VPC之间、VPC和公网之间、VPC与云下IDC之间的流量防护，实现业务互访活动的可视化与安全防护。                                                                                                              |
| 是否必选   | **必选**，实例必须至少加入到一个安全组内。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | **非必选**，您可以根据业务需求选择是否为子网关联网络ACL。                                                                                                                                                                                                                                                              | **非必选**，您可以根据业务需求选择是否开启VPC边界防火墙防护。                                                                                                                                             |
| 是否收费   | **不收取费用**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | **不收取费用**                                                                                                                                                                                                                                                                                   | **收取费用**                                                                                                                                                                        |
| 有无状态  | **有状态**，允许入站请求/出站请求的响应流量出入实例，不受规则限制。                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | **有状态**，允许入站请求/出站请求的响应流量出入子网，不受规则限制。                                                                                                                                                                                                                                                        | **有状态**，允许入站请求/出站请求的响应流量出入公网、VPC或者云专线，不受规则限制。                                                                                                                                     |
| 规则策略   | 安全组**支持设置允许和拒绝策**略。 - 允许策略：对于匹配成功的流量，允许流入/流出实例。  - 拒绝策略：对于匹配成功的流量，拒绝流入/流出实例。                                                                                                                                                                                                               | 网络ACL**支持设置允许和拒绝策略**。 - 允许策略：对于匹配成功的流量，允许流入/流出子网。  - 拒绝策略：对于匹配成功的流量，拒绝流入/流出子网。   | 云防火墙**支持设置允许和拒绝策略**。 允许策略：对于匹配成功的流量，允许流入/流出公网、VPC或者云专线。 拒绝策略：对于匹配成功的流量，拒绝流入/流出公网、VPC或者云专线。 |
| 规则报文组  | 支持**报文** **三元组**（即协议、端口和源/目的地址）过滤。                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | 支持报文五元组（即协议、源端口、目的端口、源地址和目的地址）过滤。                                                                                                                                                                                                                                                             | 支持**报文五元组**（即协议、源端口、目的端口、源地址、目的地址）以及域名、IP地理位置、七层应用协议等过滤。                                                                                                                      |
| 规则生效顺序 | 当实例上绑定多个安全组，并且安全组中存在多条规则时，生效顺序如下： 1. 首先根据实例绑定安全组的顺序生效，排在前面的安全组优先级高。  2. 然后根据安全组内规则的优先级生效，优先级的数字越小，优先级越高。  3. 当优先级相同的情况下，再按照策略匹配，拒绝策略高于允许策略。                                                                                                    | 一个子网只能绑定一个网络ACL，当网络ACL存在多条规则时，根据规则的生效顺序依次匹配流量。序号越小，排序越靠前，表示流量优先匹配该规则。                                                                                                                                                                                                                         | 当云防火墙实例上设置多条防护规则时，根据规则的优先级进行生效。优先级数字越小，规则排序越靠前，越先生效。                                                                                                                            |
| 应用操作  | - 创建实例（比如弹性云服务器）时，必须选择一个安全组，如果当前用户名下没有安全组，则系统会自动创建默认安全组。  - 实例创建完成后，您可以执行以下操作： - 在安全组控制台，添加/移出实例。  - 在实例控制台，为实例添加/移除安全组。     | 创建子网没有网络ACL选项，需要先创建网络ACL，添加出入规则，并在网络ACL内关联子网。当网络ACL状态为已开启，将会对子网生效。                                                                                                                                                                                                                          | 创建云防火墙（专业版）并配置企业路由器，将流量引至云防火墙，通过防护规则放行或者拦截流量，放行后的流量需要经过入侵防御IPS、病毒防御等功能的多重检测。                                                                                                     |
   
![](https://support.huaweicloud.com/usermanual-vpc/public_sys-resources/note_3.0-zh-cn.png)
**如果需要使用高阶防护能力（比如通过域名/地理位置/时间计划进行访问控制、IPS入侵检测、反病毒等七层防护能力），或者您的业务有高等级保护要求，推荐您使用[云防火墙CFW](https://support.huaweicloud.com/cfw/index.html)。**
#### 流量匹配安全组和网络ACL 规则的顺序
当安全组和网络ACL同时存在时，流量优先匹配网络ACL的规则，然后匹配安全组规则。如[图2]所示，以入方向流量为例，为您详细介绍安全组和网络ACL规则的匹配顺序。
1. 流量优先匹配网络ACL规则：
   - 当流量未匹配上任何自定义网络ACL规则，则流量执行默认网络ACL规则，拒绝流量流入子网。
   
   - 当流量匹配上自定义网络ACL规则，则根据网络ACL规则策略决定流量走向。
     - 当策略为拒绝时，则拒绝该流量流入子网。
     
     - 当策略为允许时，则允许该流量流入子网。
      
    
2. 当流量通过网络ACL进入子网时，流量进一步匹配安全组规则：
   1. 当实例关联多个安全组时，流量按照安全组的顺序进行匹配。首先匹配第一个安全组内的规则。
      1. 当流量未匹配上任何安全组规则时，则拒绝该流量进入实例。
      
      2. 当流量匹配上安全组规则，则根据安全组规则策略决定流量走向。
         - 当策略为拒绝时，则拒绝该流量流入实例。
         
         - 当策略为允许时，则允许该流量流入实例。
          
       
   
   2. 对于未成功匹配第一个安全组内规则的流量，继续匹配第二个安全组内的规则。
   
   3. 当遍历了所有安全组的入方向规则，流量均没有匹配上时，则拒绝该流量流入实例。
    
图2网络ACL和安全组的匹配顺序   
![](https://support.huaweicloud.com/usermanual-vpc/zh-cn_image_0000001831122472.png)
如[图3]所示，以下为您提供具体的流量匹配示例。VPC-A内有子网Subnet-A，Subnet-A内有两台弹性云服务器ECS-A和ECS-B。安全防护策略如下：
- 子网Subnet-A上关联了网络ACL Fw-A。Fw-A中的默认规则不能删除，流量优先匹配已添加的自定义规则，网络ACL规则示例请参见[表2]。
- 弹性云服务器ECS-A和ECS-B由安全组Sg-A来防护。创建安全组Sg-A时，您可以选择已有模板，模板中会自带部分安全组规则。您可以对系统自带的规则进行修改或者删除，也可以添加自定义规则，安全组规则示例请参见[表3]。
图3网络ACL和安全组的匹配顺序示例   
![](https://support.huaweicloud.com/usermanual-vpc/zh-cn_image_0000002069235541.png)
 表2网络ACL Fw-A规则说明 
| 方向   | 生效顺序 | 类型  | 策略 | 协议 | 源地址      | 源端口范围 | 目的地址       | 目的端口范围 | 说明                                         |
|:---|:---|:---|:---|:---|:---|:---|:---|:---|:---|
| 入方向 | 1     | IPv4 | 拒绝    | 全部   | 10.0.1.0/24 | 全部      | 0.0.0.0/0 | 全部     | 自定义网络ACL规则A01：拒绝来自特定IP地址10.0.1.0/24网段的流量流入子网内 |
| 入方向   | 2     | IPv4  | 允许   | TCP   | 0.0.0.0/0 | 全部     | 0.0.0.0/0  | 80-85   | 自定义网络ACL规则A02：允许所有流量访问子网内实例的80-85端口          |
| 入方向   | \*   | --   | 拒绝    | 全部 | 0.0.0.0/0 | 全部  | 0.0.0.0/0 | 全部     | 默认网络ACL规则：拒绝所有流量流入子网                          |
| 出方向 | 1    | IPv4 | 允许  | 全部 | 0.0.0.0/0 | 全部    | 0.0.0.0/0    | 全部    | 自定义网络ACL规则A03：允许所有流量从子网流出                   |
| 出方向  | \*  | --  | 拒绝  | 全部   | 0.0.0.0/0 | 全部    | 0.0.0.0/0 | 全部     | 默认网络ACL规则：拒绝所有流量从子网流出                       |
   
 表3安全组Sg-A规则说明 
| 方向     | 优先级 | 策略    | 类型    | 协议端口        | 源地址/目的地址          | 描述                                         |
|:---|:---|:---|:---|:---|:---|:---|
| 入方向 | 1     | 允许  | IPv4  | 自定义TCP：80    | 源地址：0.0.0.0/0    | 安全组规则A01：针对全部IPv4协议，允许所有流量访问安全组内实例的80端口   |
| 入方向    | 1     | 拒绝 | IPv4 | 自定义TCP：82-83 | 源地址：0.0.0.0/0   | 安全组规则A02：针对全部IPv4协议，拒绝所有流量访问安全组内实例的82和83端口 |
| 入方向    | 1       | 允许  | IPv4    | 全部            | 源地址：当前安全组（Sg-A）   | 安全组规则A03：针对全部IPv4协议，确保安全组内实例网络互通           |
| 入方向    | 1    | 允许 | IPv6   | 全部            | 源地址：当前安全组（Sg-A） | 安全组规则A04：针对全部IPv6协议，确保安全组内实例网络互通          |
| 出方向    | 1      | 允许     | IPv4   | 全部              | 目的地址：0.0.0.0/0   | 安全组规则A05：针对全部IPv4协议，允许所有流量从安全组内实例流出       |
| 出方向   | 1    | 允许  | IPv6  | 全部           | 目的地址：::/0          | 安全组规则A06：针对全部IPv6协议，允许所有流量从安全组内实例流出       |
   
基于以上场景，不同入方向报文对规则的匹配情况如下：
- **报文01：**报文01无法匹配上Fw-A中的自定义网络ACL规则，则匹配默认规则，拒绝该报文流入子网。
- **报文02：**报文02可匹配上Fw-A中的自定义网络ACL规则A01，根据规则策略，拒绝该报文流入子网。
- **报文03：**报文03可匹配上Fw-A中的自定义网络ACL规则A02，根据规则策略，允许该报文流入子网。该报文继续匹配安全组规则，无法匹配上Sg-A的任何入方向规则，拒绝该报文流入实例。
- **报文04：**报文04可匹配上Fw-A中的自定义网络ACL规则02，根据规则策略，允许该报文流入子网。该报文继续匹配安全组规则，可匹配上Sg-A的安全组规则A02，根据规则策略，拒绝该报文流入实例。
- **报文05：**报文05可匹配上Fw-A中的自定义网络ACL规则02，根据规则策略，允许该报文流入子网。该报文继续匹配安全组规则，可匹配上Sg-A的安全组规则A01，根据规则策略，允许该报文流入实例。
 
