

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# AWS Client VPN 授权规则
<a name="cvpn-working-rules"></a>

授权规则充当授予网络访问权限的防火墙规则。通过添加授权规则，您可以向特定客户端授予对指定网络的访问权限。对于要授予访问权限的每个网络，您都应该设置一个授权规则。可以使用控制台和 AWS CLI向 Client VPN 端点添加授权规则。

**注意**  
在评估授权规则时，Client VPN 会使用最长前缀匹配。有关更多详细信息，请参阅 *Amazon VPC 用户指南*中的故障排查主题 [故障排除 AWS Client VPN：Active Directory 群组的授权规则未按预期运行](ad-group-auth-rules.md) 和[路由优先级](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html#route-tables-priority)。

## 可供了解授权规则的关键点
<a name="key-points-summary"></a>

以下几点解释了授权规则的一些行为：
+ 要允许访问目标网络，必须显式添加授权规则。原定设置行为是拒绝访问。
+ 您无法添加授权规则以*限制* 对目标网络的访问。
+ `0.0.0.0/0` CIDR 作为特殊情况进行处理。无论创建授权规则的顺序如何，它都是最后处理的。
+ `0.0.0.0/0` CIDR 可被视为“任何目标”或“其他授权规则未定义的任何目标”。
+ 最长前缀匹配是优先的规则。

**Topics**
+ [关键点](#key-points-summary)
+ [场景示例](#auth-rule-example-scenarios)
+ [添加授权规则](cvpn-working-rule-authorize-add.md)
+ [删除授权规则](cvpn-working-rule-remove.md)
+ [查看授权规则](cvpn-working-rule-view.md)

## Client VPN 授权规则场景示例
<a name="auth-rule-example-scenarios"></a>

本节介绍授权规则的工作原理 AWS Client VPN。它包括可供了解授权规则的关键点、示例架构以及对映射到示例架构的示例场景的讨论。

**场景**
+ [授权规则场景的示例架构](#example-arch-auth-rules)
+ [访问单个目标](#auth-rules1)
+ [使用任何目标（0.0.0.0/0）CIDR](#auth-rules2)
+ [更长的 IP 前缀匹配](#auth-rules3)
+ [重叠 CIDR（同一个组）](#auth-rules4)
+ [其他 0.0.0.0/0 规则](#auth-rules5)
+ [为 192.168.0.0/24 添加规则](#auth-rules6)
+ [SAML 联合身份验证](#auth-rules7)
+ [访问所有用户组](#auth-rules8)

### 授权规则场景的示例架构
<a name="example-arch-auth-rules"></a>

下图显示了用于本节中的示例场景的示例架构。

![\[Client VPN 架构示例\]](http://docs.aws.amazon.com/zh_cn/vpn/latest/clientvpn-admin/images/cvpn-auth-rules.png)


### 访问单个目标
<a name="auth-rules1"></a>


| 规则描述 | 组 ID | 允许所有用户访问 | 目标 CIDR | 
| --- | --- | --- | --- | 
|  向工程组提供对本地网络的访问权限  |  S-xxxxx14  |  False  |  172.16.0.0/24  | 
|  向开发组提供对开发 VPC 的访问权限  |  S-xxxxx15  |  False  |  10.0.0.0/16  | 
|  向经理组提供对 Client VPN VPC 的访问权限  |  S-xxxxx16  |  False  |  192.168.0.0/24  | 

**产生的行为**
+ 工程组只能访问 `172.16.0.0/24`。
+ 开发组只能访问 `10.0.0.0/16`。
+ 经理组只能访问 `192.168.0.0/24`。
+ 所有其他流量都由 Client VPN 端点丢弃。

**注意**  
在这种情况下，任何用户组都无法访问公共互联网。

### 使用任何目标（0.0.0.0/0）CIDR
<a name="auth-rules2"></a>


| 规则描述 | 组 ID | 允许所有用户访问 | 目标 CIDR | 
| --- | --- | --- | --- | 
|  向工程组提供对本地网络的访问权限  |  S-xxxxx14  |  False  |  172.16.0.0/24  | 
|  向开发组提供对开发 VPC 的访问权限  |  S-xxxxx15  |  False  |  10.0.0.0/16  | 
|  向经理组提供对任何目标的访问权限  |  S-xxxxx16  |  False  |  0.0.0.0/0  | 

**产生的行为**
+ 工程组只能访问 `172.16.0.0/24`。
+ 开发组只能访问 `10.0.0.0/16`。
+ 经理组可以访问公共互联网*和* `192.168.0.0/24`，但无法访问 `172.16.0.0/24` 或 `10.0.0/16`。

**注意**  
在这种情况下，因为没有规则引用 `192.168.0.0/24`，所以访问该网络的权限也由 `0.0.0.0/0` 规则提供。  
包含 `0.0.0.0/0` 的规则始终最后求值，而无论创建规则的顺序如何。因此，请记住，在 `0.0.0.0/0` 之前求值的规则在确定 `0.0.0.0/0` 授予对哪些网络的访问权限方面起着重要作用。

### 更长的 IP 前缀匹配
<a name="auth-rules3"></a>


| 规则描述 | 组 ID | 允许所有用户访问 | 目标 CIDR | 
| --- | --- | --- | --- | 
|  向工程组提供对本地网络的访问权限  |  S-xxxxx14  |  False  |  172.16.0.0/24  | 
|  向开发组提供对开发 VPC 的访问权限  |  S-xxxxx15  |  False  |  10.0.0.0/16  | 
|  向经理组提供对任何目标的访问权限  |  S-xxxxx16  |  False  |  0.0.0.0/0  | 
|  向经理组提供对开发 VPC 中单个主机的访问权限  |  S-xxxxx16  |  False  |  10.0.2.119/32  | 

**产生的行为**
+ 工程组只能访问 `172.16.0.0/24`。
+ 开发组可以访问 `10.0.0.0/16`，但单个主机 `10.0.2.119/32` *除外*。
+ 经理组可以访问公共互联网、`192.168.0.0/24` 以及开发 VPC 中的单个主机（`10.0.2.119/32`），但无权访问 `172.16.0.0/24` 或开发 VPC 中的任何剩余主机。

**注意**  
在这里，您可以看到具有较长 IP 前缀的规则如何优先于具有较短 IP 前缀的规则。如果您想让开发组有权访问 `10.0.2.119/32`，则需要添加一条附加规则向开发团队授予对 `10.0.2.119/32` 的访问权限。

### 重叠 CIDR（同一个组）
<a name="auth-rules4"></a>


| 规则描述 | 组 ID | 允许所有用户访问 | 目标 CIDR | 
| --- | --- | --- | --- | 
|  向工程组提供对本地网络的访问权限  |  S-xxxxx14  |  False  |  172.16.0.0/24  | 
|  向开发组提供对开发 VPC 的访问权限  |  S-xxxxx15  |  False  |  10.0.0.0/16  | 
|  向经理组提供对任何目标的访问权限  |  S-xxxxx16  |  False  |  0.0.0.0/0  | 
|  向经理组提供对开发 VPC 中单个主机的访问权限  |  S-xxxxx16  |  False  |  10.0.2.119/32  | 
|  向工程组提供对本地网络中较小子网的访问权限  |  S-xxxxx14  |  False  |  172.16.0.128/25  | 

**产生的行为**
+ 开发组可以访问 `10.0.0.0/16`，但单个主机 `10.0.2.119/32` *除外*。
+ 经理组可以访问公共互联网、`192.168.0.0/24` 以及 `10.0.2.119/32` 网络中的单个主机（`10.0.0.0/16`），但无权访问 `172.16.0.0/24` 或 `10.0.0.0/16` 网络中的任何剩余主机。
+ 工程组有权访问 `172.16.0.0/24`，包括更具体的子网 `172.16.0.128/25`。

### 其他 0.0.0.0/0 规则
<a name="auth-rules5"></a>


| 规则描述 | 组 ID | 允许所有用户访问 | 目标 CIDR | 
| --- | --- | --- | --- | 
|  向工程组提供对本地网络的访问权限  |  S-xxxxx14  |  False  |  172.16.0.0/24  | 
|  向开发组提供对开发 VPC 的访问权限  |  S-xxxxx15  |  False  |  10.0.0.0/16  | 
|  向经理组提供对任何目标的访问权限  |  S-xxxxx16  |  False  |  0.0.0.0/0  | 
|  向经理组提供对开发 VPC 中单个主机的访问权限  |  S-xxxxx16  |  False  |  10.0.2.119/32  | 
|  向工程组提供对本地网络中较小子网的访问权限  |  S-xxxxx14  |  False  |  172.16.0.128/25  | 
|  向工程组提供对任何目标的访问权限  |  S-xxxxx14  |  False  |  0.0.0.0/0  | 

**产生的行为**
+ 开发组可以访问 `10.0.0.0/16`，但单个主机 `10.0.2.119/32` *除外*。
+ 经理组可以访问公共互联网、`192.168.0.0/24` 以及 `10.0.2.119/32` 网络中的单个主机（`10.0.0.0/16`），但无权访问 `172.16.0.0/24` 或 `10.0.0.0/16` 网络中的任何剩余主机。
+ 工程组可以访问公共互联网、`192.168.0.0/24` 以及 `172.16.0.0/24`，包括更具体的子网 `172.16.0.128/25`。

**注意**  
请注意，工程组和经理组现在都可以访问 `192.168.0.0/24`。这是因为这两个组都有权访问 `0.0.0.0/0`（任何目标）*且* 没有其他规则在引用 `192.168.0.0/24`。

### 为 192.168.0.0/24 添加规则
<a name="auth-rules6"></a>


| 规则描述 | 组 ID | 允许所有用户访问 | 目标 CIDR | 
| --- | --- | --- | --- | 
|  向工程组提供对本地网络的访问权限  |  S-xxxxx14  |  False  |  172.16.0.0/24  | 
|  向开发组提供对开发 VPC 的访问权限  |  S-xxxxx15  |  False  |  10.0.0.0/16  | 
|  向经理组提供对任何目标的访问权限  |  S-xxxxx16  |  False  |  0.0.0.0/0  | 
|  向经理组提供对开发 VPC 中单个主机的访问权限  |  S-xxxxx16  |  False  |  10.0.2.119/32  | 
|  向工程组提供对本地网络中子网的访问权限  |  S-xxxxx14  |  False  |  172.16.0.128/25  | 
|  向工程组提供对任何目标的访问权限  |  S-xxxxx14  |  False  |  0.0.0.0/0  | 
|  向经理组提供对 Client VPN VPC 的访问权限  |  S-xxxxx16  |  False  |  192.168.0.0/24  | 

**产生的行为**
+ 开发组可以访问 `10.0.0.0/16`，但单个主机 `10.0.2.119/32` *除外*。
+ 经理组可以访问公共互联网、`192.168.0.0/24` 以及 `10.0.2.119/32` 网络中的单个主机（`10.0.0.0/16`），但无权访问 `172.16.0.0/24` 或 `10.0.0.0/16` 网络中的任何剩余主机。
+ 工程组可以访问公共互联网、`172.16.0.0/24` 以及 `172.16.0.128/25`。

**注意**  
请注意，添加供经理组访问 `192.168.0.0/24` 的规则会导致开发组不再具有访问该目标网络的权限。

### SAML 联合身份验证
<a name="auth-rules7"></a>


| 规则描述 | 组 ID | 允许所有用户访问 | 目标 CIDR | 
| --- | --- | --- | --- | 
|  向工程组提供对本地网络的访问权限  |  工程  |  False  |  172.16.0.0/24  | 
|  向开发组提供对开发 VPC 的访问权限  |  开发人员  |  False  |  10.0.0.0/16  | 
|  向经理组提供对 Client VPN VPC 的访问权限  |  管理人员  |  False  |  192.168.0.0/24  | 

**产生的行为**
+ 通过 SAML 进行身份验证且具有“工程”组属性的用户只能访问 `172.16.0.0/24`。
+ 通过 SAML 进行身份验证且具有“开发人员”组属性的用户只能访问 `10.0.0.0/16`。
+ 通过 SAML 进行身份验证且具有“管理员”组属性的用户只能访问 `192.168.0.0/24`。
+ 所有其他流量都由 Client VPN 端点丢弃。

**注意**  
使用 SAML 联合身份验证时，“组 ID”字段对应于标识用户组成员资格的 SAML 属性值。此属性由您的 SAML 身份提供商配置，并在身份验证期间传递给 Client VPN。

### 访问所有用户组
<a name="auth-rules8"></a>


| 规则描述 | 组 ID | 允许所有用户访问 | 目标 CIDR | 
| --- | --- | --- | --- | 
|  向工程组提供对本地网络的访问权限  |  S-xxxxx14  |  False  |  172.16.0.0/24  | 
|  向开发组提供对开发 VPC 的访问权限  |  S-xxxxx15  |  False  |  10.0.0.0/16  | 
|  向经理组提供对任何目标的访问权限  |  S-xxxxx16  |  False  |  0.0.0.0/0  | 
|  向经理组提供对开发 VPC 中单个主机的访问权限  |  S-xxxxx16  |  False  |  10.0.2.119/32  | 
|  向工程组提供对本地网络中子网的访问权限  |  S-xxxxx14  |  False  |  172.16.0.128/25  | 
|  向工程组提供对所有网络的访问权限  |  S-xxxxx14  |  False  |  0.0.0.0/0  | 
|  向经理组提供对 Client VPN VPC 的访问权限  |  S-xxxxx16  |  False  |  192.168.0.0/24  | 
|  向所有组提供访问权限  |  不适用  |  True  |  0.0.0.0/0  | 

**产生的行为**
+ 开发组可以访问 `10.0.0.0/16`，但单个主机 `10.0.2.119/32` *除外*。
+ 经理组可以访问公共互联网、`192.168.0.0/24` 以及 `10.0.2.119/32` 网络中的单个主机（`10.0.0.0/16`），但无权访问 `172.16.0.0/24` 或 `10.0.0.0/16` 网络中的任何剩余主机。
+ 工程组可以访问公共互联网、`172.16.0.0/24` 以及 `172.16.0.128/25`。
+ 任何其他用户组（例如“管理员组”）可以访问公共互联网，但不能访问在其他规则中定义的任何其他目标网络。

# 向 AWS Client VPN 终端节点添加授权规则
<a name="cvpn-working-rule-authorize-add"></a>

可以使用 AWS 管理控制台添加授权规则，以授予或限制对 Client VPN 端点的访问。可以使用 Amazon VPC 控制台或者使用命令行或 API 向 Client VPN 端点添加授权规则。

**要向 Client VPN 终端节点添加授权规则，请使用 AWS 管理控制台**

1. 打开位于 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 的 Amazon VPC 控制台。

1. 在导航窗格中，选择 **Client VPN Endpoints**（Client VPN 终端节点）。

1. 选择要向其中添加授权规则的 Client VPN 端点，然后依次选择**授权规则**和**添加授权规则**。

1. 对于 **Destination network to enable access**（要启用访问的目标网络），输入您希望用户访问的 IP 地址，以 CIDR 表示法表示（例如，VPC 的 CIDR 块）。

1. 指定允许哪些客户端访问指定的网络。对于 **For grant access to (将访问权限授予)**，执行以下操作之一：
   + 要向所有客户端授予访问权限，请选择 **Allow access to all users (允许所有用户访问)**。
   + 要将访问限制到特定客户端，请选择 **Allow access to users in a specific access group (允许特定访问组中的用户进行访问)**，然后对于 **Access group ID (访问组 ID)**，输入要授予访问权限的组的 ID。例如，活动目录组的安全标识符 (SID)，或基于 SAML ID/name 的身份提供者 (IdP) 中定义的组的安全标识符 (SID)。
     + （Active Directory）要获取 SID，你可以使用微软 Powershell [Get-ADGroup](https://learn.microsoft.com/en-us/powershell/module/activedirectory/get-adgroup) cmdlet，例如：

       ```
       Get-ADGroup -Filter 'Name -eq "<Name of the AD Group>"'
       ```

       或者，打开“Active Directory 用户和计算机”工具，查看组的属性，转到“属性编辑器”选项卡，获取 `objectSID` 的值。如有必要，请先选择**查看**、**高级功能**以启用“属性编辑器”选项卡。
     + （基于 SAML 的联合身份验证）该组 ID/name 应与 SAML 断言中返回的组属性信息相匹配。

1. 对于 **Description (描述)**，输入授权规则的简要描述。

1. 选择**添加授权规则**。

**将授权规则添加到 Client VPN 端点（AWS CLI）**  
使用 [authorize-client-vpn-ingress](https://docs.aws.amazon.com/cli/latest/reference/ec2/authorize-client-vpn-ingress.html) 命令。

# 从 AWS Client VPN 终端节点中移除授权规则
<a name="cvpn-working-rule-remove"></a>

可以使用控制台和 AWS CLI删除特定 Client VPN 端点的授权规则。

**删除授权规则（控制台）**

1. 打开位于 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 的 Amazon VPC 控制台。

1. 在导航窗格中，选择 **Client VPN Endpoints**（Client VPN 终端节点）。

1. 选择要向其中添加授权规则的 Client VPN 端点，然后选择**授权规则**。

1. 选择要删除的授权规则，选择**删除授权规则**，然后再次选择**删除授权规则**以确认删除。

**删除授权规则（AWS CLI）**  
使用 [revoke-client-vpn-ingress](https://docs.aws.amazon.com/cli/latest/reference/ec2/revoke-client-vpn-ingress.html) 命令。

# 查看 AWS Client VPN 授权规则
<a name="cvpn-working-rule-view"></a>

可以使用控制台和 AWS CLI 查看特定 Client VPN 端点的授权规则。

**查看授权规则（控制台）**

1. 通过 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 打开 Amazon VPC 控制台。

1. 在导航窗格中，选择 **Client VPN Endpoints**（Client VPN 终端节点）。

1. 选择要查看其授权规则的 Client VPN 端点，然后选择 **Authorization rules**（授权规则）。

**查看授权规则 (AWS CLI)**  
使用 [describe-client-vpn-authorization-rules](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-client-vpn-authorization-rules.html) 命令。