

# 管理 Amazon Virtual Private Cloud 的安全责任
<a name="security"></a>

AWS 十分重视云安全性。作为 AWS 客户，您将从专为满足大多数安全敏感型企业的要求而打造的数据中心和网络架构中受益。

安全性是 AWS 和您的共同责任。[责任共担模式](https://aws.amazon.com/compliance/shared-responsibility-model/)将其描述为云*的*安全性和云*中*的安全性：
+ **云安全性**：AWS 负责保护在 AWS 云中运行 AWS 服务的基础结构。AWS 还向您提供可安全使用的服务。第三方审核员定期测试和验证我们的安全性的有效性，作为 [AWS Compliance Programs](https://aws.amazon.com/compliance/programs/) 的一部分。要了解适用于 Amazon Virtual Private Cloud 的合规性计划，请参阅[合规性计划范围内的 AWS 服务](https://aws.amazon.com/compliance/services-in-scope/)。
+ **云中的安全性**：您的责任由您使用的 AWS 服务决定。您还需要对其他因素负责，包括您的数据的敏感性、您公司的要求以及适用的法律法规。

此文档将帮助您了解如何在使用 Amazon VPC 时应用责任共担模式。以下主题说明如何配置 Amazon VPC 以实现您的安全性和合规性目标。您还会了解如何使用其他 AWS 服务以帮助您监控和保护 Amazon VPC 资源。

**Topics**
+ [确保 Amazon Virtual Private Cloud 中的数据保护](data-protection.md)
+ [强制执行传输中 VPC 加密](vpc-encryption-controls.md)
+ [适用于 Amazon VPC 的 Identity and Access Management](security-iam.md)
+ [Amazon VPC 中的基础设施安全性](infrastructure-security.md)
+ [使用安全组控制指向 AWS 资源的流量](vpc-security-groups.md)
+ [使用网络访问控制列表控制子网流量](vpc-network-acls.md)
+ [Amazon Virtual Private Cloud 中的恢复能力](disaster-recovery-resiliency.md)
+ [Amazon Virtual Private Cloud 的合规性验证](VPC-compliance.md)
+ [屏蔽 VPC 和子网的公共访问权限](security-vpc-bpa.md)
+ [VPC 的安全最佳实践](vpc-security-best-practices.md)

# 确保 Amazon Virtual Private Cloud 中的数据保护
<a name="data-protection"></a>

AWS [责任共担模型](https://aws.amazon.com/compliance/shared-responsibility-model/)适用于 Amazon Virtual Private Cloud 中的数据保护。如该模式中所述，AWS 负责保护运行所有 AWS 云 的全球基础结构。您负责维护对托管在此基础结构上的内容的控制。您还负责您所使用的 AWS 服务 的安全配置和管理任务。有关数据隐私的更多信息，请参阅[数据隐私常见问题](https://aws.amazon.com/compliance/data-privacy-faq/)。有关欧洲数据保护的信息，请参阅 *AWS Security Blog* 上的 [AWS Shared Responsibility Model and GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/) 博客文章。

出于数据保护目的，建议您保护 AWS 账户 凭证并使用 AWS IAM Identity Center 或 AWS Identity and Access Management（IAM）设置单个用户。这样，每个用户只获得履行其工作职责所需的权限。还建议您通过以下方式保护数据：
+ 对每个账户使用多重身份验证（MFA）。
+ 使用 SSL/TLS 与 AWS 资源进行通信。我们要求使用 TLS 1.2，建议使用 TLS 1.3。
+ 使用 AWS CloudTrail 设置 API 和用户活动日记账记录。有关使用 CloudTrail 跟踪来捕获 AWS 活动的信息，请参阅《AWS CloudTrail 用户指南》**中的[使用 CloudTrail 跟踪](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-trails.html)。
+ 使用 AWS 加密解决方案以及 AWS 服务中的所有默认安全控制。
+ 使用高级托管安全服务（例如 Amazon Macie），它有助于发现和保护存储在 Amazon S3 中的敏感数据。
+ 如果在通过命令行界面或 API 访问 AWS 时需要经过 FIPS 140-3 验证的加密模块，请使用 FIPS 端点。有关可用的 FIPS 端点的更多信息，请参阅《美国联邦信息处理标准（FIPS）第 140-3 版》[https://aws.amazon.com/compliance/fips/](https://aws.amazon.com/compliance/fips/)。

强烈建议您切勿将机密信息或敏感信息（如您客户的电子邮件地址）放入标签或自由格式文本字段（如**名称**字段）。这包括使用控制台、API、AWS CLI 或 AWS SDK 处理 Amazon VPC 或其他 AWS 服务 时。在用于名称的标签或自由格式文本字段中输入的任何数据都可能会用于计费或诊断日志。如果您向外部服务器提供 URL，强烈建议您不要在网址中包含凭证信息来验证对该服务器的请求。

# 确保 Amazon VPC 中的互联网络流量隐私
<a name="VPC_Security"></a>

Amazon Virtual Private Cloud 提供三种功能，以供您用来提高和监控 Virtual Private Cloud (VPC) 的安全性：
+ **安全组**：安全组在资源级别（例如 EC2 实例）允许特定入站和出站流量。启动实例时，您可将其与一个或多个安全组关联。在您的 VPC 中的每项实例都可能属于不同的安全组集合。如果您在启动实例时没有指定安全组，则实例会自动与其 VPC 的默认安全组关联。有关更多信息，请参阅 [安全组](vpc-security-groups.md)。
+ **网络访问控制列表 (ACL)**：网络 ACL 在子网级别允许或拒绝特定的入站和出站流量。有关更多信息，请参阅 [使用网络访问控制列表控制子网流量](vpc-network-acls.md)。
+ **流日志**：流日志捕获有关在您的 VPC 中传入和传出网络接口的 IP 流量的信息。您可以为 VPC、子网或各个网络接口创建流日志。流日志数据将发布到 CloudWatch Logs 或 Amazon S3，可帮助您诊断过于严格或过于宽松的安全组和网络 ACL 规则。有关更多信息，请参阅 [使用 VPC 流日志记录 IP 流量](flow-logs.md)。
+ **流量镜像**：您可以从 Amazon EC2 实例的弹性网络接口复制网络流量。然后将流量发送到带外安全和监控设备。有关更多信息，请参阅[流量镜像指南](https://docs.aws.amazon.com/vpc/latest/mirroring/)。

# 强制执行传输中 VPC 加密
<a name="vpc-encryption-controls"></a>

VPC 加密控制是一项安全与合规功能，可让您通过集中式的权威控制来监控流量加密状态，帮助您识别允许明文通信的资源，并最终提供了在区域中的 VPC 之内以及跨 VPC 强制执行传输中加密的机制

VPC 加密控制同时使用应用层加密和 AWS nitro 系统硬件的内置传输加密功能，来确保强制加密。此功能还将原生硬件层加密功能从现代 Nitro 实例扩展到其他 AWS 服务，包括 Fargate、应用程序负载均衡器、中转网关等。

此功能专为任何需要确保所有流量的加密状态可见性和控制权的用户而设计。在数据加密对于满足 HIPAA、FedRAMP 和 PCI DSS 等合规性标准至关重要的行业中，此功能尤为实用。安全管理员和云架构师可以使用此功能在整个 AWS 环境中集中执行传输中加密策略

此功能可在监控模式和强制模式这两种模式下使用。

## 加密控制模式
<a name="encryption-controls-modes"></a>

**监控模式**  
在监控模式下，加密控制让您可以在 VPC 之内以及跨 VPC 了解 AWS 资源之间流量加密状态。此外还可帮助您识别未强制执行传输中加密的 VPC 资源。您可以配置 VPC 流日志，以发出将告诉您流量是否加密的富字段 `encryption-status`。您可以使用控制台或 `GetVpcResourcesBlockingEncryptionEnforcement` 命令识别未强制执行传输中加密的资源。

**注意**  
现有的 VPC 只能首先以监控模式启用。这让您可以了解允许或可能允许明文流量的资源。只有在这些资源开始强制加密（或者您为其创建了排除项）后，才能在 VPC 上启用强制模式。

**强制模式**  
在强制模式下，VPC 加密控制会阻止您使用任何在 VPC 边界内允许未加密流量的功能或服务。不能直接在现有 VPC 上以强制模式启用加密控制。必须首先以监控模式启用加密控制，识别不合规的资源并将其修改为强制执行传输中加密，然后才能启用强制模式。但您可以在创建新 VPC 过程中，以强制模式启用加密控制。

启用此功能后，强制模式将阻止您创建或附加未加密的 VPC 资源，例如不支持原生内置加密的旧 EC2 实例或互联网网关等。如果要在启用强制加密的 VPC 中运行不合规的资源，则必须为该资源创建排除项。

## 监控流量的加密状态
<a name="monitoring-encryption-status"></a>

您可以使用 VPC 流日志中的 `encryption-status` 字段来审计 VPC 内部流量的加密状态。可为以下值：
+ `0` = 未加密
+ `1` = nitro 加密（由 VPC 加密控制功能管理）
+ `2` = 应用程序加密 
  +  接口端点通过 TCP 端口 443 流向 AWS 服务的流量\$1 
  +  网关端点通过 TCP 端口 443 的流量\$1 
  +  通过 VPC 端点流向加密 Redshift 集群的流量\$1\$1 
+ `3` = 同时启用了 nitro 加密和应用程序
+ `(-)` = 加密状态未知或 VPC 加密控制功能已关闭

**注意：**

\$1 对于接口端点和网关端点，AWS 不会检查数据包数据以确定加密状态，而是依赖用于假定加密状态的端口。

\$1\$1 对于指定的 AWS 托管式端点，AWS 根据服务配置中的 TLS 要求来确定加密状态。

**VPC 流日志限制**
+ 要为 VPC 加密控制启用流日志，您需要手动创建包含 encryption-status 字段的新流日志。encryption-status 字段不会自动添加到现有的流日志中。
+ 建议在流日志中添加 \$1\$1traffic-path\$1 和 \$1\$1flow-direction\$1 字段，以在流日志中获取更多详细信息。

  示例：

  ```
  aws ec2 create-flow-logs \
  --resource-type VPC \
  --resource-ids vpc-12345678901234567 \
  --traffic-type ALL \
  --log-group-name my-flow-logs \
  --deliver-logs-permission-arn arn:aws:iam::123456789101:role/publishFlowLogs
  --log-format '${encryption-status} ${srcaddr} ${dstaddr} ${srcport} ${dstport} ${protocol} ${traffic-path} ${flow-direction} ${reject-reason}'
  ```

## VPC 加密控制排除项
<a name="vpc-encryption-controls-exclusions"></a>

VPC 加密控制的强制模式要求您在 VPC 中的所有资源都强制加密。这样可以在一个区域中确保在 AWS 范围内执行加密。但您可能会拥有允许连接到 AWS 网络之外的互联网网关、NAT 网关或虚拟专用网关等资源，这些资源的端到端加密均由您负责配置和维护。要在强制加密的 VPC 中运行这些资源，您可以创建资源排除项。排除项用于为客户负责维护加密（通常在应用程序层）的资源创建可审计的例外。

VPC 加密控制仅支持 8 种排除项。如果您的 VPC 中存在此类资源并且需要切换到强制模式，则在从监控模式切换到强制模式时，必须添加这些排除项。所有其他资源均不可排除。您可以通过为这些资源创建排除项，从而将您的 VPC 迁移到强制模式。流入和流出这些资源的流量由您负责加密
+ 互联网网关
+ NAT 网关
+ 仅出口互联网网关
+ 与未强制加密的 VPC 的 VPC 对等连接（有关详细场景，请参阅 VPC 对等连接支持部分）
+ 虚拟专用网关
+ VPC 之内的 Lambda 函数
+ VPC Lattice
+ Elastic File System

## 实现工作流程
<a name="implementation-workflow"></a>

1. **启用监控**：在监控模式下创建 VPC 加密控制

1. **分析流量**：检查流日志以监控流量的加密状态

1. **分析资源**：使用控制台或 `GetVpcResourcesBlockingEncryptionEnforcement` 命令识别未强制执行传输中加密的资源。

1. **准备 [可选]**：在想要开启强制模式时计划资源迁移和所需的排除项

1. **强制 [可选]**：切换到强制模式并配置所需的排除项

1. **审计**：通过流日志持续监控合规性

有关详细设置说明，请参阅博客文章 [Introducing VPC encryption controls: enforce encryption in transit within and across VPCs in a region](https://aws.amazon.com/blogs/aws/introducing-vpc-encryption-controls-enforce-encryption-in-transit-within-and-across-vpcs-in-a-region)。

## VPC 加密控制状态
<a name="vpc-encryption-controls-states"></a>

VPC 加密控制的可能状态如下：

**创建**  
正在 VPC 上创建 VPC 加密控制。

**正在修改**  
正在 VPC 上修改 VPC 加密控制

**删除**  
正在 VPC 上删除 VPC 加密控制

**available**  
已成功在 VPC 上以监控模式或强制模式实施 VPC 加密控制

## AWS 服务支持和兼容性
<a name="aws-service-support-compatibility"></a>

为确保加密合规，资源必须始终强制执行传输中加密，无论是在硬件层还是在应用程序层。对于大多数资源，您无需执行任何操作。

### 具有自动合规性的服务
<a name="services-automatic-compliance"></a>

PrivateLink（包括跨区域 PrivateLink）支持的大多数 AWS 服务都将接受在应用程序层执行流量加密。您无需对现有应用程序进行任何更改。AWS 会自动丢弃所有未执行应用程序层加密的流量。一些例外情况包括 Redshift 集群（包括预调配集群和无服务器，您需要手动迁移底层资源）

### 会自动迁移的资源
<a name="resources-migrate-automatically"></a>

开启监控模式后，网络负载均衡器、应用程序负载均衡器、Fargate 集群、EKS 控制面板将自动迁移到原生支持加密的硬件。您无需对现有应用程序进行任何更改。AWS 会自动处理迁移。

### 需要手动迁移的资源
<a name="resources-requiring-manual-migration"></a>

某些 VPC 资源和服务需要您选择底层实例类型。所有现代 EC2 实例都支持传输中加密。如果您的服务已经在使用现代 EC2 实例，则无需进行任何更改。您可以使用控制台或 GetVpcResourcesBlockingEncryptionEnforcement 命令来识别其中的任何服务是否在使用较早版本的实例。如果您发现了此类资源，则必须将其升级到任何支持 nitro 系统硬件原生加密的现代 EC2 实例。这些服务包括 EC2 实例、自动扩缩组、RDS（所有数据库和 Document-DB）、Elasticache 预调配集群、Amazon Redshift 预调配集群、EKS、ECS-EC2、OpenSearch 预调配集群和 EMR。

**兼容的资源：**  
以下资源与 VPC 加密控制兼容：
+ [基于 Nitro 的 EC2 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/data-protection.html#encryption-transit)
+ 网络负载均衡器（存在限制）
+ 应用程序负载均衡器
+ AWS Fargate 集群
+ Amazon Elastic Kubernetes Service（EKS）
+ Amazon EC2 Auto Scaling Groups
+ Amazon Relational Database Service（RDS – 所有数据库）
+ 基于 Amazon ElastiCache 节点的集群
+ Amazon Redshift 预调配集群和无服务器集群
+ Amazon Elastic Container Service（ECS）– EC2 容器实例
+ Amazon OpenSearch Service
+ Amazon Elastic MapReduce（EMR）
+ Amazon Managed Streaming for Apache Kafka (Amazon MSK)
+ VPC 加密控制在应用程序层对通过 PrivateLink 访问的所有 AWS 服务强制加密。任何未在应用程序层加密的流量都会被托管在以强制模式启用加密控制的 VPC 内的 PrivateLink 端点丢弃

### 特定于服务的限制
<a name="service-specific-limitations"></a>

**网络负载均衡器的限制**  
TLS 配置：在包含相关资源的 VPC 上强制执行加密控制后，您将不能使用 TLS 侦听器将加密和解密工作移交给负载均衡器。但可以将目标配置为执行 TLS 加密和解密

**Redshift 预调配集群和无服务器**  
客户不能在包含现有集群/端点的 VPC 上切换到强制模式。要将 VPC 加密控制与 Redshift 结合使用，您必须通过快照还原集群或命名空间。对于预调配集群，请为现有 Redshift 集群创建快照，然后使用“从集群快照还原”操作，以从快照还原集群。对于无服务器，请为现有命名空间的快照，然后在无服务器工作组上使用“从快照还原”操作，以从快照还原命令空间。请注意，如果不执行快照创建和还原过程，则无法在现有集群或命名空间上启用 VPC 加密控制。有关创建快照的信息，请参阅 [Amazon Redshift 文档](https://docs.aws.amazon.com/redshift/latest/mgmt/welcome.html)。

**Amazon MSK（Managed Streaming for Apache Kafka）**  
版本 4.1 的新集群在自己的 VPC 中支持此功能。以下步骤有助您将 VPC 加密与 MSK 结合使用。
+ 客户在没有其他 MSK 集群的 VPC 上启用 VPC 加密
+ 客户使用 Kafka 版本 4.1、实例类型 M7g 创建集群

### 区域和可用区限制
<a name="regional-zone-limitations"></a>
+ **本地区域子网**：在强制模式下不支持，必须从 VPC 中将其删除

### VPC 对等连接支持
<a name="vpc-peering-support"></a>

为确保两个 VPC 之间的 VPC 对等连接使用传输中加密，这两个 VPC 必须位于同一区域，并且在强制模式下开启加密控制，且没有任何排除项。如果要将强制加密的 VPC 与位于不同区域的其他 VPC 或未在强制模式下启用加密控制（无排除项）的其他 VPC 建立对等连接，则必须创建对等连接排除项。

如果这两个 VPC 处于强制模式并相互建立对等连接，则无法将其从强制模式更改为监控模式。在修改要监控的 VPC 加密控制模式之前，您必须首先创建对等连接排除项。

### 中转网关加密支持
<a name="transit-gateway-encryption-support"></a>

必须在中转网关上显式启用加密支持，才能在已开启加密控制的 VPC 之间加密流量。在现有中转网关上启用加密不会造成现有流量中断，并且将会自动无缝地将 VPC 挂载迁移到加密通道。两个处于强制模式（无排除项）的 VPC 之间通过该中转网关的流量将遍历 100% 加密的通道。借助中转网关加密功能，您还可以连接两个处于不同加密控制模式的 VPC。如果您需要在连接到未强制加密的 VPC 的 VPC 中强制执行加密控制，则应使用此功能。在此场景中，您在强制加密的 VPC 内的所有流量（包括 VPC 间的流量）都将被加密。VPC 间流量将在强制加密的 VPC 中的资源与中转网关之间加密。除此之外，加密还取决于流量在未强制加密的 VPC 中流向的资源，并且不能保证一定会加密（因为该 VPC 未处于强制模式）。所有 VPC 必须位于同一区域。（详情请参阅[此处](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-encryption-support.html)）。

![\[具有不同加密控制状态的 VPC 之间的流量\]](http://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/images/vpc-enc-control-arch.png)

+ 在此图中，VPC 1、VPC 2 和 VPC3 的加密控制处于强制模式，并且都连接到以监控模式运行加密控制的 VPC 4。
+ VPC1、VPC2 和 VPC3 之间的所有流量都将被加密。
+ 更具体而言，在该中转网关之前，VPC 1 中资源与 VPC 4 中资源之间的任何流量都将使用 nitro 系统硬件提供的加密进行加密。除此之外，加密状态将取决于 VPC 4 中的资源，并且不保证一定会加密。

有关中转网关加密支持的更多详细信息，请参阅[中转网关文档](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-encryption-support.html)。

## 定价
<a name="pricing"></a>

有关定价信息，请参阅 [Amazon VPC 定价](https://aws.amazon.com/vpc/pricing/)。

## AWS CLI 命令参考
<a name="cli-commands-reference"></a>

### 设置和配置
<a name="setup-configuration"></a>
+ [aws ec2 create-vpc-encryption-control](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-vpc-encryption-control.html)
+ [aws ec2 modify-vpc-encryption-control](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-vpc-encryption-control.html)
+ [aws ec2 tgw modify-transit-gateway](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-transit-gateway.html)

### 监控和排查
<a name="monitoring-troubleshooting"></a>
+ [aws ec2 describe-vpc-encryption-controls](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-vpc-encryption-controls.html)
+ [aws ec2 get-vpc-resources-blocking-encryption-enforcement](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-vpc-resources-blocking-encryption-enforcement.html)
+ [aws ec2 create-flow-logs](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-flow-logs.html)
+ [aws ec2 describe-flow-logs](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-flow-logs.html)
+ [aws 日志查询](https://docs.aws.amazon.com/cli/latest/reference/logs/query.html)

### 清理
<a name="cleanup"></a>
+ [aws ec2 delete-vpc-encryption-control](https://docs.aws.amazon.com/cli/latest/reference/ec2/delete-vpc-encryption-control.html)

## 其他资源
<a name="additional-resources"></a>

有关详细设置说明，请参阅博客文章 [Introducing VPC encryption controls: enforce encryption in transit within and across VPCs in a region](https://aws.amazon.com/blogs/aws/introducing-vpc-encryption-controls-enforce-encryption-in-transit-within-and-across-vpcs-in-a-region)。

有关更多 API 详细信息，请参阅 [EC2 API 参考指南](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Welcome.html)。

# 适用于 Amazon VPC 的 Identity and Access Management
<a name="security-iam"></a>

AWS Identity and Access Management（IAM）是一项，AWS 服务可以帮助管理员安全地控制对 AWS 资源的访问。IAM 管理员控制谁可以通过*身份验证*（登录）和*授权*（具有权限）使用 Amazon VPC 资源。IAM 是一项无需额外费用即可使用的AWS 服务。

**Topics**
+ [受众](#security_iam_audience)
+ [使用身份进行身份验证](#security_iam_authentication)
+ [使用策略管理访问](#security_iam_access-manage)
+ [Amazon VPC 如何与 IAM 配合使用](security_iam_service-with-iam.md)
+ [Amazon VPC 策略示例](vpc-policy-examples.md)
+ [Amazon VPC 身份和访问疑难解答](security_iam_troubleshoot.md)
+ [适用于 Amazon Virtual Private Cloud 的 AWS 托管策略](security-iam-awsmanpol.md)
+ [使用 VPC 的服务相关角色](using-service-linked-roles.md)

## 受众
<a name="security_iam_audience"></a>

如何使用 AWS Identity and Access Management (IAM) 因您在 Amazon VPC 中执行的操作而异。

**服务用户** – 如果您使用 Amazon VPC 服务来完成工作，则管理员会为您提供所需的凭证和权限。随着您使用更多 Amazon VPC 功能来完成工作，您可能需要额外权限。了解如何管理访问权限可帮助您向管理员请求适合的权限。如果您无法访问 Amazon VPC 中的功能，请参阅[Amazon VPC 身份和访问疑难解答](security_iam_troubleshoot.md)。

**服务管理员** – 如果您在公司负责管理 Amazon VPC 资源，您可能对 Amazon VPC 具有完全访问权限。您有责任确定您的员工应访问哪些 Amazon VPC 功能和资源。您向 IAM 管理员提交请求以更改服务用户的权限。请查看该页面上的信息以了解 IAM 的基本概念。要了解有关您的公司如何将 IAM 与 Amazon VPC 搭配使用的更多信息，请参阅[Amazon VPC 如何与 IAM 配合使用](security_iam_service-with-iam.md)。

**IAM 管理员** – 如果您是 IAM 管理员，您可能希望了解如何编写策略以管理对 Amazon VPC 的访问的详细信息。要查看示例策略，请参阅 [Amazon VPC 策略示例](vpc-policy-examples.md)。

## 使用身份进行身份验证
<a name="security_iam_authentication"></a>

身份验证是您使用身份凭证登录 AWS 的方法。您必须作为 AWS 账户根用户、IAM 用户或通过担任 IAM 角色进行身份验证。

您可以使用来自 AWS IAM Identity Center（IAM Identity Center）等身份源的凭证、单点登录身份验证或 Google/Facebook 凭证，以联合身份进行登录。有关登录的更多信息，请参阅《AWS 登录 用户指南》**中的[如何登录您的 AWS 账户](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html)。

对于编程访问，AWS 提供了 SDK 和 CLI 来对请求进行加密签名。有关更多信息，请参阅*《IAM 用户指南》*中的[适用于 API 请求的 AWS 签名版本 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html)。

### AWS 账户 根用户
<a name="security_iam_authentication-rootuser"></a>

 当您创建 AWS 账户 时，最初使用的是一个对所有 AWS 服务和资源拥有完全访问权限的登录身份（称为 AWS 账户*根用户*）。我们强烈建议不要使用根用户进行日常任务。有关要求根用户凭证的任务，请参阅*《IAM 用户指南》*中的[需要根用户凭证的任务](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)。

### IAM 用户和群组
<a name="security_iam_authentication-iamuser"></a>

*[IAM 用户](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html)*是对某个人员或应用程序具有特定权限的一个身份。建议使用临时凭证，而非具有长期凭证的 IAM 用户。有关更多信息，请参阅*《IAM 用户指南》*中的[要求人类用户使用带有身份提供商的联合身份验证才能使用临时凭证访问 AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp)。

[https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html)指定一组 IAM 用户，便于更轻松地对大量用户进行权限管理。有关更多信息，请参阅*《IAM 用户指南》*中的 [IAM 用户使用案例](https://docs.aws.amazon.com/IAM/latest/UserGuide/gs-identities-iam-users.html)。

### IAM 角色
<a name="security_iam_authentication-iamrole"></a>

*[IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)*是具有特定权限的身份，可提供临时凭证。您可以通过[从用户切换到 IAM 角色（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-console.html)或调用 AWS CLI 或 AWS API 操作来担任角色。有关更多信息，请参阅《IAM 用户指南》**中的[担任角色的方法](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage-assume.html)。

IAM 角色对于联合用户访问、临时 IAM 用户权限、跨账户访问、跨服务访问以及在 Amazon EC2 上运行的应用程序非常有用。有关更多信息，请参阅《IAM 用户指南》**中的 [IAM 中的跨账户资源访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)。

## 使用策略管理访问
<a name="security_iam_access-manage"></a>

您将创建策略并将其附加到 AWS 身份或资源，以控制 AWS 中的访问。策略在与身份或资源关联时定义权限。当主体发出请求时，AWS 会评估这些策略。大多数策略在 AWS 中存储为 JSON 文档。有关 JSON 策略文档的更多信息，请参阅*《IAM 用户指南》*中的 [JSON 策略概述](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#access_policies-json)。

管理员使用策略，通过定义哪个**主体**可以在什么**条件**下对哪些**资源**执行哪些**操作**来指定谁有权访问什么。

默认情况下，用户和角色没有权限。IAM 管理员创建 IAM 策略并将其添加到角色中，然后用户可以担任这些角色。IAM 策略定义权限，与执行操作所用的方法无关。

### 基于身份的策略
<a name="security_iam_access-manage-id-based-policies"></a>

基于身份的策略是您附加到身份（用户、组或角色）的 JSON 权限策略文档。这些策略控制身份可以执行什么操作、对哪些资源执行以及在什么条件下执行。要了解如何创建基于身份的策略，请参阅《IAM 用户指南》**中的[使用客户管理型策略定义自定义 IAM 权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)。

基于身份的策略可以是*内联策略*（直接嵌入到单个身份中）或*托管策略*（附加到多个身份的独立策略）。要了解如何在托管策略和内联策略之间进行选择，请参阅*《IAM 用户指南》*中的[在托管策略与内联策略之间进行选择](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-choosing-managed-or-inline.html)。

### 基于资源的策略
<a name="security_iam_access-manage-resource-based-policies"></a>

基于资源的策略是附加到资源的 JSON 策略文档。示例包括 IAM *角色信任策略*和 Amazon S3 *存储桶策略*。在支持基于资源的策略的服务中，服务管理员可以使用它们来控制对特定资源的访问。您必须在基于资源的策略中[指定主体](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)。

基于资源的策略是位于该服务中的内联策略。您不能在基于资源的策略中使用来自 IAM 的 AWS 托管式策略。

### 访问控制列表（ACL）
<a name="security_iam_access-manage-acl"></a>

访问控制列表（ACL）控制哪些主体（账户成员、用户或角色）有权访问资源。ACL 与基于资源的策略类似，尽管它们不使用 JSON 策略文档格式。

Amazon S3、AWS WAF 和 Amazon VPC 是支持 ACL 的服务示例。要了解有关 ACL 的更多信息，请参阅《Amazon Simple Storage Service 开发人员指南》**中的[访问控制列表（ACL）概览](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html)。

### 其他策略类型
<a name="security_iam_access-manage-other-policies"></a>

AWS 支持额外的策略类型，这些策略类型可以设置由更常用的策略类型授予的最大权限：
+ **权限边界** – 设置基于身份的策略可以授予 IAM 实体的最大权限。有关更多信息，请参阅《 IAM 用户指南》**中的 [IAM 实体的权限边界](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html)。
+ **服务控制策略（SCP）**– 指定 AWS Organizations 中组织或组织单元的最大权限。有关更多信息，请参阅《AWS Organizations 用户指南》**中的[服务控制策略](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html)。
+ **资源控制策略（RCP）**– 设置对账户中资源的最大可用权限。有关更多信息，请参阅《AWS Organizations 用户指南》**中的[资源控制策略（RCP）](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html)。
+ **会话策略** – 在为角色或联合用户创建临时会话时，作为参数传递的高级策略。有关更多信息，请参阅《IAM 用户指南》**中的[会话策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)。

### 多个策略类型
<a name="security_iam_access-manage-multiple-policies"></a>

当多个类型的策略应用于一个请求时，生成的权限更加复杂和难以理解。要了解如何 AWS 确定在涉及多种策略类型时是否允许请求，请参阅《*IAM 用户指南*》中的[策略评估逻辑](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html)。

# Amazon VPC 如何与 IAM 配合使用
<a name="security_iam_service-with-iam"></a>

在使用 IAM 管理对 Amazon VPC 的访问权限之前，您应该了解哪些 IAM 功能可用于 Amazon VPC。要大致了解 Amazon VPC 和其他 AWS 服务如何与 IAM 一起使用，请参阅《IAM 用户指南》中的 [与 IAM 一起使用的 AWS 服务](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)**。

**Topics**
+ [操作](#security_iam_service-with-iam-id-based-policies-actions)
+ [资源](#security_iam_service-with-iam-id-based-policies-resources)
+ [条件键](#security_iam_service-with-iam-id-based-policies-conditionkeys)
+ [基于 Amazon VPC 资源的策略](#security_iam_service-with-iam-resource-based-policies)
+ [基于标签的授权](#security_iam_service-with-iam-tags)
+ [IAM 角色](#security_iam_service-with-iam-roles)

使用 IAM 基于身份的策略，您可以指定允许或拒绝的操作。对于部分操作，您可以指定允许或拒绝操作和资源，并指定在什么条件下允许或拒绝操作。Amazon VPC 支持特定的操作、资源和条件键。要了解在 JSON 策略中使用的所有元素，请参阅《IAM 用户指南》中的 [IAM JSON 策略元素参考](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html)**。

## 操作
<a name="security_iam_service-with-iam-id-based-policies-actions"></a>

管理员可以使用 AWS JSON 策略来指定谁有权访问什么内容。也就是说，哪个**主体**可以对什么**资源**执行**操作**，以及在什么**条件**下执行。

JSON 策略的 `Action` 元素描述可用于在策略中允许或拒绝访问的操作。在策略中包含操作以授予执行关联操作的权限。

Amazon VPC 与 Amazon EC2 共享其 API 命名空间。Amazon VPC 中的策略操作在操作前面使用以下前缀：`ec2:`。例如，要授予用户通过 `CreateVpc` API 操作创建 VPC 的权限，您需要授予对 `ec2:CreateVpc` 操作的访问权限。策略语句必须包含 `Action` 或 `NotAction` 元素。

要在单个语句中指定多项操作，请使用逗号将它们隔开，如下例所示。

```
"Action": [
      "ec2:action1",
      "ec2:action2"
]
```

您也可以使用通配符 (\$1) 指定多个操作。例如，要指定以单词 `Describe` 开头的所有操作，请包括以下操作。

```
"Action": "ec2:Describe*"
```

有关 Amazon EC2 操作的列表，请参阅《服务授权参考》中的 [Amazon EC2 定义的操作](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html#amazonec2-actions-as-permissions)**。

## 资源
<a name="security_iam_service-with-iam-id-based-policies-resources"></a>

管理员可以使用 AWS JSON 策略来指定谁有权访问什么内容。也就是说，哪个**主体**可以对什么**资源**执行**操作**，以及在什么**条件**下执行。

`Resource` JSON 策略元素指定要向其应用操作的一个或多个对象。作为最佳实践，请使用其 [Amazon 资源名称（ARN）](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html)指定资源。对于不支持资源级权限的操作，请使用通配符 (\$1) 指示语句应用于所有资源。

```
"Resource": "*"
```

VPC 资源具有下例中显示的 ARN。

```
arn:${Partition}:ec2:${Region}:${Account}:vpc/${VpcId}
```

例如，要在语句中指定 `vpc-1234567890abcdef0` VPC，请使用以下示例中显示的 ARN。

```
"Resource": "arn:aws:ec2:us-east-1:123456789012:vpc/vpc-1234567890abcdef0"
```

要指定在特定区域中属于特定账户的所有 VPC，请使用通配符 (\$1)。

```
"Resource": "arn:aws:ec2:us-east-1:123456789012:vpc/*"
```

无法对特定资源执行某些 Amazon VPC 操作，例如，用于创建资源的操作。在这些情况下，您必须使用通配符 (\$1)。

```
"Resource": "*"
```

许多 Amazon EC2 API 操作涉及多种资源。要在单个语句中指定多个资源，请使用逗号分隔 ARN。

```
"Resource": [
      "resource1",
      "resource2"
]
```

有关 Amazon VPC 资源类型及其 ARN 的列表，请参阅《服务授权参考》中的 [Amazon EC2 定义的资源](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html#amazonec2-resources-for-iam-policies)**。

## 条件键
<a name="security_iam_service-with-iam-id-based-policies-conditionkeys"></a>

管理员可以使用 AWS JSON 策略来指定谁有权访问什么内容。也就是说，哪个**主体**可以对什么**资源**执行**操作**，以及在什么**条件**下执行。

`Condition` 元素根据定义的条件指定语句何时执行。您可以创建使用[条件运算符](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html)（例如，等于或小于）的条件表达式，以使策略中的条件与请求中的值相匹配。要查看所有 AWS 全局条件键，请参阅《IAM 用户指南》**中的 [AWS 全局条件上下文键](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)。

所有 Amazon EC2 操作都支持 `aws:RequestedRegion` 和 `ec2:Region` 条件键。有关更多信息，请参阅 [示例：仅允许访问特定区域](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ExamplePolicies_EC2.html#iam-example-region)。

Amazon VPC 定义了自己的一组条件键，还支持使用一些全局条件键。要查看 Amazon VPC 条件键的列表，请参阅《服务授权参考》中的 [Amazon EC2 的条件键](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html#amazonec2-policy-keys)**。要了解您可以对哪些操作和资源使用条件键，请参阅 [Amazon EC2 定义的操作](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html#amazonec2-actions-as-permissions)。

## 基于 Amazon VPC 资源的策略
<a name="security_iam_service-with-iam-resource-based-policies"></a>

基于资源的策略是 JSON 策略文档，它们指定了指定委托人可在 Amazon VPC 资源上执行的操作以及在什么条件下可执行。

要启用跨账户访问，您可以将整个账户或其他账户中的 IAM 实体指定为[基于资源的策略中的委托人](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)。将跨账户委托人添加到基于资源的策略只是建立信任关系工作的一半而已。当委托人和资源位于不同的AWS账户中时，还必须授予委托人实体对资源的访问权限。通过将基于身份的策略附加到实体以授予权限。但是，如果基于资源的策略向同一个账户中的主体授予访问权限，则不需要额外的基于身份的策略。有关更多信息，请参阅*《IAM 用户指南》*中的 [IAM 中的跨账户资源访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)。

## 基于标签的授权
<a name="security_iam_service-with-iam-tags"></a>

您可以将标签附加到 Amazon VPC 资源，或者在请求中传递标签。要根据标签控制访问，您需要在策略的 [条件元素 ](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)中使用条件键来提供标签信息。有关更多信息，请参阅《Amazon EC2 用户指南》**中的[在创建过程中授予标记资源的权限](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/supported-iam-actions-tagging.html)。

要查看基于身份的策略（用于根据资源上的标签来限制对该资源的访问）的示例，请参阅[在特定 VPC 中启动实例](vpc-policy-examples.md#subnet-ami-example-iam)。

## IAM 角色
<a name="security_iam_service-with-iam-roles"></a>

[IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html#id_roles_terms-and-concepts)是 AWS 账户中具有特定权限的实体。

### 使用临时凭证
<a name="security_iam_service-with-iam-roles-tempcreds"></a>

您可以使用临时凭证进行联合身份登录，担任 IAM 角色或担任跨账户角色。您可以通过调用 AWS STS API 操作（如 [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) 或 [GetFederationToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetFederationToken.html)）获得临时安全凭证。

Amazon VPC 支持使用临时凭证。

### 服务相关角色
<a name="security_iam_service-with-iam-roles-service-linked"></a>

[服务关联角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html#id_roles_terms-and-concepts)允许 AWS 服务访问其他服务中的资源以代表您完成操作。服务关联角色显示在 IAM 账户中，并归该服务所有。IAM 管理员可以查看但不能编辑服务相关角色的权限。

[中转网关](https://docs.aws.amazon.com/vpc/latest/tgw/service-linked-roles.html)支持服务相关角色。

### 服务角色
<a name="security_iam_service-with-iam-roles-service"></a>

此功能允许服务代表您担任[服务角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html#id_roles_terms-and-concepts)。此角色允许服务访问其他服务中的资源以代表您完成操作。服务角色显示在 IAM 账户中，并归该账户所有。这意味着，IAM 管理员可以更改该角色的权限。但是，这样做可能会中断服务的功能。

Amazon VPC 支持流日志的服务角色。创建流日志时，您必须选择允许流日志服务访问 CloudWatch Logs 的角色。有关更多信息，请参阅 [用于将流日志发布到 CloudWatch Logs 的 IAM 角色](flow-logs-iam-role.md)。

# Amazon VPC 策略示例
<a name="vpc-policy-examples"></a>

默认情况下，IAM 角色没有创建或修改 VPC 资源的权限。它们还无法使用 AWS 管理控制台、AWS CLI 或 AWS API 执行任务。IAM 管理员必须创建 IAM 策略，以便为角色授予权限以对所需的指定资源执行特定的 API 操作。然后，管理员必须将这些策略附加到需要这些权限的 IAM 角色。

要了解如何使用这些示例 JSON 策略文档创建基于 IAM 身份的策略，请参阅《IAM 用户指南》中的[创建 IAM 策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-json-editor)。

**Topics**
+ [策略最佳实践](#security_iam_service-with-iam-policy-best-practices)
+ [使用 Amazon VPC 控制台](#security_iam_id-based-policy-examples-console)
+ [创建带公有子网的 VPC](#vpc-public-subnet-iam)
+ [修改和删除 VPC 资源](#modify-vpc-resources-iam)
+ [管理安全组](#vpc-security-groups-iam)
+ [管理安全组规则](#vpc-security-group-rules-iam)
+ [在特定子网中启动实例](#subnet-sg-example-iam)
+ [在特定 VPC 中启动实例](#subnet-ami-example-iam)
+ [屏蔽 VPC 和子网的公共访问权限](#vpc-bpa-example-iam)
+ [其他 Amazon VPC 策略示例](#security-iam-additional-examples)

## 策略最佳实践
<a name="security_iam_service-with-iam-policy-best-practices"></a>

基于身份的策略确定某个人是否可以创建、访问或删除您账户中的 Amazon VPC 资源。这些操作可能会使 AWS 账户产生成本。创建或编辑基于身份的策略时，请遵循以下指南和建议：
+ **AWS 托管式策略及转向最低权限许可入门**：要开始向用户和工作负载授予权限，请使用 *AWS 托管式策略*来为许多常见使用场景授予权限。您可以在 AWS 账户 中找到这些策略。建议通过定义特定于您的使用场景的 AWS 客户托管式策略来进一步减少权限。有关更多信息，请参阅《IAM 用户指南》**中的 [AWS 托管策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)或[工作职能的 AWS 托管策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html)。
+ **应用最低权限**：在使用 IAM 策略设置权限时，请仅授予执行任务所需的权限。为此，您可以定义在特定条件下可以对特定资源执行的操作，也称为*最低权限许可*。有关使用 IAM 应用权限的更多信息，请参阅《IAM 用户指南》**中的 [IAM 中的策略和权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html)。
+ **使用 IAM 策略中的条件进一步限制访问权限**：您可以向策略添加条件来限制对操作和资源的访问。例如，您可以编写策略条件来指定必须使用 SSL 发送所有请求。如果通过特定 AWS 服务（例如 CloudFormation）使用服务操作，您还可以使用条件来授予对服务操作的访问权限。有关更多信息，请参阅《IAM 用户指南》**中的 [IAM JSON 策略元素：条件](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)。
+ **使用 IAM Access Analyzer 验证您的 IAM 策略，以确保权限的安全性和功能性**：IAM Access Analyzer 会验证新策略和现有策略，以确保策略符合 IAM 策略语言（JSON）和 IAM 最佳实践。IAM Access Analyzer 提供 100 多项策略检查和可操作的建议，以帮助您制定安全且功能性强的策略。有关更多信息，请参阅《IAM 用户指南》**中的[使用 IAM Access Analyzer 验证策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-validation.html)。
+ **需要多重身份验证（MFA）**：如果您所处的场景要求您的 AWS 账户 中有 IAM 用户或根用户，请启用 MFA 来提高安全性。若要在调用 API 操作时需要 MFA，请将 MFA 条件添加到您的策略中。有关更多信息，请参阅《IAM 用户指南》**中的[使用 MFA 保护 API 访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html)。

有关 IAM 中的最佳实操的更多信息，请参阅《IAM 用户指南》**中的 [IAM 中的安全最佳实践](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。

## 使用 Amazon VPC 控制台
<a name="security_iam_id-based-policy-examples-console"></a>

要访问 Amazon VPC 控制台，您必须具有一组最低的权限。这些权限必须允许您列出和查看有关您 AWS 账户中的 Amazon VPC 资源的详细信息。如果您创建的基于身份的策略比所需的最低权限更严格，则无法为具有该策略的实体（IAM 角色）正常运行控制台。

以下策略授予角色在 VPC 控制台中列出资源的权限，但不允许创建、更新或删除这些资源。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeAccountAttributes",
                "ec2:DescribeAddresses",
                "ec2:DescribeAvailabilityZones",
                "ec2:DescribeClassicLinkInstances",
                "ec2:DescribeClientVpnEndpoints",
                "ec2:DescribeCustomerGateways",
                "ec2:DescribeDhcpOptions",
                "ec2:DescribeEgressOnlyInternetGateways",
                "ec2:DescribeFlowLogs",
                "ec2:DescribeInternetGateways",
                "ec2:DescribeManagedPrefixLists",
                "ec2:DescribeMovingAddresses",
                "ec2:DescribeNatGateways",
                "ec2:DescribeNetworkAcls",
                "ec2:DescribeNetworkInterfaceAttribute",
                "ec2:DescribeNetworkInterfacePermissions",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DescribePrefixLists",
                "ec2:DescribeRouteTables",
                "ec2:DescribeSecurityGroupReferences",
                "ec2:DescribeSecurityGroups",
                "ec2:DescribeSecurityGroupRules",
                "ec2:DescribeStaleSecurityGroups",
                "ec2:DescribeSubnets",
                "ec2:DescribeTags",
                "ec2:DescribeTrafficMirrorFilters",
                "ec2:DescribeTrafficMirrorSessions",
                "ec2:DescribeTrafficMirrorTargets",
                "ec2:DescribeTransitGateways",
                "ec2:DescribeTransitGatewayVpcAttachments",
                "ec2:DescribeTransitGatewayRouteTables",
                "ec2:DescribeVpcAttribute",
                "ec2:DescribeVpcClassicLink",
                "ec2:DescribeVpcClassicLinkDnsSupport",
                "ec2:DescribeVpcEndpoints",
                "ec2:DescribeVpcEndpointConnectionNotifications",
                "ec2:DescribeVpcEndpointConnections",
                "ec2:DescribeVpcEndpointServiceConfigurations",
                "ec2:DescribeVpcEndpointServicePermissions",
                "ec2:DescribeVpcEndpointServices",
                "ec2:DescribeVpcPeeringConnections",
                "ec2:DescribeVpcs",
                "ec2:DescribeVpnConnections",
                "ec2:DescribeVpnGateways",
                "ec2:GetManagedPrefixListAssociations",
                "ec2:GetManagedPrefixListEntries"
            ],
            "Resource": "*"
        }
    ]
}
```

------

对于仅调用 AWS CLI 或 AWS API 的角色，您不需要允许最低控制台权限。而应仅允许访问与该角色需要执行的 API 操作相匹配的操作。

## 创建带公有子网的 VPC
<a name="vpc-public-subnet-iam"></a>

以下示例允许角色创建 VPC、子网、路由表和互联网网关。角色还可以将互联网网关连接到 VPC 并在路由表中创建路由。`ec2:ModifyVpcAttribute` 操作允许角色为 VPC 启用 DNS 主机名，使得在 VPC 中启动的每个实例都会收到一个 DNS 主机名。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [{
      "Effect": "Allow",
      "Action": [
        "ec2:CreateVpc", 
        "ec2:CreateSubnet", 
        "ec2:DescribeAvailabilityZones",
        "ec2:CreateRouteTable", 
        "ec2:CreateRoute", 
        "ec2:CreateInternetGateway", 
        "ec2:AttachInternetGateway", 
        "ec2:AssociateRouteTable", 
        "ec2:ModifyVpcAttribute"
      ],
      "Resource": "*"
    }
   ]
}
```

------

上述策略还允许角色在 Amazon VPC 控制台中创建 VPC。

## 修改和删除 VPC 资源
<a name="modify-vpc-resources-iam"></a>

您可能需要控制角色可以修改或删除的 VPC 资源。例如，以下策略允许角色使用和删除具有标签 `Purpose=Test` 的路由表。该策略还规定角色只能删除具有标签 `Purpose=Test` 的互联网网关。角色不能使用没有此标签的路由表或互联网网关。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "ec2:DeleteInternetGateway",
            "Resource": "arn:aws:ec2:*:*:internet-gateway/*",
            "Condition": {
                "StringEquals": {
                    "ec2:ResourceTag/Purpose": "Test"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DeleteRouteTable",
                "ec2:CreateRoute",
                "ec2:ReplaceRoute",
                "ec2:DeleteRoute"
            ],
            "Resource": "arn:aws:ec2:*:*:route-table/*",
            "Condition": {
                "StringEquals": {
                    "ec2:ResourceTag/Purpose": "Test"
                }
            }
        }
    ]
}
```

------

## 管理安全组
<a name="vpc-security-groups-iam"></a>

以下策略允许角色管理安全组。第一个语句允许角色删除任何带有标签 `Stack=test` 的安全组，并管理任何带有标签 `Stack=test` 的安全组的入站和出站规则。第二个语句要求角色使用标签 `Stack=Test` 来标记其创建的任何安全组。第三个语句允许角色在创建安全组时创建标签。第四个语句允许角色查看任何安全组和安全组规则。第五个语句允许角色在 VPC 中创建安全组。

**注意**  
AWS CloudFormation 服务无法使用此策略来创建带有所需标签的安全组。如果您移除需要标签的 `ec2:CreateSecurityGroup` 操作的条件，则该策略将生效。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:RevokeSecurityGroupIngress",
                "ec2:AuthorizeSecurityGroupEgress",
                "ec2:AuthorizeSecurityGroupIngress",
                "ec2:UpdateSecurityGroupRuleDescriptionsEgress",
                "ec2:RevokeSecurityGroupEgress",
                "ec2:DeleteSecurityGroup",
                "ec2:ModifySecurityGroupRules",
                "ec2:UpdateSecurityGroupRuleDescriptionsIngress"
            ],
            "Resource": "arn:aws:ec2:*:*:security-group/*",
            "Condition": {
                "StringEquals": {
                    "ec2:ResourceTag/Stack": "test"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "ec2:CreateSecurityGroup",
            "Resource": "arn:aws:ec2:*:*:security-group/*",
            "Condition": {
                "StringEquals": {
                    "aws:RequestTag/Stack": "test"
                },
                "ForAnyValue:StringEquals": {
                    "aws:TagKeys": "Stack"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "ec2:CreateTags",
            "Resource": "arn:aws:ec2:*:*:security-group/*",
            "Condition": {
                "StringEquals": {
                    "ec2:CreateAction": "CreateSecurityGroup"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeSecurityGroupRules",
                "ec2:DescribeVpcs",
                "ec2:DescribeSecurityGroups"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "ec2:CreateSecurityGroup",
            "Resource": "arn:aws:ec2:*:*:vpc/*"
        }
    ]
}
```

------

要允许角色更改与实例关联的安全组，请将 `ec2:ModifyInstanceAttribute` 操作添加到策略中。

要允许角色能够更改网络接口的安全组，请将 `ec2:ModifyNetworkInterfaceAttribute` 操作添加到策略中。

## 管理安全组规则
<a name="vpc-security-group-rules-iam"></a>

以下策略为角色授予相应的权限，以便查看所有安全组和安全组规则、添加和移除特定 VPC 的安全组的入站和出站规则，以及为指定 VPC 修改规则描述。第一个语句使用 `ec2:Vpc` 条件键来将权限范围扩展到特定 VPC。

第二个语句授予角色描述所有安全组、安全组规则和标签的权限。这使角色能够查看安全组规则以便对其进行修改。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:AuthorizeSecurityGroupIngress",
                "ec2:RevokeSecurityGroupIngress",
                "ec2:UpdateSecurityGroupRuleDescriptionsIngress",
                "ec2:AuthorizeSecurityGroupEgress",
                "ec2:RevokeSecurityGroupEgress",
                "ec2:UpdateSecurityGroupRuleDescriptionsEgress",
                "ec2:ModifySecurityGroupRules"
            ],
            "Resource": "arn:aws:ec2:us-east-1:123456789012:security-group/*",
            "Condition": {
                "ArnEquals": {
                    "ec2:Vpc": "arn:aws:ec2:us-east-1:123456789012:vpc/vpc-1234567890abcdef0"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeSecurityGroups",
                "ec2:DescribeSecurityGroupRules",
                "ec2:DescribeTags"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:ModifySecurityGroupRules"
            ],
            "Resource": "arn:aws:ec2:us-east-1:123456789012:security-group-rule/*"
        }
    ]
}
```

------

## 在特定子网中启动实例
<a name="subnet-sg-example-iam"></a>

以下策略允许角色在特定子网中启动实例，以及在请求中使用特定安全组。该策略通过指定子网 ARN 和安全组 ARN 来实现上述目的。如果角色尝试在其他子网中启动实例或使用其他的安全组，请求将失败（除非其他策略或语句授予角色相应的权限）。

该策略还授予使用网络接口资源的权限。在子网中启动时，`RunInstances` 请求会默认创建一个主网络接口，因此角色在启动实例时需要有创建此资源的权限。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "ec2:RunInstances",
            "Resource": [
                "arn:aws:ec2:us-east-1::image/ami-*",
                "arn:aws:ec2:us-east-1:123456789012:instance/*",
                "arn:aws:ec2:us-east-1:123456789012:subnet/subnet-1234567890abcdef0",
                "arn:aws:ec2:us-east-1:123456789012:network-interface/*",
                "arn:aws:ec2:us-east-1:123456789012:volume/*",
                "arn:aws:ec2:us-east-1:123456789012:key-pair/*",
                "arn:aws:ec2:us-east-1:123456789012:security-group/sg-0abcdef1234567890"
            ]
        }
    ]
}
```

------

## 在特定 VPC 中启动实例
<a name="subnet-ami-example-iam"></a>

以下策略允许角色在特定 VPC 中的任意子网中启动实例。此策略通过将条件密钥 (`ec2:Vpc`) 应用于子网资源来实现上述目的。

该策略还授予角色仅使用具有标签“`department=dev`”的 AMI 启动实例的权限。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "ec2:RunInstances",
            "Resource": "arn:aws:ec2:us-east-1:123456789012:subnet/*",
            "Condition": {
                "ArnEquals": {
                    "ec2:Vpc": "arn:aws:ec2:us-east-1:123456789012:vpc/vpc-1234567890abcdef0"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "ec2:RunInstances",
            "Resource": "arn:aws:ec2:us-east-1::image/ami-*",
            "Condition": {
                "StringEquals": {
                    "ec2:ResourceTag/department": "dev"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "ec2:RunInstances",
            "Resource": [
                "arn:aws:ec2:us-east-1:123456789012:instance/*",
                "arn:aws:ec2:us-east-1:123456789012:volume/*",
                "arn:aws:ec2:us-east-1:123456789012:network-interface/*",
                "arn:aws:ec2:us-east-1:123456789012:key-pair/*",
                "arn:aws:ec2:us-east-1:123456789012:security-group/*"
            ]
        }
    ]
}
```

------

## 屏蔽 VPC 和子网的公共访问权限
<a name="vpc-bpa-example-iam"></a>

以下策略示例授予角色使用 [VPC 屏蔽公共访问权限（BPA）功能](security-vpc-bpa.md)的权限，以屏蔽 VPC 和子网中资源的公共访问权限。

示例 1：允许对 VPC BPA 账户范围的设置和 VPC BPA 排除项的只读访问。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "VPCBPAReadOnlyAccess",
      "Action": [
        "ec2:DescribeVpcBlockPublicAccessOptions",
        "ec2:DescribeVpcBlockPublicAccessExclusions"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}
```

------

示例 2：允许对 VPC BPA 账户范围的设置和 VPC BPA 排除项的完全读取和写入访问。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "VPCBPAFullAccess",
      "Action": [
        "ec2:DescribeVpcBlockPublicAccessOptions",
        "ec2:DescribeVpcBlockPublicAccessExclusions",
        "ec2:ModifyVpcBlockPublicAccessOptions",
        "ec2:CreateVpcBlockPublicAccessExclusion",
        "ec2:ModifyVpcBlockPublicAccessExclusion",
        "ec2:DeleteVpcBlockPublicAccessExclusion"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}
```

------

示例 3：允许访问所有 EC2 API，但修改 VPC BPA 设置和创建排除项除外。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "EC2FullAccess",
            "Action": [
                "ec2:*"
            ],
            "Effect": "Allow",
            "Resource": "*"
        },
        {
            "Sid": "VPCBPAPartialAccess",
            "Action": [
                "ec2:ModifyVpcBlockPublicAccessOptions",
                "ec2:CreateVpcBlockPublicAccessExclusion"
            ],
            "Effect": "Deny",
            "Resource": "*"
        }
    ]
}
```

------

## 其他 Amazon VPC 策略示例
<a name="security-iam-additional-examples"></a>

您可以在以下文档中找到与 Amazon VPC 相关的其他示例 IAM 策略：
+ [托管前缀列表](managed-prefix-lists.md#managed-prefix-lists-iam)
+ [流量镜像](https://docs.aws.amazon.com/vpc/latest/mirroring/traffic-mirroring-security.html)
+ [中转网关](https://docs.aws.amazon.com/vpc/latest/tgw/transit-gateway-authentication-access-control.html#tgw-example-iam-policies)
+ [VPC 端点和 VPC 端点服务 (AWS PrivateLink)](https://docs.aws.amazon.com/vpc/latest/privatelink/security_iam_id-based-policy-examples.html)
+ [VPC 对等连接](https://docs.aws.amazon.com/vpc/latest/peering/security-iam.html)

# Amazon VPC 身份和访问疑难解答
<a name="security_iam_troubleshoot"></a>

可以使用以下信息，以帮助您诊断和修复在使用 Amazon VPC 和 IAM 时可能遇到的常见问题。

**Topics**
+ [我无权在 Amazon VPC 中执行操作](#security_iam_troubleshoot-no-permissions)
+ [我无权执行 iam:PassRole](#security_iam_troubleshoot-passrole)
+ [我希望允许我的 AWS 账户以外的人访问我的 Amazon VPC 资源](#security_iam_troubleshoot-cross-account-access)

## 我无权在 Amazon VPC 中执行操作
<a name="security_iam_troubleshoot-no-permissions"></a>

如果 AWS 管理控制台 告诉您，您无权执行某个操作，则必须联系您的管理员寻求帮助。管理员是向您提供登录凭证的人。

当 `mateojackson` IAM 用户尝试使用控制台查看有关某个子网的详细信息，但该子网属于不具有 `ec2:DescribeSubnets` 权限的 IAM 角色时，则会发生以下示例错误。

```
User: arn:aws:iam::123456789012:user/mateojackson is not authorized to perform: ec2:DescribeSubnets on resource: subnet-id
```

在这种情况下，Mateo 需要请求管理员更新策略，以允许他访问该子网。

## 我无权执行 iam:PassRole
<a name="security_iam_troubleshoot-passrole"></a>

如果您收到一个错误，表明您无权执行 `iam:PassRole` 操作，则必须更新策略以允许您将角色传递给 Amazon VPC。

有些 AWS 服务 允许将现有角色传递到该服务，而不是创建新服务角色或服务关联角色。为此，您必须具有将角色传递到服务的权限。

当名为 `marymajor` 的 IAM 用户尝试使用控制台在 Amazon VPC 中执行操作时，会发生以下示例错误。但是，服务必须具有服务角色所授予的权限才可执行此操作。Mary 不具有将角色传递到服务的权限。

```
User: arn:aws:iam::123456789012:user/marymajor is not authorized to perform: iam:PassRole
```

在这种情况下，必须更新 Mary 的策略以允许她执行 `iam:PassRole` 操作。

如果您需要帮助，请联系 AWS 管理员。您的管理员是提供登录凭证的人。

## 我希望允许我的 AWS 账户以外的人访问我的 Amazon VPC 资源
<a name="security_iam_troubleshoot-cross-account-access"></a>

您可以创建一个角色，以便其他账户中的用户或您组织外的人员可以使用该角色来访问您的资源。您可以指定谁值得信赖，可以代入角色。对于支持基于资源的策略或访问控制列表（ACL）的服务，您可以使用这些策略向人员授予对您的资源的访问权。

要了解更多信息，请参阅以下内容：
+ 要了解 Amazon VPC 是否支持这些功能，请参阅 [Amazon VPC 如何与 IAM 配合使用](security_iam_service-with-iam.md)。
+ 要了解如何为您拥有的 AWS 账户中的资源提供访问权限，请参阅《IAM 用户指南》**中的[为您拥有的另一个 AWS 账户中的 IAM 用户提供访问权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_aws-accounts.html)。
+ 要了解如何为第三方 AWS 账户 提供您的资源的访问权限，请参阅《IAM 用户指南》**中的[为第三方拥有的 AWS 账户 提供访问权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_third-party.html)。
+ 要了解如何通过身份联合验证提供访问权限，请参阅《IAM 用户指南》**中的[为经过外部身份验证的用户（身份联合验证）提供访问权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_federated-users.html)。
+ 要了解使用角色和基于资源的策略进行跨账户访问之间的差别，请参阅《IAM 用户指南》**中的 [IAM 中的跨账户资源访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)。

# 适用于 Amazon Virtual Private Cloud 的 AWS 托管策略
<a name="security-iam-awsmanpol"></a>

AWS 托管式策略是由 AWS 创建和管理的独立策略。AWS 托管式策略旨在为许多常见使用案例提供权限，以便您可以开始为用户、组和角色分配权限。

请记住，AWS 托管式策略可能不会为您的特定使用案例授予最低权限，因为它们可供所有 AWS 客户使用。我们建议通过定义特定于使用案例的[客户管理型策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#customer-managed-policies)来进一步减少权限。

您无法更改 AWS 托管式策略中定义的权限。如果 AWS 更新在 AWS 托管式策略中定义的权限，则更新会影响该策略所附加到的所有主体身份（用户、组和角色）。当新的 AWS 服务 启动或新的 API 操作可用于现有服务时，AWS 最有可能更新 AWS 托管式策略。

有关更多信息，请参阅《IAM 用户指南》**中的 [AWS 托管式策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)。

## AWS 托管策略：AmazonVPCFullAccess
<a name="security-iam-awsmanpol-AmazonVPCFullAccess"></a>

您可以将 `AmazonVPCFullAccess` 策略附加得到 IAM 身份。此策略授予允许完全访问 Amazon VPC 的权限。

要查看此策略的权限，请参阅《AWS 托管式策略参考》中的 [AmazonVPCFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonVPCFullAccess.html)**。

## AWS 托管策略：AmazonVPCReadOnlyAccess
<a name="security-iam-awsmanpol-AmazonVPCReadOnlyAccess"></a>

您可以将 `AmazonVPCReadOnlyAccess` 策略附加得到 IAM 身份。此策略授予允许对 Amazon VPC 进行只读访问的权限。

要查看此策略的权限，请参阅《AWS 托管式策略参考》中的 [AmazonVPCReadOnlyAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonVPCReadOnlyAccess.html)**。

## AWS 托管式策略: AmazonVPCCrossAccountNetworkInterfaceOperations
<a name="security-iam-awsmanpol-AmazonVPCCrossAccountNetworkInterfaceOperations"></a>

您可以将 `AmazonVPCCrossAccountNetworkInterfaceOperations` 策略附加到 IAM 身份。此策略授予可权限，允许身份创建网络接口并将其附加到跨账户资源。

要查看此策略的权限，请参阅《AWS 托管式策略参考》中的 [AmazonVPCCrossAccountNetworkInterfaceOperations](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonVPCCrossAccountNetworkInterfaceOperations.html)**。

## AWS 托管式策略：AWSServiceRoleForNATGateway
<a name="security-iam-awsmanpol-AWSServiceRoleForNATGateway"></a>

您可以将 `AWSServiceRoleForNATGateway` 策略附加到 IAM 身份。此策略将授予允许该身份代表您自动扩展区域 NAT 网关的权限。

要查看此策略的权限，请参阅《AWS 托管式策略参考》中的 [AWSServiceRoleForNATGateway](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSServiceRoleForNATGateway.html)**。

## AWS 托管策略的 Amazon VPC 更新
<a name="security-iam-awsmanpol-updates"></a>

查看有关 Amazon VPC 的 AWS 托管策略的更新的详细信息（此服务于 2021 年 3 月开始跟踪这些更改）。


| 更改 | 描述 | 日期 | 
| --- | --- | --- | 
| [AWS 托管策略：AmazonVPCFullAccess](#security-iam-awsmanpol-AmazonVPCFullAccess)：对现有策略的更新 | 在 AWSIPAMServiceRolePolicy 托管式策略（ec2:ModifyManagedPrefixList、ec2:DescribeManagedPrefixLists 和 ec2:GetManagedPrefixListEntries）中添加了操作，以使 IPAM 能够修改和读取托管前缀列表。 | 2025 年 10 月 31 日 | 
| [AWS 托管式策略：AWSServiceRoleForNATGateway](#security-iam-awsmanpol-AWSServiceRoleForNATGateway)：新策略 | 新增的 AWSServiceRoleForNATGateway 策略允许该身份自动扩展区域 NAT 网关。 | 2025 年 11 月 19 日 | 
| [AWS 托管策略：AmazonVPCFullAccess](#security-iam-awsmanpol-AmazonVPCFullAccess)：对现有策略的更新 | 添加了 AssociateSecurityGroupVpc、DescribeSecurityGroupVpcAssociations 和 DisassociateSecurityGroupVpc 操作，允许您关联、取消关联和查看安全组与 VPC 的关联。 | 2024 年 12 月 9 日 | 
| [AWS 托管策略：AmazonVPCReadOnlyAccess](#security-iam-awsmanpol-AmazonVPCReadOnlyAccess)：对现有策略的更新 | 添加了 DescribeSecurityGroupVpcAssociations 操作，允许您查看安全组与 VPC 的关联。 | 2024 年 12 月 9 日 | 
| [AWS 托管策略：AmazonVPCFullAccess](#security-iam-awsmanpol-AmazonVPCFullAccess)：对现有策略的更新 | 添加了 GetSecurityGroupsForVpc 操作，允许您获取可在 VPC 中使用的安全组。 | 2024 年 2 月 8 日 | 
| [AWS 托管策略：AmazonVPCReadOnlyAccess](#security-iam-awsmanpol-AmazonVPCReadOnlyAccess)：对现有策略的更新 | 添加了 GetSecurityGroupsForVpc 操作，允许您获取可在 VPC 中使用的安全组。 | 2024 年 2 月 8 日 | 
| [AWS 托管式策略: AmazonVPCCrossAccountNetworkInterfaceOperations](#security-iam-awsmanpol-AmazonVPCCrossAccountNetworkInterfaceOperations)：对现有策略的更新 | 添加 AssignIpv6Addresses 和 UnassignIpv6Addresses 操作，允许您管理与网络接口关联的 IPv6 地址。 | 2023 年 9 月 25 日 | 
| [AWS 托管策略：AmazonVPCReadOnlyAccess](#security-iam-awsmanpol-AmazonVPCReadOnlyAccess)：对现有策略的更新 | 添加了 DescribeSecurityGroupRules 操作，可查看[安全组规则](security-group-rules.md)。 | 2021 年 8 月 2 日 | 
| [AWS 托管策略：AmazonVPCFullAccess](#security-iam-awsmanpol-AmazonVPCFullAccess)：对现有策略的更新 | 添加了 DescribeSecurityGroupRules 和 ModifySecurityGroupRules 操作，可查看和修改[安全组规则](security-group-rules.md)。 | 2021 年 8 月 2 日 | 
| [AWS 托管策略：AmazonVPCFullAccess](#security-iam-awsmanpol-AmazonVPCFullAccess)：对现有策略的更新 | 添加了针对运营商网关、IPv6 池、本地网关和本地网关路由表的操作。 | 2021 年 6 月 23 日 | 
| [AWS 托管策略：AmazonVPCReadOnlyAccess](#security-iam-awsmanpol-AmazonVPCReadOnlyAccess)：对现有策略的更新 | 添加了针对运营商网关、IPv6 池、本地网关和本地网关路由表的操作。 | 2021 年 6 月 23 日 | 

# 使用 VPC 的服务相关角色
<a name="using-service-linked-roles"></a>

Amazon VPC 使用 AWS Identity and Access Management（IAM）[服务相关角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role)。服务相关角色是一种独特类型的 IAM 角色，与 VPC 直接相关。服务相关角色由 VPC 预定义，并包含服务代表您调用其他 AWS 服务所需的所有权限。

您可以使用服务相关角色轻松设置 VPC，因为您不必手动添加所需的权限。VPC 定义其服务相关角色的权限，除非另外定义，否则只有 VPC 可以代入其角色。定义的权限包括信任策略和权限策略，以及不能附加到任何其他 IAM 实体的权限策略。

只有在首先删除相关资源后，您才能删除服务关联角色。这可以保护您的 VPC 资源，因为您不会无意中移除对资源的访问权限。

有关支持服务相关角色的其他服务的信息，请参阅[使用 IAM 的 AWS 服务](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)，并查找**服务相关角色**列中显示为**是**的服务。选择**是**和链接，查看该服务的服务关联角色文档。

## VPC 的服务相关角色权限
<a name="slr-permissions"></a>

VPC 使用名为 **AWSServiceRoleForNATGateway** 的服务相关角色：此服务相关角色使 Amazon VPC 能够代表您分配弹性 IP 地址以自动扩缩区域 NAT 网关、根据您的要求将现有弹性 IP 关联到区域 NAT 网关和取消关联，以及描述网络接口以识别您现有的基础设施以自动扩展到新可用区。

AWSServiceRoleForNATGateway 服务相关角色信任以下服务来代入该角色：
+ `ec2-nat-gateway.amazonaws.com`

名为 AWSNATGatewayServiceRolePolicy 的角色权限策略允许 VPC 对指定资源完成以下操作：
+ 操作：在服务托管 EIP 上执行 `AllocateAddress` 以代表您分配 EIP。服务托管 EIP 会自动使用服务托管标签和 ReleaseAddress 处理后续标记任务。
+ 操作：在预先存在的弹性 IP 地址上执行 `AssociateAddress`，以根据您的要求将其手动关联到您的区域 NAT 网关。
+ 操作：在预先存在的弹性 IP 地址上执行 `DisassociateAddress`，以根据您的要求将其从您的区域 NAT 网关中移除。
+ 操作：执行 `DescribeAddresses` 以在关联时从客户提供的 EIP 中获取公有 IP 地址信息。
+ 操作：在您现有的网络接口上执行 `DescribeNetworkInterface`，以自动识别基础设施所在的可用区，从而自动扩展到新的可用区。

您必须配置使用户、组或角色能够创建、编辑或删除服务相关角色的权限。有关更多信息，请参阅*《IAM 用户指南》*中的[服务相关角色权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#service-linked-role-permissions)。

## 创建 VPC 的服务相关角色
<a name="create-slr"></a>

您无需手动创建服务关联角色。当您通过 AWS 管理控制台、AWS CLI 或 AWS API 创建使用“区域”可用性模式的 NAT 网关时，VPC 会为您创建该服务相关角色。

**重要**  
如果您在其他使用此角色支持的功能的服务中完成某个操作，此服务关联角色可以出现在您的账户中。此外，如果您在 2017 年 1 月 1 日（开始支持服务相关角色的日期）之前已使用 VPC 服务，则 VPC 已在您的账户中创建了 AWSServiceRoleForNATGateway 角色。要了解更多信息，请参阅[我的 AWS 账户中出现新角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_roles.html#troubleshoot_roles_new-role-appeared)。

如果您删除该服务关联角色，然后需要再次创建，您可以使用相同流程在账户中重新创建此角色。当您创建使用“区域”可用性模式的 NAT 网关时，VPC 会再次为您创建该服务相关角色。

您还可以使用 IAM 控制台创建具有 **AWSServiceRoleForNATGateway** 使用案例的服务相关角色。在 AWS CLI 或 AWS API 中，使用 `ec2-nat-gateway.amazonaws.com` 服务名称创建服务相关角色。有关更多信息，请参阅《IAM 用户指南》中的[创建服务相关角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#create-service-linked-role)**。如果您删除了此服务相关角色，可以使用同样的过程再次创建角色。

## 编辑 VPC 的服务相关角色
<a name="edit-slr"></a>

VPC 不允许您编辑 AWSServiceRoleForNATGateway 服务相关角色。创建服务关联角色后，您将无法更改角色的名称，因为可能有多种实体引用该角色。但是可以使用 IAM 编辑角色描述。有关更多信息，请参阅《IAM 用户指南》**中的[编辑服务关联角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#edit-service-linked-role)。

## 删除 VPC 的服务相关角色
<a name="delete-slr"></a>

如果您不再需要使用某个需要服务相关角色的功能或服务，我们建议您删除该角色。这样您就没有未被主动监控或维护的未使用实体。但是，您必须先清除服务相关角色的资源，然后才能手动删除它。

**注意**  
如果在您尝试删除资源时，VPC 服务正在使用该角色，则删除操作可能会失败。如果发生这种情况，请等待几分钟后重试。

**删除 AWSServiceRoleForNATGateway 使用的 VPC 资源**
+ 在所有已部署区域 NAT 网关的区域删除所有区域 NAT 网关。

**使用 IAM 手动删除服务关联角色**

使用 IAM 控制台、AWS CLI 或 AWS API 删除 AWSServiceRoleForNATGateway 服务相关角色。有关更多信息，请参阅《IAM 用户指南》**中的[删除服务相关角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#delete-service-linked-role)。

## 支持 VPC 服务相关角色的区域
<a name="slr-regions"></a>

VPC 在提供该服务的所有区域均支持使用服务相关角色。有关更多信息，请参阅 [AWS 区域和端点](https://docs.aws.amazon.com/general/latest/gr/rande.html)。

VPC 并非在提供该服务的每个区域都支持使用服务相关角色。您可以在以下区域中使用 AWSServiceRoleForNATGateway 角色。


|  区域名称 | 区域标识 | VPC 中的支持 | 
| --- | --- | --- | 
| 美国东部（弗吉尼亚州北部） | us-east-1 | 是 | 
| 美国东部（俄亥俄州） | us-east-2 | 是 | 
| 美国西部（北加利福尼亚） | us-west-1 | 是 | 
| 美国西部（俄勒冈州） | us-west-2 | 是 | 
| 非洲（开普敦） | af-south-1 | 是 | 
| 亚太地区（香港） | ap-east-1 | 是 | 
| 亚太地区（台北） | ap-east-2 | 是 | 
| 亚太地区（雅加达） | ap-southeast-3 | 是 | 
| 亚太地区（孟买） | ap-south-1 | 是 | 
| 亚太地区（海得拉巴） | ap-south-2 | 是 | 
| 亚太地区（大阪） | ap-northeast-3 | 是 | 
| 亚太地区（首尔） | ap-northeast-2 | 是 | 
| 亚太地区（新加坡） | ap-southeast-1 | 是 | 
| 亚太地区（悉尼） | ap-southeast-2 | 是 | 
| 亚太地区（东京） | ap-northeast-1 | 是 | 
| 亚太地区（墨尔本） | ap-southeast-4 | 是 | 
| 亚太地区（马来西亚） | ap-southeast-5 | 是 | 
| 亚太地区（新西兰） | ap-southeast-6 | 是 | 
| 亚太地区（泰国） | ap-southeast-7 | 是 | 
| 加拿大（中部） | ca-central-1 | 是 | 
| 加拿大西部（卡尔加里） | ca-west-1 | 是 | 
| 欧洲地区（法兰克福） | eu-central-1 | 是 | 
| 欧洲（苏黎世） | eu-central-2 | 是 | 
| 欧洲地区（爱尔兰） | eu-west-1 | 是 | 
| 欧洲地区（伦敦） | eu-west-2 | 是 | 
| 欧洲地区（米兰） | eu-south-1 | 是 | 
| 欧洲（西班牙） | eu-south-2 | 是 | 
| 欧洲地区（巴黎） | eu-west-3 | 是 | 
| 欧洲地区（斯德哥尔摩） | eu-north-1 | 是 | 
| 以色列（特拉维夫） | il-central-1 | 是 | 
| 中东（巴林） | me-south-1 | 是 | 
| 中东（阿联酋） | me-central-1 | 是 | 
| 中东（沙特阿拉伯） | me-west-1 | 是 | 
| 墨西哥（中部） | mx-central-1 | 是 | 
| 南美洲（圣保罗） | sa-east-1 | 是 | 
| AWS GovCloud（美国东部） | us-gov-east-1 | 否 | 
| AWS GovCloud（美国西部） | us-gov-west-1 | 否 | 

# Amazon VPC 中的基础设施安全性
<a name="infrastructure-security"></a>

作为一项托管服务，Amazon Virtual Private Cloud 享受 AWS 全球网络安全的保护。有关 AWS 安全服务以及 AWS 如何保护基础设施的信息，请参阅 [AWS 云安全性](https://aws.amazon.com/security/)。要按照基础设施安全最佳实践设计您的 AWS 环境，请参阅《安全性支柱 AWS Well‐Architected Framework》中的 [基础设施保护](https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/infrastructure-protection.html)**。

您可以使用 AWS 发布的 API 调用通过网络访问 Amazon VPC。客户端必须支持以下内容：
+ 传输层安全性协议（TLS）。我们要求使用 TLS 1.2，建议使用 TLS 1.3。
+ 具有完全向前保密（PFS）的密码套件，例如 DHE（临时 Diffie-Hellman）或 ECDHE（临时椭圆曲线 Diffie-Hellman）。大多数现代系统（如 Java 7 及更高版本）都支持这些模式。

## 网络隔离
<a name="network-isolation"></a>

虚拟私有云（VPC）是 AWS 云内您自己的逻辑隔离区域中的虚拟网络。可以使用单独的 VPC 按工作负载或组织实体隔离基础设施。

子网是 VPC 中的 IP 地址范围。在启动实例时，您可以在 VPC 上的子网中启动该实例。可以使用子网隔离单个 VPC 中的应用程序层（例如，Web、应用程序和数据库）。如果不应直接从 Internet 访问实例，请使用私有子网访问。

您可以使用 [AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/)，来让 VPC 中的资源可以使用私有 IP 地址连接到 AWS 服务，如同这些服务直接在您的 VPC 中托管。因此，您无需使用互联网网关或 NAT 设备即可访问 AWS 服务。

## 控制网络流量
<a name="control-network-traffic"></a>

请考虑使用以下方法来控制到 VPC 中资源（例如 EC2 实例）的网络流量：
+ 将 [安全组](vpc-security-groups.md) 作为主要机制来控制对 VPC 的网络访问。必要时可使用 [网络 ACL](vpc-network-acls.md) 来实现无状态的粗略网络控制。安全组能够执行有状态数据包筛选，以及创建引用其他安全组的规则，因此其功能比网络 ACL 更丰富。将网络 ACL 作为辅助控制机制（例如拒绝特定的流量子集），或者作为高级别的子网防护机制时，也可能非常有效。此外，由于网络 ACL 将应用于整个子网，因此可以用作深度防御机制，以防实例在没有正确配置安全组的情况下启动。
+ 如果不应直接从 Internet 访问实例，请使用私有子网访问。使用堡垒主机或 NAT 网关从私有子网中的实例访问互联网。
+ 配置子网[路由表](VPC_Route_Tables.md)，其中应包含能够支持连接需求的最低网络路由。
+ 考虑使用其他安全组或网络接口，独立于常规应用程序流量来控制和审计 Amazon EC2 实例管理流量。这样，您可以实施用于更改控制的特殊 IAM 策略，从而更轻松地审计对安全组规则或自动化规则验证脚本进行的更改。此外，使用多个网络接口还提供了额外的网络流量控制选择，包括能够创建基于主机的路由策略或利用基于分配到子网的网络接口的其他 VPC 子网路由规则。
+ 使用 AWS Virtual Private Network 或 Direct Connect 建立从远程网络到 VPC 的私有连接。有关更多信息，请参阅[网络到 Amazon VPC 的连接选项](https://docs.aws.amazon.com/whitepapers/latest/aws-vpc-connectivity-options/network-to-amazon-vpc-connectivity-options.html)。
+ 使用 [VPC Flow Logs](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html) 监控到达实例的流量。
+ 使用 [AWS Security Hub CSPM](https://aws.amazon.com/security-hub/) 检查来自实例的意外网络访问。
+ 使用 [AWS Network Firewall](network-firewall.md) 来保护 VPC 中的子网，防止常见的网络威胁。

## 比较安全组和网络 ACL
<a name="VPC_Security_Comparison"></a>

下表概述了安全组和网络 ACL 之间的基本差异。


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

下图展示了由安全组和网络 ACL 提供的安全层。例如，来自互联网网关的数据流会使用路由表中的路由，路由到合适的子网。与子网关联的网络 ACL 规则控制允许进入子网的数据流。与实例关联的安全组规则控制允许进入实例的数据流。

![\[使用安全组和网络 ACL 控制数据流\]](http://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/images/security-comparison.png)


您只能使用安全组保护您的实例。但是，您可以添加网络 ACL 作为额外的防御层。有关更多信息，请参阅 [示例：控制对子网中的实例的访问](nacl-examples.md)。

# 使用安全组控制指向 AWS 资源的流量
<a name="vpc-security-groups"></a>

*安全组*控制允许到达和离开与其关联资源的流量。例如，在将安全组与 EC2 实例关联后，它将控制该实例的入站和出站流量。

创建 VPC 时，它带有一个默认安全组。您可以为 VPC 创建额外的安全组，每个安全组都具有自己的入站和出站规则。您可以针对每条入站规则指定来源、端口范围和协议。您可以针对每条出站规则指定目的地、端口范围和协议。

下图显示了一个具有一个子网、一个互联网网关和一个安全组的 VPC。子网包含了一个 EC2 实例。将安全组分配给实例。安全组起到虚拟防火墙的作用。到达实例的唯一流量是得到安全组规则允许的流量。例如，如果安全组包含一条允许从您的网络到实例的 ICMP 流量的规则，则您可以从您的计算机对该实例进行 ping 操作。如果安全组未包含允许 SSH 流量的规则，则您无法使用 SSH 连接到您的实例。

![\[具有 2 个子网、2 个安全组的 VPC，子网中的服务器关联了不同的安全组\]](http://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/images/security-group-overview.png)


**Topics**
+ [安全组基本信息](#security-group-basics)
+ [安全组示例](#security-group-example-details)
+ [安全组规则](security-group-rules.md)
+ [默认安全组](default-security-group.md)
+ [创建安全组](creating-security-groups.md)
+ [配置安全组规则](working-with-security-group-rules.md)
+ [删除安全组](deleting-security-groups.md)
+ [将安全组与多个 VPC 关联](security-group-assoc.md)
+ [与 AWS Organizations 共享安全组](security-group-sharing.md)

**定价**  
使用安全组不收取任何额外费用。

## 安全组基本信息
<a name="security-group-basics"></a>
+ 如果使用[安全组 VPC 关联功能](security-group-assoc.md)将安全组关联到同一区域中的其他 VPC，则可以将安全组分配给与安全组在同一 VPC 中创建的资源或其他 VPC 中的资源。您还可以为单个资源分配多个安全组。
+ 创建安全组时，您必须为其提供名称和描述。以下规则适用：
  + 安全组名称在 VPC 中必须是唯一的。
  + 安全组名称不区分大小写。
  + 名称和描述的长度最多为 255 个字符。
  + 名称和描述只能使用以下字符：a-z、A-Z、0-9、空格和 .\$1-:/()\$1,@[]\$1=&;\$1\$1\$1\$1\$1。
  + 如果名称后面带有空格，我们在保存名称时会删除这些空格。例如，如果您输入“Test Security Group”作为名称，我们会将其存储为“Test Security Group”。
  + 安全组名称不能以 `sg-` 开头。
+ 安全组是有状态的。例如，如果您从实例发送请求，则无论入站安全组规则如何，都允许该请求的响应流量到达该实例。如果是为响应已允许的入站流量，则该响应可以离开实例，此时可忽略出站规则。
+ 安全组不会筛选发往和来自以下位置的流量：
  + Amazon 域名服务 (DNS)
  + Amazon 动态主机配置协议 (DHCP)
  + Amazon EC2 实例元数据
  + Amazon ECS 任务元数据端点
  + Windows 实例的许可证激活
  + Amazon Time Sync Service
  + 默认 VPC 路由器使用的预留 IP 地址
+ 系统对您为每个 VPC 创建的安全组数、向每个安全组添加的规则数以及与网络接口关联的安全组数设有配额。有关更多信息，请参阅 [Amazon VPC 配额](amazon-vpc-limits.md)。

**最佳实践**
+ 仅授权特定 IAM 主体创建和修改安全组。
+ 创建所需的最小数量的安全组，以降低出错风险。使用每个安全组，对具有相似功能和安全要求的资源的访问权限进行管理。
+ 在为端口 22（SSH）或 3389（RDP）添加入站规则以便访问 EC2 实例时，仅授权特定 IP 地址范围。如果您指定 0.0.0.0/0（IPv4）和 ::/（IPv6），则任何人都可以使用指定协议从任何 IP 地址访问您的实例。
+ 请勿设置较大端口范围。确保通过每个端口的访问仅限于需要访问的源或目的地。
+ 您可以考虑建立网络 ACL，使其规则与您的安全组规则相似，以便为 VPC 添加额外安全层。有关安全组和网络 ACL 之间的差别的更多信息，请参见 [比较安全组和网络 ACL](infrastructure-security.md#VPC_Security_Comparison)。

## 安全组示例
<a name="security-group-example-details"></a>

以下示意图显示了具有两个安全组和两个子网的 VPC。子网 A 中的实例具有相同的连接要求，因此这些实例与安全组 1 相关联。子网 B 中的实例具有相同的连接要求，因此这些实例与安全组 2 相关联。安全组规则允许流量通过，如下所示：
+ 安全组 1 中的第一条入站规则允许从指定地址范围（例如，您自己网络中的范围）到子网 A 中实例的 SSH 流量。
+ 安全组 1 中的第二条入站规则允许子网 A 中的实例使用任何协议和端口进行相互通信。
+ 安全组 2 中的第一条入站规则允许子网 B 中的实例使用任何协议和端口进行相互通信。
+ 安全组 2 中的第二条入站规则允许子网 A 中的实例使用 SSH 与子网 B 中的实例进行通信。
+ 两个安全组都使用默认出站规则，以允许所有流量。

![\[在两个子网中包含了两个安全组和服务器的 VPC。子网 A 中的服务器与安全组 1 相关联。子网 B 中的服务器与安全组 2 相关联。\]](http://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/images/security-group-details.png)


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

安全组的规则控制允许达到与该安全组相关联资源的入站流量。这些规则还控制允许离开实例的出站流量。

您可以添加或删除安全组规则（又被称为*授权*或*撤销*入站或出站访问）。适用于入站数据流（进入）或出站数据流（离开）的规则。您可以授予对特定源或目标的访问权限。

**Topics**
+ [安全组规则基本信息](#security-group-rule-characteristics)
+ [安全组规则的组成部分](#security-group-rule-components)
+ [引用安全组](#security-group-referencing)
+ [安全组大小](#security-group-size)
+ [过时的安全组规则](#vpc-stale-security-group-rules)

## 安全组规则基本信息
<a name="security-group-rule-characteristics"></a>

以下是您的安全组规则的特征：
+ 您可以指定允许规则，但不可指定拒绝规则。
+ 当您首次创建安全组时，它没有入站规则。因此，在将入站规则添加到安全组之前，不允许入站流量。
+ 首次创建安全组时，它具有允许来自资源的所有出站流量的出站规则。您可以删除该规则并添加只允许特定出站流量的出站规则。如果您的安全组没有出站规则，则不允许出站流量。
+ 当您将多个安全组与一个资源相关联时，来自每个安全组的规则将聚合形成一组规则，用于确定是否允许访问。
+ 添加、更新或删除规则时，您的更改会自动应用于与安全组关联的所有资源。有关说明，请参阅[配置安全组规则](working-with-security-group-rules.md)。
+ 某些规则变更产生的影响可能会取决于跟踪流量的方式。有关更多信息，请参阅《*Amazon EC2 用户指南*》中的[连接跟踪](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html)。
+ 当您创建安全组规则时，AWS 会将唯一 ID 分配给规则。当您使用 API 或 CLI 修改或删除某规则时，您可以使用该规则的 ID。

**限制**  
安全组无法阻止发送至 Route 53 Resolver 或来自其的 DNS 请求，Route 53 Resolver 有时称为“VPC\$12 IP 地址”（请参阅《Amazon Route 53 开发人员指南》**中的 [Amazon Route 53 Resolver](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver.html)）或 [AmazonProvidedDNS](DHCPOptionSet.md)。要通过 Route 53 Resolver 筛选 DNS 请求，请使用 [Route 53 Resolver DNS Firewall](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-dns-firewall.html)。

## 安全组规则的组成部分
<a name="security-group-rule-components"></a>

以下是安全组入站和出站规则的组件：
+ **协议**：允许的协议。最常见的协议为 6 (TCP)、17 (UDP) 和 1 (ICMP)。
+ **端口范围**：对于 TCP、UDP 或自定义协议，允许的端口范围。您可以指定单个端口号（例如 `22`）或端口号范围（例如`7000-8000`）。
+ **ICMP 类型和代码**：对于 ICMP，ICMP 类型和代码。例如，对于 ICMP 回应请求使用类型 8，对 ICMPv6 回显请求使用键入 128。有关更多信息，请参阅《Amazon EC2 用户指南》**中的[用于 ping/ICMP 的规则](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-rules-reference.html#sg-rules-ping)。
+ **源或目标**：允许的流量的源（入站规则）或目标（出站规则）。指定下列项之一：
  + 一个 IPv4 地址。您必须使用 `/32` 前缀长度。例如 `203.0.113.1/32`。
  + 一个 IPv6 地址。您必须使用 `/128` 前缀长度。例如 `2001:db8:1234:1a00::123/128`。
  + 采用 CIDR 块表示法的 IPv4 地址范围。例如 `203.0.113.0/24`。
  + 采用 CIDR 块表示法的 IPv6 地址范围。例如 `2001:db8:1234:1a00::/64`。
  + 前缀列表的 ID。例如 `pl-1234abc1234abc123`。有关更多信息，请参阅 [托管前缀列表](managed-prefix-lists.md)。
  + 安全组的 ID。例如 `sg-1234567890abcdef0`。有关更多信息，请参阅 [引用安全组](#security-group-referencing)。
+ **（可选）描述**：您可以添加规则的说明；这可帮助您在以后识别它。描述的长度最多为 255 个字符。允许的字符包括 a-z、A-Z、0-9、空格和 .\$1-:/()\$1,@[]\$1=;\$1\$1\$1\$1\$1。

有关示例，请参阅《Amazon EC2 用户指南》**中[针对不同用例的安全组规则](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-rules-reference.html)。

## 引用安全组
<a name="security-group-referencing"></a>

当您指定一个安全组作为规则的源或目标时，该规则会影响与安全组关联的所有实例。实例可以使用其私有 IP 地址，通过指定的协议和端口沿指定方向进行通信。

例如，下面的内容表示安全组的入站规则，该入站规则引用了安全组 sg-0abcdef1234567890。此规则允许来自与 sg-0abcdef1234567890 关联的实例的入站 SSH 流量。


| 来源 | 协议 | 端口范围 | 
| --- | --- | --- | 
| sg-0abcdef1234567890 | TCP | 22 | 

在安全组规则中引用安全组时，请注意以下几点：
+ 如果满足以下任一条件，则可以在其他安全组的入站规则中引用该安全组：
  + 与同一 VPC 关联的安全组。
  + 与安全组关联的 VPC 之间存在对等连接。
  + 与安全组关联的 VPC 之间存在中转网关。
+ 如果满足以下任一条件，则可以在出站规则中引用安全组：
  + 与同一 VPC 关联的安全组。
  + 与安全组关联的 VPC 之间存在对等连接。
+ 不得向引用安全组的安全组添加引用安全组中的任何规则。
+ 对于入站规则，与安全组关联的 EC2 实例可以接收来自与引用安全组关联的 EC2 实例的网络接口私有 IP 地址的入站流量。
+ 对于出站规则，与安全组关联的 EC2 实例可以向与引用安全组关联的 EC2 实例的网络接口私有 IP 地址发送出站流量。
+ 我们不授权引用的安全组执行以下操作：`AuthorizeSecurityGroupIngress`、`AuthorizeSecurityGroupEgress`、`RevokeSecurityGroupIngress` 和 `RevokeSecurityGroupEgress`。我们只检查安全组是否存在。这将产生以下结果：
  + 在这些操作的 IAM 策略中指定引用的安全组没有任何效果。
  + 当引用的安全组由另一个账户拥有时，所有者账户不会收到这些操作的 CloudTrail 事件。

**限制**

如果您将路由配置为通过中间设备在不同子网中的两个实例之间转发流量，则必须确保这两个实例的安全组允许流量在实例之间流动。每个实例的安全组必须引用另一个实例的私有 IP 地址或包含另一个实例的子网的 CIDR 范围作为源。如果您引用另一个实例的安全组作为源，则安全组不允许流量在实例之间流动。

**示例**

下图显示了一个在两个可用区内分布子网，此外还拥有一个互联网网关和一个应用程序负载均衡器的 VPC。每个可用区都有一个用于 Web 服务器的公有子网和一个用于数据库服务器的私有子网。负载均衡器、Web 服务器和数据库服务器有单独的安全组。创建以下安全组规则以允许流量。
+ 向负载均衡器安全组添加规则，以允许来自互联网的 HTTP 和 HTTPS 流量。来源是 0.0.0.0/0。
+ 向 Web 服务器的安全组添加规则，以仅允许来自负载均衡器的 HTTP 和 HTTPS 流量。来源是负载均衡器的安全组。
+ 向数据库服务器的安全组添加规则，以允许来自 Web 服务器的数据库请求。来源是 Web 服务器的安全组。

![\[包含 Web 和数据库服务器、安全组、互联网网关以及负载均衡器的架构\]](http://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/images/security-group-referencing.png)


## 安全组大小
<a name="security-group-size"></a>

源或目标的类型决定了将每条规则计入每个安全组可以拥有的最大规则数量的方式。
+ 引用 CIDR 块的规则计为一条规则。
+ 无论引用的安全组大小如何，引用其他安全组的规则均计为一条规则。
+ 引用客户托管式前缀列表的规则计为前缀列表的最大大小。例如，如果前缀列表的最大大小为 20，则引用此前缀列表的规则计为 20 条规则。
+ 引用 AWS 托管式前缀列表的规则计为前缀列表的权重。例如，如果前缀列表的权重为 10，则引用此前缀列表的规则计为 10 条规则。有关更多信息，请参阅 [可用的 AWS 托管前缀列表](working-with-aws-managed-prefix-lists.md#available-aws-managed-prefix-lists)。

## 过时的安全组规则
<a name="vpc-stale-security-group-rules"></a>

如果您的 VPC 具有与其他 VPC 的 VPC 对等连接，或者如果它使用其他账户共享的 VPC，则您的 VPC 中的安全组规则可引用该对等 VPC 或共享 VPC 中的安全组。这样，与所引用安全组关联的资源以及与进行引用的安全组关联的资源可以相互通信。有关更多信息，请参阅《Amazon VPC 对等指南》**中的[更新您的安全组以引用对等安全组](https://docs.aws.amazon.com/vpc/latest/peering/vpc-peering-security-groups.html)。

如果安全组规则引用了对等 VPC 或共享 VPC 中的安全组，而共享 VPC 中的安全组或 VPC 对等连接已被删除，则该安全组规则将会标记为过时。与任何其他的安全组规则一样，您可以删除过时的安全组规则。

# 您的 VPC 的默认安全组
<a name="default-security-group"></a>

您的默认 VPC 和您创建的任何 VPC 都带有默认安全组。默认安全组的名称为“default”。

建议您为特定资源或资源组创建安全组，而不要使用默认安全组。然而如果您在创建时未将某些资源关联到安全组，我们会将其关联到默认安全组。例如，如果您在启动 EC2 实例时未指定安全组，则我们会将该实例关联到 VPC 的默认安全组。

## 默认安全组基本信息
<a name="default-security-group-basics"></a>
+ 您可以更改默认安全组的规则。
+ 您无法删除默认安全组。如果您尝试删除默认安全组，会显示以下错误代码：`Client.CannotDelete`。

## 默认规则
<a name="default-security-group-default-rules"></a>

下表介绍默认安全组的默认入站规则。


| 来源 | 协议 | 端口范围 | 说明 | 
| --- | --- | --- | --- | 
| sg-1234567890abcdef0  | 全部 | 全部 | 允许来自分配给此安全组的所有资源的入站流量。源为此安全组的 ID。 | 

下表介绍默认安全组的默认出站规则。


| 目标 | 协议 | 端口范围 | 描述 | 
| --- | --- | --- | --- | 
| 0.0.0.0/0 | All | All | 允许所有的出站 IPv4 流量。 | 
| ::/0 | All | All | 允许所有的出站 IPv6 流量。仅当 VPC 具有关联的 IPv6 CIDR 块时才添加此规则。 | 

## 示例
<a name="default-security-group-example"></a>

下图显示了一个具有一个默认安全组、一个互联网网关和一个 NAT 网关的 VPC。默认安全组仅包含其默认规则，并且与在 VPC 中运行的两个 EC2 实例相关联。在此场景中，每个实例都可以在所有端口和协议上接收来自另一个实例的入站流量。默认规则不允许这些实例接收来自互联网网关或 NAT 网关的流量。如果您的实例必须接收更多流量，则建议您使用所需规则创建安全组，并将新的安全组与实例关联，而不是与默认安全组。

![\[具有 2 个子网、1 个默认安全组、2 个 EC2 实例、互联网网关和 NAT 网关的 VPC\]](http://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/images/default-security-group.png)


# 为 VPC 创建安全组
<a name="creating-security-groups"></a>

您的虚拟私有云（VPC）带有默认的安全组。您可以创建额外的安全组。安全组只能与创建它的 VPC 中的资源结合使用。

在默认情况下，新安全组起初只有一条出站规则，即允许所有通信离开资源。您必须添加规则，以便允许任何入站数据流或限制出站数据流。您可以在创建安全组时添加安全组规则，也可以稍后再添加。有关更多信息，请参阅 [安全组规则](security-group-rules.md)。

**所需的权限**

在开始之前，请确保您拥有所需权限。有关更多信息，请参阅下列内容：
+ [管理安全组](vpc-policy-examples.md#vpc-security-groups-iam)
+ [管理安全组规则](vpc-policy-examples.md#vpc-security-group-rules-iam)

**使用控制台创建安全组**

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

1. 在导航窗格中，选择**安全组**。

1. 选择**Create security group**（创建安全组）。

1. 输入安全组的名称和描述。在创建安全组后，您无法更改其名称和描述。

1. 对于 **VPC**，请选择要在其中创建资源并将其与安全组关联的 VPC。

1. （可选）要添加入站规则，请选择**入站规则**。对于每条规则，请选择**添加规则**并指定协议、端口和来源。有关更多信息，请参阅 [配置安全组规则](working-with-security-group-rules.md)。

1. （可选）要添加出站规则，请选择**出站规则**。对于每条规则，请选择**添加规则**并指定协议、端口和目标。

1. （可选）若要添加标签，请选择 **Add new tag**（添加新标签），然后输入该标签的键和值。

1. 选择**创建安全组**。

**使用 AWS CLI 创建安全组**  
使用 [create-security-group](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-security-group.html) 命令。

此外，您可以通过复制现有安全组来创建新安全组。复制安全组时，我们会自动添加与原始安全组相同的入站和出站规则，也会使用与原始安全组相同的 VPC。您可以为新安全组输入名称和描述。您可以选择另一个 VPC，也可以根据需要修改入站和出站规则。不过，您无法将安全组从一个区域复制到另一区域。

**根据现有安全组创建安全组**

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

1. 在导航窗格中，选择**安全组**。

1. 选择一个安全组。

1. 依次选择**操作**、**复制到新安全组**。

1. 输入安全组的名称和描述。

1. （可选）根据需要选择另一个 VPC。

1. （可选）根据需要添加、删除或编辑安全组规则。

1. 选择**创建安全组**。

# 配置安全组规则
<a name="working-with-security-group-rules"></a>

创建安全组后，即可添加、更新或删除安全组的规则。在添加、更新或删除规则时，更改将自动应用于与安全组关联的资源。

**所需的权限**  
在开始之前，请确保您拥有所需权限。有关更多信息，请参阅 [管理安全组规则](vpc-policy-examples.md#vpc-security-group-rules-iam)。

**协议和端口**
+ 使用控制台，当您选择预定义的类型时，将为您指定**协议**和**端口范围**。要输入端口范围，必须选择以下自定义类型之一：**自定义 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` 选项。

**警告**  
如果您选择 **Anywhere-IPv4**，则将允许来自所有 IPv4 地址的流量。如果您选择 **Anywhere-IPv6**，则将允许来自所有 IPv6 地址的流量。最佳做法是仅授权需要访问资源的特定 IP 地址范围。

**使用控制台配置安全组规则**

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

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) 和 [authorize-security-group-egress](https://docs.aws.amazon.com/cli/latest/reference/ec2/authorize-security-group-egress.html) 命令。
+ **删除** – 使用 [revoke-security-group-ingress](https://docs.aws.amazon.com/cli/latest/reference/ec2/revoke-security-group-ingress.html) 和 [revoke-security-group-egress](https://docs.aws.amazon.com/cli/latest/reference/ec2/revoke-security-group-egress.html) 命令。
+ **修改** – 使用 [modify-security-group-rules](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-security-group-rules.html)、[update-security-group-rule-descriptions-ingress](https://docs.aws.amazon.com/cli/latest/reference/ec2/update-security-group-rule-descriptions-ingress.html) 和 [update-security-group-rule-descriptions-egress](https://docs.aws.amazon.com/cli/latest/reference/ec2/update-security-group-rule-descriptions-egress.html) 命令。

# 删除安全组
<a name="deleting-security-groups"></a>

使用完创建的安全组后，可以将其删除。

**要求**
+ 安全组无法与任何资源关联。
+ 其他安全组中的规则无法引用安全组。
+ 该安全组不能是 VPC 的默认安全组。

**使用控制台删除安全组**

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

1. 在导航窗格中，选择**安全组**。

1. 选择安全组，然后依次选择**操作**、**删除安全组**。

1. 如果选择了多个安全组，系统会提示您进行确认。如果某些安全组无法删除，我们会显示每个安全组的状态，表明是否会被删除。要确认删除操作，请输入**删除**。

1. 选择**删除**。

**使用 AWS CLI 删除安全组**  
使用 [delete-security-group](https://docs.aws.amazon.com/cli/latest/reference/ec2/delete-security-group.html) 命令。

# 将安全组与多个 VPC 关联
<a name="security-group-assoc"></a>

如果您的工作负载在具有共同网络安全要求的多个 VPC 中运行，则可以使用安全组 VPC 关联功能将安全组与同一区域中的多个 VPC 关联。这样，您就可以在一个位置管理和维护账户中多个 VPC 的安全组。

![\[与两个 VPC 关联的安全组示意图。\]](http://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/images/sec-group-vpc-assoc.png)


上图显示包含两个 VPC 的 AWS 账户 A。每个 VPC 都有在私有子网中运行的工作负载。在这种情况下，VPC A 和 B 子网中的工作负载具有相同的网络流量要求，因此账户 A 可以使用安全组 VPC 关联功能将 VPC A 中的安全组与 VPC B 关联。对关联安全组进行的任何更新都会自动应用于 VPC B 子网中工作负载的流量。

**安全组 VPC 关联功能的要求**
+ 您必须拥有 VPC 或共享其中一个 VPC 子网才能将安全组与 VPC 关联。
+ VPC 和安全组必须位于同一 AWS 区域。
+ 您不能将默认安全组与其他 VPC 关联，也不能将安全组与默认 VPC 关联。
+ 安全组所有者和 VPC 所有者都可以查看安全组 VPC 关联。

**支持此功能的服务**
+ Amazon API Gateway（仅限 REST API）
+ AWS Auto Scaling
+ CloudFormation
+ Amazon EC2
+ Amazon EFS
+ Amazon EKS
+ Amazon FSx
+ AWS PrivateLink
+ Amazon Route 53
+ Elastic Load Balancing
  + 应用程序负载均衡器
  + 网络负载均衡器

## 将安全组与其他 VPC 关联
<a name="assoc-sg"></a>

本节介绍如何使用 AWS 管理控制台和 AWS CLI 将安全组与 VPC 关联。

------
#### [ AWS Management Console ]

**要将安全组与其他 VPC 关联**

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

1. 在左侧导航窗格中，选择**安全组**。

1. 选择安全组以查看详细信息。

1. 选择 **VPC 关联**选项卡。

1. 选择 **Associate VPC (关联 VPC)**。

1. 在 **VPC ID** 下，选择要与安全组关联的 VPC。

1. 选择 **Associate VPC (关联 VPC)**。

------
#### [ Command line ]

**要将安全组与其他 VPC 关联**

1. 使用 [associate-security-group-vpc](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/associate-security-group-vpc.html) 创建 VPC 关联。

1. 使用 [describe-security-group-vpc-associations](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/describe-security-group-vpc-associations.html) 查看 VPC 关联的状态，然后等待该状态变为 `associated`。

------

VPC 现已与安全组关联。

 例如，将 VPC 与安全组关联后，您可以[在 VPC 中启动一个实例并选择这一新的安全组](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/LaunchingAndUsingInstances.html)，或者[在现有安全组规则中引用此安全组](security-group-rules.md#security-group-referencing)。

## 取消安全组与其他 VPC 的关联
<a name="disassoc-sg"></a>

本节介绍如何使用 AWS 管理控制台和 AWS CLI 取消安全组与 VPC 的关联。如果您的目标是删除安全组，则可能需要这样做。如果安全组已关联，则无法将其删除。仅当关联的 VPC 中没有使用该安全组的网络接口时，您才能取消与该安全组的关联。

------
#### [ AWS Management Console ]

**要取消安全组与 VPC 的关联**

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

1. 在左侧导航窗格中，选择**安全组**。

1. 选择安全组以查看详细信息。

1. 选择 **VPC 关联**选项卡。

1. 选择**取消关联 VPC**。

1. 在 **VPC ID** 下，选择要与安全组取消关联的 VPC。

1. 选择**取消关联 VPC**。

1. 在 VPC 关联选项卡中查看取消关联的**状态**，然后等待该状态变为 `disassociated`。

------
#### [ Command line ]

**要取消安全组与 VPC 的关联**

1. 使用 [disassociate-security-group-vpc](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/disassociate-security-group-vpc.html) 取消与 VPC 的关联。

1. 使用 [describe-security-group-vpc-associations](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/describe-security-group-vpc-associations.html) 查看 VPC 取消关联的状态，然后等待该状态变为 `disassociated`。

------

VPC 现已取消与安全组的关联。

# 与 AWS Organizations 共享安全组
<a name="security-group-sharing"></a>

共享安全组功能使您能够与同一 AWS 区域中的其他 AWS Organizations 账户共享安全组，并使安全组可供这些账户使用。

下图演示如何使用共享安全组功能来简化 AWS Organizations 中的跨账户安全组管理：

![\[与共享 VPC 子网中的其他账户共享安全组的示意图。\]](http://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/images/sec-group-sharing.png)


此示意图显示属于同一组织的三个账户。账户 A 与账户 B 和账户 C 共享一个 VPC 子网。账户 A 使用共享安全组功能与账户 B 和账户 C 共享该安全组。然后，账户 B 和账户 C 在共享子网中启动实例时使用该安全组。这使账户 A 也能够管理该安全组；对安全组进行的任何更新都会应用于账户 B 和账户 C 在共享 VPC 子网中运行的资源。

**共享安全组功能的要求**
+ 此功能仅适用于 AWS Organizations 中同一组织的账户。必须在 AWS Organizations 中启用[资源共享](https://docs.aws.amazon.com/ram/latest/userguide/getting-started-sharing.html)。
+ 共享安全组的账户必须同时拥有 VPC 和安全组。
+ 您不能共享默认安全组。
+ 您无法共享位于默认 VPC 中的安全组。
+ 参与者账户可以在共享 VPC 中创建安全组，但无法共享这些安全组。
+ IAM 主体需要一组最低权限才能与 AWS RAM 共享一个安全组。使用 `AmazonEC2FullAccess` 和 `AWSResourceAccessManagerFullAccess` 托管 IAM 策略，确保 IAM 主体拥有共享和使用所共享安全组所需的权限。如果使用自定义 IAM 策略，则需要进行 `c2:PutResourcePolicy` 和 `ec2:DeleteResourcePolicy` 操作。这些是仅限权限的 IAM 操作。如果 IAM 主体未获得这些权限，则在尝试使用 AWS RAM 共享安全组时将出错。

**支持此功能的服务**
+ Amazon API Gateway
+ Amazon EC2
+ Amazon ECS
+ Amazon EFS
+ Amazon EKS
+ Amazon EMR
+ Amazon FSx
+ Amazon ElastiCache
+ AWS Elastic Beanstalk
+ AWS Glue
+ Amazon MQ
+ Amazon SageMaker AI
+ Elastic Load Balancing
  + 应用程序负载均衡器
  + 网络负载均衡器

**此功能如何影响现有的配额**

[安全组配额](amazon-vpc-limits.md#vpc-limits-security-groups)适用。但是，对于“每个网络接口的安全组数”配额，如果参与者在弹性网络接口（ENI）上同时使用自有和共享的组，则所有者和参与者的最低配额适用。

演示此功能如何影响配额的示例：
+ 所有者账户配额：每个接口 4 个安全组
+ 参与者账户配额：每个接口 5 个安全组。
+ 所有者与参与者共享的组 SG-O1、SG-O2、SG-O3、SG-O4、SG-O5。参与者在 VPC 中已经有自己的组：SG-P1、SG-P2、SG-P3、SG-P4、SG-P5。
+ 如果参与者创建 ENI 并且仅使用自己的组，则他们可以关联所有 5 个安全组（SG-P1、SG-P2、SG-P3、SG-P4、SG-P5），因为这是他们的配额。
+ 如果参与者创建 ENI 并在其上使用任何共享的组，则他们最多只能关联 4 个组。在这种情况下，此类 ENI 的配额是所有者和参与者的最低配额。可能的有效配置将如下所示：
  + SG-O1、SG-P1、SG-P2、SG-P3
  + SG-O1、SG-O2、SG-O3、SG-O4

## 共享安全组
<a name="share-sg-org"></a>

本节介绍如何使用 AWS 管理控制台和 AWS CLI 与组织中的其他账户共享安全组。

------
#### [ AWS Management Console ]

**要共享安全组**

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

1. 在左侧导航窗格中，选择**安全组**。

1. 选择安全组以查看详细信息。

1. 选择 **Sharing (共享)** 选项卡。

1. 选择**共享安全组**。

1. 选择**创建资源共享**。这样，AWS RAM 控制台就会打开，您将在其中为安全组创建资源共享。

1. 输入资源共享的**名称**。

1. 在**资源 – 可选**下，选择**安全组**。

1. 选择安全组。该安全组不能是默认安全组，也不能与默认 VPC 关联。

1. 选择**下一步**。

1. 查看允许主体执行的操作，然后选择**下一步**。

1. 在**主体 – 可选**下，选择**仅允许在企业内共享**。

1. 在**主体**下，选择以下主体类型之一，然后输入相应的数字：
   + **AWS 账户**：您的组织中账户的账号。
   + **组织**：AWS Organizations ID。
   + **组织单元 (OU)**：组织中 OU 的 ID。
   + **IAM 角色**：IAM 角色的 ARN。创建该角色的账户必须与创建此资源共享的账户属于同一组织。
   + **IAM 用户**：IAM 用户的 ARN。创建该用户的账户必须与创建此资源共享的账户属于同一组织。
   + **服务主体**：您不能与服务主体共享安全组。

1. 选择**添加**。

1. 选择**下一步**。

1. 选择**创建资源共享**。

1. 在**共享资源**下，等待看到**状态**为 `Associated`。如果安全组关联失败，则可能是由于上面列出的限制之一所致。查看安全组的详细信息以及详细信息页面上的**共享**选项卡，以查看与安全组不可共享的原因相关的所有消息。

1. 返回 VPC 控制台安全组列表。

1. 选择您共享的安全组。

1. 选择 **Sharing (共享)** 选项卡。您的 AWS RAM 资源应该在其中显示。如果未显示，则资源共享创建可能失败，您可能需要重新创建。

------
#### [ Command line ]

**要共享安全组**

1. 您必须先为想要与 AWS RAM 共享的安全组创建资源共享。有关如何使用 AWS CLI 创建与 AWS RAM 的资源共享的步骤，请参阅《AWS RAM User Guide》**中的 [Creating a resource share in AWS RAM](https://docs.aws.amazon.com/ram/latest/userguide/working-with-sharing-create.html) 

1. 要查看创建的资源共享关联，请使用 [get-resource-share-associations](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/get-resource-share-associations.html)。

------

安全组现已共享。您可以在同一 VPC 内的共享子网中[启动 EC2 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/LaunchingAndUsingInstances.html)时选择安全组。

## 停止共享安全组
<a name="stop-share-sg-org"></a>

本节介绍如何使用 AWS 管理控制台和 AWS CLI 停止与组织中的其他账户共享安全组。

------
#### [ AWS Management Console ]

**要停止共享安全组**

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

1. 在左侧导航窗格中，选择**安全组**。

1. 选择安全组以查看详细信息。

1. 选择 **Sharing (共享)** 选项卡。

1. 选择安全组资源共享，然后选择**停止共享**。

1. 选择**是的，停止共享**。

------
#### [ Command line ]

**要停止共享安全组**

使用 [delete-resource-share](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/delete-resource-share.html) 删除资源共享。

------

该安全组不再共享。在所有者停止共享安全组后，以下规则适用：
+ 现有的参与者弹性网络接口（ENI）将继续获取对已取消共享的安全组进行的任何安全组规则更新。取消共享只会阻止参与者与已取消共享组创建新关联。
+ 参与者无法再将已取消共享的安全组与其拥有的任何 ENI 关联。
+ 参与者可以描述和删除仍与已取消共享安全组关联的 ENI。
+ 如果参与者仍具有与已取消共享的安全组关联的 ENI，则所有者无法删除已取消共享的安全组。仅当参与者从其所有 ENI 取消关联（删除）安全组后，所有者才能删除该安全组。
+ 参与者不能使用与非共享安全组关联的 ENI 启动新的 EC2 实例。

# 使用网络访问控制列表控制子网流量
<a name="vpc-network-acls"></a>

*网络访问控制列表 (ACL) *在子网级别允许或拒绝特定的入站或出站流量。您可以使用 VPC 的默认网络 ACL，也可以为 VPC 创建自定义网络 ACL，使其规则与您安全组的规则相似，以便为您的 VPC 添加额外安全层。

使用网络 ACL 不会产生任何额外的费用。

以下示意图显示了具有两个子网的 VPC。每个子网都有网络 ACL。当流量（例如，来自对等 VPC、VPN 连接或互联网）进入 VPC 时，路由器会将流量发送到其目的地。网络 ACL A 确定哪些发往子网 1 的流量可以进入子网 1，哪些发往子网 1 位置以外的流量可以离开子网 1。同样，网络 ACL B 确定哪些流量可以进入和离开子网 2。

![\[具有两个子网的 VPC 和每个子网的网络 ACL。\]](http://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/images/network-acl.png)


有关安全组和网络 ACL 之间区别的更多信息，请参阅 [比较安全组和网络 ACL](infrastructure-security.md#VPC_Security_Comparison)。

**Topics**
+ [网络 ACL 基础知识](#nacl-basics)
+ [网络 ACL 规则](nacl-rules.md)
+ [VPC 的默认网络 ACL](default-network-acl.md)
+ [您的 VPC 的自定义网络 ACL](custom-network-acl.md)
+ [路径 MTU 发现和网络 ACL](path_mtu_discovery.md)
+ [为您的 VPC 创建网络 ACL](create-network-acl.md)
+ [管理 VPC 的网络 ACL 关联](network-acl-associations.md)
+ [删除 VPC 的网络 ACL](delete-network-acl.md)
+ [示例：控制对子网中的实例的访问](nacl-examples.md)

## 网络 ACL 基础知识
<a name="nacl-basics"></a>

以下是开始之前需要了解的有关网络 ACL 的基本信息。

**网络 ACL 关联**
+ 您的 VPC 中的每个子网都必须与一个网络 ACL 相关联。如果您没有明确地将子网与网络 ACL 关联，则子网将自动与[默认网络 ACL](default-network-acl.md) 关联。
+ 您可以创建[自定义网络 ACL](custom-network-acl.md) 并将其与子网相关联，以允许或拒绝子网级别的特定入站或出站流量。
+ 您可以将网络 ACL 与多个子网关联。但是，一个子网一次只能与一个网络 ACL 关联。当您将一个网络 ACL 与一个子网关联时，将删除之前的关联。

**网络 ACL 规则**
+ 网络 ACL 具有入站规则和出站规则。[每个网络 ACL 的规则数量有配额（或限制）](amazon-vpc-limits.md#vpc-limits-nacls)。每条规则都可以接受或拒绝流量。每条规则都有介于 1 到 32766 之间的数字。在决定是否接受或拒绝流量时，我们按顺序评估规则，从编号最低的规则开始。如果流量与规则匹配，则应用该规则，并且我们不会评估其他任何规则。我们建议您首先以增量方式创建规则（例如，以 10 或 100 的增量增加），以便日后需要时插入新的规则。
+ 在流量进入和离开子网时，我们会评估网络 ACL 规则，而不是在子网内路由流量时进行评估。
+ NACL *无状态*，这意味着不会保存有关先前发送或接收的流量的信息。例如，如果您创建了 NACL 规则，允许流向子网的特定入站流量，则不会自动允许对该流量做出响应。这与安全组的工作原理截然不同。安全组*有状态*，这意味着会保存有关先前发送或接收的流量的信息。例如，如果安全组允许流向 EC2 实例的入站流量，则将自动允许响应，不受任何出站安全组规则的影响。

**限制**
+ 网络 ACL 有配额（也称为限制）。有关更多信息，请参阅 [网络 ACL](amazon-vpc-limits.md#vpc-limits-nacls)。
+ 网络 ACL 无法阻止发往或来自 Route 53 Resolver 的 DNS 请求（也称为 VPC\$12 IP 地址或 AmazonProvidedDNS）。要通过 Route 53 Resolver 筛选 DNS 请求，您可以启用 [Route 53 Resolver DNS 防火墙](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-dns-firewall.html)。
+ 网络 ACL 无法阻止访问实例元数据服务（IMDS）的流量。要管理对 IMDS 的访问权限，请参阅《Amazon EC2 用户指南》中的 [配置实例元数据选项](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-options.html)**。
+ 网络 ACL 不会筛选发往和来自以下位置的流量：
  + Amazon 域名服务 (DNS)
  + Amazon 动态主机配置协议 (DHCP)
  + Amazon EC2 实例元数据
  + Amazon ECS 任务元数据端点
  + Windows 实例的许可证激活
  + Amazon Time Sync Service
  + 默认 VPC 路由器使用的预留 IP 地址

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

您可以在默认网络 ACL 中添加或删除规则，或为您的 VPC 创建额外网络 ACL。当您在网络 ACL 中添加或删除规则时，更改也会自动应用到与其相关联的子网。

以下为部分网络 ACL 规则：
+ **规则编号**。规则评估从编号最低的规则起开始进行。只要有一条规则与流量匹配，即应用该规则，并忽略与之冲突的任意更大编号的规则。
+ **类型**。流量的类型，例如 SSH。您也可以指定所有流量或自定义范围。
+ **协议**。您可以指定任何有标准协议编号的协议。有关更多信息，请参阅 [Protocol Numbers](http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml)。如果您指定 ICMP 作为协议，您可以指定任意或全部 ICMP 类型和代码。
+ **端口范围**。流量的侦听端口或端口范围。例如，80 用于 HTTP 流量。
+ **源**。[仅限入站规则]流量的源（CIDR 范围）。
+ **目的地**。[仅限出站规则]流量的目的地（CIDR 范围）。
+ **允许/拒绝**。*允许*还是*拒绝*指定的流量。

有关规则示例，请参阅 [示例：控制对子网中的实例的访问](nacl-examples.md)。

## 注意事项
<a name="nacl-rule-considerations"></a>
+ 每个网络 ACL 的规则数量存在配额（也称为限制）。有关更多信息，请参阅 [Amazon VPC 配额](amazon-vpc-limits.md)。
+ 当您在网络 ACL 中添加或删除规则时，与其相关联的子网也会随之更改。这些更改在短时间内生效。
+ 如果您使用命令行工具或 Amazon EC2 API 添加规则，则系统会自动将 CIDR 范围修改为其规范形式。例如，如果您为 CIDR 范围指定 `100.68.0.18/18`，我们将创建一个 CIDR 范围为 `100.68.0.0/18` 的规则。
+ 在您必须开放一系列端口、同时在此部分端口内您想拒绝部分端口，您可能希望添加一项拒绝规则。请务必确保拒绝规则的给定数量要小于允许更大范围端口流量的规则的数量。
+ 如果您同时在网络 ACL 中添加和删除规则，则请谨慎操作。如果您删除入站或出站规则，然后添加的新条目数超过了允许的条目数（请参阅 [Amazon VPC 配额](amazon-vpc-limits.md)），则将移除已选择删除的条目，且*不会添加*新条目。这可能会导致意外的连接问题，并阻止进出 VPC 的访问。

# VPC 的默认网络 ACL
<a name="default-network-acl"></a>

虚拟私有云（VPC）自动带有默认网络 ACL。默认网络 ACL 配置为让所有流量流进和流出与其关联的子网。每个网络 ACL 还包含以星号（\$1）为规则编号的规则。这些规则确保在数据包与任何其他编号规则不匹配时拒绝该数据包。

您可以通过添加规则或删除默认编号规则，来修改默认网络 ACL。您无法删除规则编号是星号的规则。

**默认入站规则**  
下表显示默认网络 ACL 的默认入站规则。仅当您创建具有关联 IPv6 CIDR 块的 VPC 或将 IPv6 CIDR 块与 VPC 关联时，才会添加 IPv6 的规则。但是，如果您修改了默认网络 ACL 的入站规则，在将 IPv6 块与 VPC 关联时，我们不会添加允许所有入站 IPv6 流量的规则。


| 规则 \$1 | 类型 | 协议 | 端口范围  | 源 | 允许/拒绝 | 
| --- | --- | --- | --- | --- | --- | 
|  100  | 所有 IPv4 流量 |  全部  |  全部  | 0.0.0.0/0 |  允许  | 
|  101  |  所有 IPv6 流量  |  All  |  All  |  ::/0  |  允许  | 
|  \$1  | 所有流量 |  All  |  全部  | 0.0.0.0/0 |  DENY  | 
|  \$1  |  所有 IPv6 流量  |  All  |  All  |  ::/0  |  DENY  | 

**默认出站规则**  
下表显示默认网络 ACL 的默认出站规则。仅当您创建具有关联 IPv6 CIDR 块的 VPC 或将 IPv6 CIDR 块与 VPC 关联时，才会添加 IPv6 的规则。但是，如果您修改了默认网络 ACL 的出站规则，在将 IPv6 块与 VPC 关联时，我们不会添加允许所有出站 IPv6 流量的规则。


| 规则 \$1 | 类型 | 协议 | 端口范围 | 目的地 | 允许/拒绝 | 
| --- | --- | --- | --- | --- | --- | 
|  100  | 所有流量 |  All  |  全部  | 0.0.0.0/0 |  允许  | 
|  101  |  所有 IPv6 流量  |  All  |  All  |  ::/0  |  允许  | 
|  \$1  | 所有流量 |  All  |  全部  | 0.0.0.0/0 |  DENY  | 
|  \$1  |  所有 IPv6 流量  |  All  |  All  |  ::/0  |  DENY  | 

# 您的 VPC 的自定义网络 ACL
<a name="custom-network-acl"></a>

您可以创建自定义网络 ACL 并将其与子网相关联，以允许或拒绝子网级别的特定入站或出站流量。有关更多信息，请参阅 [为您的 VPC 创建网络 ACL](create-network-acl.md)。

每个网络 ACL 都包含一个默认入站规则和一个默认出站规则，其规则编号是星号（\$1）。这些规则确保在数据包与任何其他规则不匹配时拒绝该数据包。

您可以通过添加或删除规则，来修改网络 ACL。您无法删除规则编号是星号的规则。

对于您添加的每个规则，都必须存在允许响应流量的入站或出站规则。有关如何选择适当的临时端口的更多信息，请参见 [临时端口](#nacl-ephemeral-ports)。

**示例入站规则**  
下表显示网络 ACL 的示例入站规则。仅当 VPC 具有关联的 IPv6 CIDR 块时，才添加 IPv6 的规则。IPv4 和 IPv6 流量是单独评估的。因此，所有 IPv4 流量的规则都不适用于 IPv6 流量。您可以在相应 IPv4 规则旁边添加 IPv6 规则，也可以在最后一个 IPv4 规则之后添加 IPv6 规则。

随着数据包流向子网，我们会根据与子网关联的网络 ACL 的入站规则评估数据包（从编号最低的规则开始）。例如，假设存在发往 HTTPS 端口 (443) 的 IPv4 流量。数据包与规则 100 或 105 不匹配。它与规则 110 匹配，后者允许流量进入子网。如果数据包已发往端口 139 (NetBIOS)，则它与任何编号规则均不匹配，因此 IPv4 流量的 \$1 规则最终会拒绝此数据包。


| 规则 \$1 | 类型 | 协议 | 端口范围 | 源 | 允许/拒绝 | 注释 | 
| --- | --- | --- | --- | --- | --- | --- | 
| 100 | HTTP | TCP | 80 | 0.0.0.0/0 | 允许 |  允许来自任意 IPv4 地址的入站 HTTP 流量。  | 
| 105 | HTTP | TCP | 80 | ::/0 | 允许 |  允许来自任意 IPv6 地址的入站 HTTP 流量。  | 
| 110 | HTTPS | TCP | 443 | 0.0.0.0/0 | 允许 |  允许来自任意 IPv4 地址的入站 HTTPS 流量。  | 
| 115 | HTTPS | TCP | 443 | ::/0 | 允许 | 允许来自任意 IPv6 地址的入站 HTTPS 流量。 | 
| 120 | SSH | TCP | 22 | *192.0.2.0/24* | 允许 |  允许来自您的家庭网络的公有 IPv4 地址范围的入站 SSH 流量（通过互联网网关）。  | 
| 140 | 自定义 TCP | TCP | *32768-65535* | 0.0.0.0/0 | 允许 |  允许来自互联网的入站返回 IPv4 流量（对于源自子网的请求）。  | 
| 145 | 自定义 TCP | TCP | *32768-65535* | ::/0 | 允许 |  允许来自互联网的入站返回 IPv6 流量（对于源自子网的请求）。  | 
| \$1 | 所有流量 | All | 全部 | 0.0.0.0/0 | 拒绝 |  拒绝所有未经前置规则（不可修改）处理的入站 IPv4 流量。  | 
| \$1 | 所有流量 | All | All | ::/0 | 拒绝 |  拒绝所有未经前置规则（不可修改）处理的入站 IPv6 流量。  | 

**示例出站规则**  
下表显示自定义网络 ACL 的示例出站规则。仅当 VPC 具有关联的 IPv6 CIDR 块时，才添加 IPv6 的规则。IPv4 和 IPv6 流量是单独评估的。因此，所有 IPv4 流量的规则都不适用于 IPv6 流量。您可以在相应 IPv4 规则旁边添加 IPv6 规则，也可以在最后一个 IPv4 规则之后添加 IPv6 规则。


| 规则 \$1 | 类型 | 协议 | 端口范围 | 目的地 | 允许/拒绝 | 注释 | 
| --- | --- | --- | --- | --- | --- | --- | 
| 100 | HTTP | TCP | 80 | 0.0.0.0/0 | 允许 | 允许出站 IPv4 HTTP 流量从子网流向 Internet。 | 
| 105 | HTTP | TCP | 80 | ::/0 | 允许 | 允许出站 IPv6 HTTP 流量从子网流向 Internet。 | 
| 110 | HTTPS | TCP | 443 | 0.0.0.0/0 | 允许 | 允许出站 IPv4 HTTPS 流量从子网流向 Internet。 | 
| 115 | HTTPS | TCP | 443 | ::/0 | 允许 | 允许出站 IPv6 HTTPS 流量从子网流向 Internet。 | 
| 120 | 自定义 TCP | TCP | *1024-65535* | *192.0.2.0/24* | 允许 |  允许从您的家庭网络发出对 SSH 流量的出站响应。  | 
| 140 | 自定义 TCP | TCP | *32768-65535* | 0.0.0.0/0 | 允许 | 允许对互联网客户端的出站 IPv4 响应（例如，提供网页）。 | 
| 145 | 自定义 TCP | TCP | *32768-65535* | ::/0 | 允许 | 允许对互联网客户端的出站 IPv6 响应（例如，提供网页）。  | 
| \$1 | 所有流量 | All | 全部 | 0.0.0.0/0 | DENY | 拒绝所有未经前置规则处理的出站 IPv4 流量。 | 
| \$1 | 所有流量 | All | All | ::/0 | DENY | 拒绝所有未经前置规则处理的出站 IPv6 流量。 | 

## 临时端口
<a name="nacl-ephemeral-ports"></a>

上一个部分中的网络 ACL 实例使用了临时端口范围 32768-65535。但是，您可能需要根据自己使用的或作为通信目标的客户端的类型为网络 ACL 使用不同的范围。

发起请求的客户端会选择临时端口范围。根据客户端的操作系统不同，范围也随之更改。
+ 许多 Linux 内核（包括 Amazon Linux 内核）使用端口 32768-61000。
+ 源自 Elastic Load Balancing 的请求使用端口 1024-65535。
+ Windows 操作系统通过 Windows Server 2003 使用端口 1025-5000。
+ Windows Server 2008 及更高版本使用端口 49152-65535。
+ NAT 网关使用端口 1024-65535。
+ AWS Lambda 函数使用端口 1024-65535。

例如，如果一个来自 Internet 上的 Windows 10 客户端的请求到达您的 VPC 中的 Web 服务器，则您的网络 ACL 必须有相应的出站规则，才能支持目标为端口 49152-65535 的流量。

如果您的 VPC 中的一个实例是发起请求的客户端，则您的网络 ACL 必须有入站规则来支持发往特定于实例的操作系统的临时端口的流量。

在实际中，为使不同客户端类型可以启动流量进入您 VPC 中的公有实例，您可以开放临时端口 1024-65535。但是，您也可以在 ACL 中添加规则以拒绝任何在此范围内的来自恶意端口的数据流。请务必将拒绝规则放在表的较前端，先于开放一系列临时端口的允许规则。

## 自定义网络 ACL 和其他 AWS 服务
<a name="nacl-other-services"></a>

如果您创建自定义网络 ACL，请注意它可能会如何影响您使用其他 AWS 服务创建的资源。

借助 Elastic Load Balancing，如果您的后端实例的子网有一个网络 ACL，并且您在其中针对源为 `0.0.0.0/0` 或子网的 CIDR 的所有流量添加了*拒绝*规则，则您的负载均衡器将无法对这些实例执行运行状况检查。有关负载均衡器和后端实例的推荐网络 ACL 规则的更多信息，请参阅以下内容：
+ [Network ACLs for your Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-troubleshooting.html)
+ [Network ACLs for your Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/target-group-register-targets.html#network-acls)
+ [Network ACLs for your Classic Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-vpc-network-acls.html)

## 排查可达性问题
<a name="network-acl-rules-troubleshoot"></a>

Reachability Analyzer 是一款静态配置分析工具。使用 Reachability Analyzer 可分析和调试 VPC 中两个资源之间的网络可达性。如果可以访问这些资源，则 Reachability Analyzer 会生成有关这些资源间虚拟路径的逐跳详细信息，否则会确定障碍组件。例如，其可以识别缺失或配置错误的网络 ACL 规则。

有关更多信息，请参阅 [Reachability Analyzer 角色指南](https://docs.aws.amazon.com/vpc/latest/reachability/)。

# 路径 MTU 发现和网络 ACL
<a name="path_mtu_discovery"></a>

路径 MTU 发现用于确定两台设备之间的路径 MTU。路径 MTU 是原始主机和接收主机之间的路径所支持的最大数据包大小。

对于 IPv4，如果主机发送一个大于接收主机的 MTU 或大于路径上某台设备的 MTU 的数据包，则接收主机或设备将删除此数据包，然后返回以下 ICMP 消息：`Destination Unreachable: Fragmentation Needed and Don't Fragment was Set`（类型 3，代码 4）。这将指示传输主机将有效负载拆分为多个较小的数据包，然后重新传输。

IPv6 协议不支持网络中的分段。如果主机发送一个大于接收主机的 MTU 或大于路径上某台设备的 MTU 的数据包，则接收主机或设备将删除此数据包，然后返回以下 ICMP 消息：`ICMPv6 Packet Too Big (PTB)`（类型 2）。这将指示传输主机将有效负载拆分为多个较小的数据包，然后重新传输。

如果您子网中主机之间的最大传输单位 (MTU) 不同，或您的实例可以通过互联网与对等项通信，则必须添加以下网络 ACL 规则（入站和出站）。这可确保路径 MTU 发现能够正常工作并防止数据包丢失。为类型选择**自定义 ICMP 规则**，为端口范围选择**目的地无法到达**、**需要分段，DF 标志已设置**（类型 3，代码 4）。如果您使用 traceroute，还需添加以下规则：选择**自定义 ICMP 规则**作为类型，并选择**超时**和 **TTL 中转过期**作为端口范围（类型 11，代码 0）。有关更多信息，请参阅《*Amazon EC2 用户指南*》中的 [EC2 实例的网络最大传输单位（MTU）](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/network_mtu.html)。

# 为您的 VPC 创建网络 ACL
<a name="create-network-acl"></a>

以下任务为您展示如何创建网络 ACL，向网络 ACL 添加规则，然后将网络 ACL 与子网关联。

**Topics**
+ [步骤 1：创建网络 ACL](#CreateACL)
+ [步骤 2：添加规则](#Rules)
+ [步骤 3：将子网与网络 ACL 关联](#NetworkACL)
+ [（可选）使用 Firewall Manager 管理网络 ACL](#nacls-using-firewall-manager)

## 步骤 1：创建网络 ACL
<a name="CreateACL"></a>

您可以为 VPC 创建自定义网络 ACL。自定义网络 ACL 的初始规则会阻止所有入站和出站流量。默认情况下，您的新自定义网络 ACL 未与子网关联，必须与子网显式关联。

**要使用控制台创建网络 ACL**

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

1. 在导航窗格中，选择 **Network ACLs**（网络 ACL）。

1. 选择**创建网络 ACL**。

1. （可选）对于**名称**，输入网络 ACL 的名称。

1. 对于 **VPC**，选择 VPC。

1. （可选）对于**标签**，选择**添加标签**，然后输入标签键和标签值。

1. 选择**创建网络 ACL**。

**要使用命令行创建网络 ACL**
+ [create-network-acl](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-network-acl.html) (AWS CLI)
+ [New-EC2NetworkAcl](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2NetworkAcl.html) (AWS Tools for Windows PowerShell)

## 步骤 2：添加规则
<a name="Rules"></a>

您可以添加允许或拒绝入站或出站流量的规则。

我们会按顺序处理规则，以编号最低的规则开始。我们建议您使用跳跃的规则编号（例如 100、200、300）而不是使用顺序编号（例如 101、102、103）。这会让添加新规则变得更加简单，无需对现有规则重新编号。

如果您使用 Amazon EC2 API 或命令行工具，则无法修改规则。您只能添加和删除规则。如果您使用 Amazon VPC 控制台，则可以修改现有规则的条目。控制台将为您删除现有规则并添加新规则。如果您需要更改 ACL 中的规则顺序，您必须添加有新规则编号的新规则，并随后删除最初的规则。

**要使用控制台向网络 ACL 添加规则**

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

1. 在导航窗格中，选择 **Network ACLs**（网络 ACL）。

1. 选择网络 ACL。

1. 要添加入站规则，请执行以下操作：

   1. 选择**入站规则**选项卡。

   1. 选择**编辑入站规则**和**添加新规则**。

   1. 输入尚未使用的规则编号、类型、协议、端口范围、来源，以及是允许还是拒绝流量。对于某些类型，我们会在协议和端口中为您提供。如果系统提示您提供端口范围，则请输入端口号或端口范围（例如 49152-65535）。

      要使用某个未列出的协议，请选择**自定义协议**作为类型，然后选择该协议。有关更多信息，请参阅 [IANA 协议编号](http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml)。

   1. 选择**保存更改**。

1. 要添加出站规则，请执行以下操作：

   1. 选择 **Outbound rules**（出站规则）选项卡。

   1. 选择**编辑出站规则**和**添加新规则**。

   1. 输入尚未使用的规则编号、类型、协议、端口范围、来源，以及是允许还是拒绝流量。对于某些类型，我们会在协议和端口中为您提供。如果系统提示您提供端口范围，则请输入端口号或端口范围（例如 49152-65535）。

      要使用某个未列出的协议，请选择**自定义协议**作为类型，然后选择该协议。有关更多信息，请参阅 [IANA 协议编号](http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml)。

   1. 选择**保存更改**。

**要使用命令行向网络 ACL 添加规则**
+ [create-network-acl-entry](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-network-acl-entry.html) (AWS CLI)
+ [New-EC2NetworkAclEntry](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2NetworkAclEntry.html) (AWS Tools for Windows PowerShell)

**要使用命令行替换网络 ACL 中的规则**
+ [replace-network-acl-entry](https://docs.aws.amazon.com/cli/latest/reference/ec2/replace-network-acl-entry.html) (AWS CLI)
+ [Set-EC2NetworkAclEntry](https://docs.aws.amazon.com/powershell/latest/reference/items/Set-EC2NetworkAclEntry.html) (AWS Tools for Windows PowerShell)

**要使用命令行从网络 ACL 中删除规则**
+ [delete-network-acl-entry](https://docs.aws.amazon.com/cli/latest/reference/ec2/delete-network-acl-entry.html) (AWS CLI)
+ [Remove-EC2NetworkAclEntry](https://docs.aws.amazon.com/powershell/latest/reference/items/Remove-EC2NetworkAclEntry.html) (AWS Tools for Windows PowerShell)

## 步骤 3：将子网与网络 ACL 关联
<a name="NetworkACL"></a>

如需对特定子网应用特定的网络 ACL 规则，您必须首先将子网与网络 ACL 关联。您可以将网络 ACL 与多个子网关联。但是，一个子网只能与一个网络 ACL 关联。任何未与特定 ACL 关联的子网都会默认与默认网络 ACL 关联。

**将子网与网络 ACL 关联**

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

1. 在导航窗格中，选择 **Network ACLs**（网络 ACL），然后选择网络 ACL。

1. 在详细信息窗格中的 **Subnet Associations**（子网关联）选项卡上，选择 **Edit**（编辑）。选中要与网络 ACL 关联的子网的 **Associate**（关联）复选框，然后选择 **Save**（保存）。

## （可选）使用 Firewall Manager 管理网络 ACL
<a name="nacls-using-firewall-manager"></a>

AWS Firewall Manager 可简化跨多个账户和子网的网络 ACL 管理和维护任务。您可以使用 Firewall Manager 监视组织中的账户和子网，并自动应用您定义的网络 ACL 配置。如果要保护整个企业，或者经常添加要通过中央管理员账户自动保护的新子网，Firewall Manager 尤其有用。

利用 Firewall Manager 网络 ACL 策略，借助单个管理员账户，您可以配置、监视和管理您希望在整个组织中使用的网络 ACL 中定义的最小规则集。您可以指定组织的哪些账户和子网在 Firewall Manager 策略的范围内。Firewall Manager 报告范围内子网的网络 ACL 的合规性状态，您可以将 Firewall Manager 配置为自动修复不合规的网络 ACL。

有关更多信息，请参阅《AWS Firewall Manager 开发人员指南》**中的以下资源：
+ [AWS Firewall Manager 先决条件](https://docs.aws.amazon.com/waf/latest/developerguide/fms-prereq.html)
+ [设置 AWS Firewall Manager 网络 ACL 策略](https://docs.aws.amazon.com/waf/latest/developerguide/getting-started-fms-network-acl.html)
+ [将网络 ACL 策略与 Firewall Manager 搭配使用](https://docs.aws.amazon.com/waf/latest/developerguide/network-acl-policies.html)

# 管理 VPC 的网络 ACL 关联
<a name="network-acl-associations"></a>

每个子网都与一个网络 ACL 关联。当您首次创建子网时，它会与 VPC 的默认网络 ACL 关联。您可以创建自定义网络 ACL 并将其与一个或多个子网关联，来替换之前的网络 ACL 关联。

**Topics**
+ [描述您的网络 ACL 关联](#describe-network-acl-association)
+ [更改与网络 ACL 关联的子网](#DisassociateNetworkACL)
+ [更改与子网关联的网络 ACL](#ChangeNetworkACL)

## 描述您的网络 ACL 关联
<a name="describe-network-acl-association"></a>

您可以描述与子网关联的网络 ACL，也可以描述与网络 ACL 关联的子网。

**要描述使用控制台与子网关联的网络 ACL**

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

1. 在导航窗格中，选择 **Subnets**（子网）。

1. 选择子网。

1. 选择**网络 ACL** 选项卡。

**要使用 AWS CLI 描述与子网关联的网络 ACL**  
使用以下 [describe-network-acls](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-network-acls.html) 命令列出与指定子网关联的网络 ACL。

```
aws ec2 describe-network-acls --filters Name=association.subnet-id,Values=subnet-0d2d1b81e0bc9c6d4 --query NetworkAcls[*].NetworkAclId
```

下面是示例输出。

```
[
    "acl-03701d1f82d8c3fd6"
]
```

**要使用控制台描述与网络 ACL 关联的子网**

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

1. 在导航窗格中，选择 **Network ACLs**（网络 ACL）。

1. 选择网络 ACL。

1. 选择**子网关联**选项卡。

**要使用 AWS CLI 描述与网络 ACL 关联的子网**  
使用以下 [describe-network-acls](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-network-acls.html) 命令列出与指定网络 ACL 关联的子网。

```
aws ec2 describe-network-acls --network-acl-ids acl-060415a18fcc9afde --query NetworkAcls[*].Associations[].SubnetId
```

下面是示例输出。

```
[
    "subnet-0d2d1b81e0bc9c6d4",
    "subnet-0e990c67809773b19",
    "subnet-0eb17d85f5dfd33b1",
    "subnet-0e01d500780bb7468"
]
```

## 更改与网络 ACL 关联的子网
<a name="DisassociateNetworkACL"></a>

您可以从子网取消自定义网络 ACL 的关联。在您将子网与自定义网络 ACL 取消关联后，我们会自动将其与 VPC 的默认网络 ACL 关联。这些更改在短时间内生效。

**要更改与网络 ACL 关联的子网**

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

1. 在导航窗格中，选择 **Network ACLs**（网络 ACL）。

1. 选择网络 ACL。

1. 选择**操作**和**编辑子网关联**。

1. 从**选定子网**中移除子网。

1. 选择**保存更改**。

## 更改与子网关联的网络 ACL
<a name="ChangeNetworkACL"></a>

您可以更改与某个子网关联的网络 ACL。例如，当您创建一个子网时，该子网会最初与 VPC 的默认网络 ACL 关联。如果创建自定义网络 ACL，则通过将网络 ACL 与一个或多个子网关联来应用网络 ACL 规则。

更改子网的网络 ACL 后，更改将在短时间内生效。

**要更改与子网关联的网络 ACL**

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

1. 在导航窗格中，选择 **Subnets**（子网）。

1. 选择子网。

1. 选择**操作**和**编辑网络 ACL 关联**。

1. 对于**网络 ACL ID**，选择要与子网关联的网络 ACL，并查看所选网络 ACL 的入站和出站规则。

1. 选择**保存**。

**要使用命令行替换网络 ACL 关联**
+ [replace-network-acl-association](https://docs.aws.amazon.com/cli/latest/reference/ec2/replace-network-acl-association.html) (AWS CLI)
+ [Set-EC2NetworkAclAssociation](https://docs.aws.amazon.com/powershell/latest/reference/items/Set-EC2NetworkAclAssociation.html) (AWS Tools for Windows PowerShell)

# 删除 VPC 的网络 ACL
<a name="delete-network-acl"></a>

当不再使用某个网络 ACL 时，可以将其删除。如果网络 ACL 有关联子网，则无法删除该网络 ACL。您无法删除默认网络 ACL。

**要使用控制台从网络 ACL 中移除子网关联**

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

1. 在导航窗格中，选择 **Network ACLs**（网络 ACL）。**关联对象**列指示与每个网络 ACL 关联的子网数。如果没有关联的子网，则此列为 `-`。

1. 选择网络 ACL。

1. 选择**操作**和**编辑子网关联**。

1. 移除子网关联。

1. 选择**保存更改**。

**要使用命令行描述您的网络 ACL，包括关联**
+ [describe-network-acls](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-network-acls.html) (AWS CLI)
+ [Get-EC2NetworkAcl](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2NetworkAcl.html) (AWS Tools for Windows PowerShell)

**要使用命令行替换网络 ACL 关联**
+ [replace-network-acl-association](https://docs.aws.amazon.com/cli/latest/reference/ec2/replace-network-acl-association.html) (AWS CLI)
+ [Set-EC2NetworkAclAssociation](https://docs.aws.amazon.com/powershell/latest/reference/items/Set-EC2NetworkAclAssociation.html) (AWS Tools for Windows PowerShell)

**要使用控制台删除网络 ACL**

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

1. 在导航窗格中，选择 **Network ACLs**（网络 ACL）。

1. 选择网络 ACL。

1. 选择**操作**和**删除网络 ACL**。

1. 提示进行确认时，输入 **delete**，然后选择**删除**。

**要使用命令行删除网络 ACL**
+ [delete-network-acl](https://docs.aws.amazon.com/cli/latest/reference/ec2/delete-network-acl.html) (AWS CLI)
+ [Remove-EC2NetworkAcl](https://docs.aws.amazon.com/powershell/latest/reference/items/Remove-EC2NetworkAcl.html) (AWS Tools for Windows PowerShell)

# 示例：控制对子网中的实例的访问
<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 | 安全组 | 
| --- | --- | --- | 
| 操作级别 | 子网级别 | 实例级别 | 
| 范围 | 适用于关联子网中的所有实例 | 适用于与安全组关联的所有实例 | 
| 规则类型 | 允许和拒绝规则 | 仅允许规则 | 
| 规则评估 | 按升序评估规则，直到找到与流量匹配的规则 | 在决定是否允许流量前评估所有规则 | 
| 返回流量 | 必须明确允许（无状态） | 自动允许（有状态） | 

# Amazon Virtual Private Cloud 中的恢复能力
<a name="disaster-recovery-resiliency"></a>

AWS 全球基础设施围绕 AWS 区域和可用区构建。AWS 区域具有多个在物理上独立且隔离的可用区，这些可用区通过低延迟、高吞吐量、高度冗余的网络相互连接。利用可用区，您可以设计和操作在可用区之间无中断地自动实现失效转移的应用程序和数据库。与传统的单个或多个数据中心基础设施相比，可用区具有更高的可用性、容错能力和可扩展性。

AWS 区域 是主要构建块，每个构建块都代表一个不同的地理位置，其中存放了多个在物理上独立且隔离的可用区。这些可用区通过低延迟、高吞吐量和高冗余的联网结构连接在一起，实现了在这些可用区之间的无缝通信和数据传输。

可用区的架构是一个关键的差异化因素，因为与传统的单个或多个数据中心基础设施相比，这些可用区的设计具有显著增强的稳定性和容错性。通过将资源分配到一个区域内的多个可用区，即可将应用程序和数据库设计为在区域之间自动进行失效转移，而不会对服务造成任何中断。这种级别的冗余和高可用性是任务关键型工作负载的关键要求，让组织能够构建弹性的云原生解决方案。

此外，AWS 基础设施的规模和全球覆盖范围使客户能够将应用程序部署在离最终用户更近的地方，从而减少延迟并改善用户整体体验。由于客户可以在其特定的监管及业务需求所要求的地理边界内存储和处理数据，全球多个区域的可用性还有助于实现有效的数据主权和合规性。

通过利用 AWS 全球基础设施，各组织可以构建自己的云环境，使其具有高可用性、容错性和可扩展性，并且可以灵活地适应不断变化的需求和不断发展的业务需求。这一坚实的基础是成功实现基于云的现代应用程序和服务的关键推动力。

有关 AWS 区域 和可用区的更多信息，请参阅 [AWS 全球基础设施](https://aws.amazon.com/about-aws/global-infrastructure/)。

您可以配置 VPC 以满足工作负载的故障恢复要求。有关更多信息，请参阅下列内容：
+ [了解故障恢复模式和权衡](https://aws.amazon.com/blogs/architecture/understand-resiliency-patterns-and-trade-offs-to-architect-efficiently-in-the-cloud/)（AWS 架构博客）
+ [规划网络拓扑结构](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/plan-your-network-topology.html)（AWS Well-Architected Framework）
+ [Amazon Virtual Private Cloud 连接选项](https://docs.aws.amazon.com/whitepapers/latest/aws-vpc-connectivity-options/introduction.html)（AWS 白皮书）

# Amazon Virtual Private Cloud 的合规性验证
<a name="VPC-compliance"></a>

要了解某个 AWS 服务是否在特定合规性计划范围内，请参阅[按合规性计划提供的范围内 AWS 服务](https://aws.amazon.com/compliance/services-in-scope/)，然后选择您感兴趣的合规性计划。有关常规信息，请参阅 [AWS 合规性计划](https://aws.amazon.com/compliance/programs/)、、。

您可以使用 AWS Artifact 下载第三方审计报告。有关更多信息，请参阅[在 AWS Artifact 中下载报告](https://docs.aws.amazon.com/artifact/latest/ug/downloading-documents.html)。

您在使用 AWS 服务 时的合规性责任由您的数据的敏感性、您公司的合规性目标以及适用的法律法规决定。有关您在使用 AWS 服务 时的合规责任的更多信息，请参阅 [AWS 安全性文档](https://docs.aws.amazon.com/security/)。

# 屏蔽 VPC 和子网的公共访问权限
<a name="security-vpc-bpa"></a>

VPC 屏蔽公共访问权限（BPA）是一项集中式安全功能，可让您以权威方式屏蔽整个 AWS 账户对 VPC 资源的公共互联网访问，从而确保符合安全要求，同时为特定的例外情况和审计功能提供灵活性。

VPC BPA 功能有以下几种模式：
+ **双向**：进出此区域互联网网关和仅出口互联网网关的所有流量（排除的 VPC 和子网除外）均被阻止。
+ **仅入口**：此区域 VPC 的所有互联网流量（排除的 VPC 或子网除外）均被阻止。仅允许进出 NAT 网关和仅出口互联网网关的流量，因为这些网关仅允许建立出站连接。

您也可以针对不想阻止的流量为此功能创建“排除项”。排除是一种可以应用于单个 VPC 或子网的模式，可将其排除在账户的 VPC BPA 模式之外，并允许双向或仅出口访问。

排除可以采用以下任一模式：
+ **双向**：允许进出已排除 VPC 和子网的所有互联网流量。
+ **仅出口**：允许来自已排除 VPC 和子网的出站互联网流量。进入已排除 VPC 和子网的入站互联网流量已被阻止。这仅在 VPC BPA 设置为“双向”时适用。

**Topics**
+ [VPC BPC BPA 基础知识](security-vpc-bpa-basics.md)
+ [评测 VPC BPA 的影响并监控 VPC BPA](security-vpc-bpa-assess-impact-main.md)
+ [高级示例](security-vpc-bpa-example.md)

# VPC BPC BPA 基础知识
<a name="security-vpc-bpa-basics"></a>

本节介绍有关 VPC BPA 的重要详细信息，包括哪些服务支持以及如何使用该功能。

**Topics**
+ [区域可用性](#security-vpc-bpa-reg-avail)
+ [AWS 服务影响和支持](#security-vpc-bpa-service-support)
+ [VPC BPA 限制](#security-vpc-bpa-limits)
+ [使用 IAM 策略控制对 VPC BPA 的访问](#security-vpc-bpa-iam-example)
+ [为您的账户启用 VPC BPA 双向模式](#security-vpc-bpa-enable-bidir)
+ [将 VPC BPA 模式更改为仅入口](#security-vpc-bpa-ingress-only)
+ [创建和删除排除项](#security-vpc-bpa-exclusions)
+ [在组织级别启用 VPC BPA](#security-vpc-bpa-exclusions-orgs)

## 区域可用性
<a name="security-vpc-bpa-reg-avail"></a>

VPC BPA 已在所有商业 [AWS 区域](https://aws.amazon.com//about-aws/global-infrastructure/regions_az/)提供，包括 GovCloud 和中国区域。

在本指南中，您还将找到有关将网络访问分析器和 Reachability Analyzer 与 VPC BPA 配合使用的信息。请注意，网络访问分析器和 Reachability Analyzer 并非在所有商业区域提供。有关网络访问分析器和 Reachability Analyzer 区域可用性的信息，请参阅《Network Access Analyzer Guide》**中的 [Limitations](https://docs.aws.amazon.com/vpc/latest/network-access-analyzer/how-network-access-analyzer-works.html#analyzer-limitations) 和《Reachability Analyzer Guide》**中的 [Considerations](https://docs.aws.amazon.com/vpc/latest/reachability/how-reachability-analyzer-works.html#considerations)。

## AWS 服务影响和支持
<a name="security-vpc-bpa-service-support"></a>

以下资源和服务支持 VPC BPA，并且这些服务和资源的流量受 VPC BPA 的影响：
+ **互联网网关**：所有入站和出站流量都被阻止。
+ **仅出口互联网网关**：所有出站流量均被阻止。仅出口互联网网关不允许入站流量。
+ **网关负载均衡器（GWLB）**：即使排除了包含 GWLB 端点的子网，所有入站和出站流量也会被阻止。
+ **NAT 网关**：所有入站和出站流量均被阻止。NAT 网关需要互联网网关才能连接互联网。
+ **面向互联网的网络负载均衡器**：所有入站和出站流量均被阻止。面向互联网的网络负载均衡器需要互联网网关才能连接互联网。
+ **面向互联网的应用程序负载均衡器**：所有入站和出站流量均被阻止。面向互联网的应用程序负载均衡器需要互联网网关才能连接互联网。
+ **Amazon CloudFront VPC 源**：所有入站和出站流量均被阻止。
+ **Direct Connect**：所有使用公共虚拟接口（公有 IPv4 地址或全球单播 IPv6 地址）的入站和出站流量都将被阻止。此流量使用互联网网关（或仅出口互联网网关）进行连接。
+ **AWS 全球加速器**：无论目标是否可以通过互联网访问，发往 VPC 的入站流量都会被阻止。
+ **AWS Network Firewall**：即使排除了包含防火墙端点的子网，所有入站和出站流量也会被阻止。
+ **AWS Wavelength 运营商网关**：所有入站和出站流量均被阻止。

VPC BPA 不会阻止或影响与私有连接相关的流量，如以下服务和资源的流量：
+ AWS Client VPN
+ AWS CloudWAN
+ AWS Outposts 本地网关
+ AWS Site-to-Site VPN
+ Transit Gateway
+ AWS Verified Access

  

**重要**  
如果通过子网中 EC2 实例上运行的设备（例如第三方安全或监控工具）路由传入和传出流量，则在使用 VPC BPA 时，该子网需要排除流入和流出的流量。向设备子网而非互联网网关发送流量的其他子网不需要添加为排除项。
即使启用了 VPC BPA，也允许流量从 VPC 中的资源私下发送到 VPC 中运行的其他服务（例如 Route 53 Resolver），因为该流量不会经过 VPC 中的互联网网关。例如，这些服务可能会代表您向 VPC 之外的资源发出请求以解决 DNS 查询，如果不通过其他安全控制措施缓解，则可能会泄露有关您的 VPC 内资源活动的信息。

## VPC BPA 限制
<a name="security-vpc-bpa-limits"></a>

不允许 NAT 网关和仅出口互联网网关的本地区域（LZ）中不支持 VPC BPA 仅入口模式。

## 使用 IAM 策略控制对 VPC BPA 的访问
<a name="security-vpc-bpa-iam-example"></a>

有关允许/拒绝访问 VPC BPA 功能的 IAM 策略的示例，请参阅 [屏蔽 VPC 和子网的公共访问权限](vpc-policy-examples.md#vpc-bpa-example-iam)。

## 为您的账户启用 VPC BPA 双向模式
<a name="security-vpc-bpa-enable-bidir"></a>

VPC BPA 双向模式阻止进出此区域互联网网关和仅出口互联网网关的所有流量（已排除 VPC 和子网除外）。有关排除项的更多信息，请参阅[创建和删除排除项](#security-vpc-bpa-exclusions)。

**重要**  
强烈建议您在生产账户中启用 VPC BPA 之前，仔细检查需要访问互联网的工作负载。

**注意**  
要在您账户中的 VPC 和子网上启用 VPC BPA，您必须拥有 VPC 和子网。
如果您当前与其他账户共享 VPC 子网，则子网所有者强制执行的 VPC BPA 模式也适用于参与者流量，但参与者无法控制影响共享子网的 VPC BPA 设置。

------
#### [ AWS 管理控制台 ]

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

1. 在左侧导航窗格中，选择**设置**。

1. 选择**编辑公共访问权限设置**。

1. 选择**开启屏蔽公共访问**和**双向**，然后选择**保存更改**。

1. 等待**状态**更改为**开启**。VPC BPA 设置生效和状态更新可能需要几分钟时间。

VPC BPA 双向模式现已开启。

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

1. 启用 VPC BPA：

   ```
   aws ec2 --region us-east-2 modify-vpc-block-public-access-options --internet-gateway-block-mode block-bidirectional
   ```

   VPC BPA 设置生效和状态更新可能需要几分钟时间。

1. 查看 VPC BPA 的状态：

   ```
   aws ec2 --region us-east-2 describe-vpc-block-public-access-options
   ```

------

## 将 VPC BPA 模式更改为仅入口
<a name="security-vpc-bpa-ingress-only"></a>

VPC BPA 仅入口模式会阻止此区域 VPC 的所有互联网流量（已排除的 VPC 或子网除外）。仅允许进出 NAT 网关和仅出口互联网网关的流量，因为这些网关仅允许建立出站连接。

------
#### [ AWS 管理控制台 ]

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

1. 在左侧导航窗格中，选择**设置**。

1. 选择**编辑公共访问权限设置**。

1. 将方向更改为**仅入口**。

1. 保存更改并等待状态更新。VPC BPA 设置生效和状态更新可能需要几分钟时间。

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

1. 修改 VPC BPA 阻止方向：

   ```
   aws ec2 --region us-east-2 modify-vpc-block-public-access-options --internet-gateway-block-mode block-ingress
   ```

   VPC BPA 设置生效和状态更新可能需要几分钟时间。

1. 查看 VPC BPA 的状态：

   ```
   aws ec2 --region us-east-2 describe-vpc-block-public-access-options
   ```

------

## 创建和删除排除项
<a name="security-vpc-bpa-exclusions"></a>

VPC BPA 排除是一种可以应用于单个 VPC 或子网的模式，可将其排除在账户的 VPC BPA 模式之外，并允许双向或仅出口访问。即使账户未启用 VPC BPA，您也可以为 VPC 和子网创建 VPC BPA 排除项，以确保启用 VPC BPA 时排除项不会中断流量。VPC 的排除会自动应用于 VPC 中的所有子网。

您最多可以创建 50 个排除项。有关请求提高限制的信息，请参阅 [Amazon VPC 配额](amazon-vpc-limits.md)中*每个账户的 VPC BPA 排除项*。

------
#### [ AWS 管理控制台 ]

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

1. 在左侧导航窗格中，选择**设置**。

1. 在**阻止公开访问**选项卡的**排除**下，执行以下任一操作：
   + 要删除排除项，请选择排除项，然后选择**操作** > **删除排除项**。
   + 要创建排除项，请选择**创建排除项**并继续执行后续步骤。

1. 选择阻止方向：
   + **双向**：允许进出已排除 VPC 和子网的所有互联网流量。
   + **仅出口**：允许来自已排除 VPC 和子网的出站互联网流量。阻止进入已排除 VPC 和子网的入站互联网流量。当 VPC BPA 设置为**双向**时，此设置适用。

1. 选择 VPC 或子网。

1. 选择**创建排除项**。

1. 等待**排除项状态**变为**活动**。您可能需要刷新排除项表才能查看更改。

排除项已创建。

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

1. 修改排除允许方向：

   ```
   aws ec2 --region us-east-2 create-vpc-block-public-access-exclusion --subnet-id subnet-id --internet-gateway-exclusion-mode allow-bidirectional
   ```

1. 更新排除项状态可能需要一段时间。要查看排除项的状态：

   ```
   aws ec2 --region us-east-2 describe-vpc-block-public-access-exclusions --exclusion-ids exclusion-id
   ```

------

## 在组织级别启用 VPC BPA
<a name="security-vpc-bpa-exclusions-orgs"></a>

如果您使用 AWS Organizations 来管理组织中的账户，则可以使用 [AWS Organizations 声明性策略](https://docs.aws.amazon.com//organizations/latest/userguide/orgs_manage_policies_declarative.html)对组织中的账户强制执行 VPC BPA。有关 VPC BPA 声明性策略的更多信息，请参阅《AWS Organizations 用户指南》**中的 [Supported declarative policies](https://docs.aws.amazon.com//organizations/latest/userguide/orgs_manage_policies_declarative_syntax.html#declarative-policy-vpc-block-public-access)。

**注意**  
您可以使用 VPC BPA 声明性策略配置是否允许排除，但不能使用该策略创建排除项。若要创建排除项，仍然需要在拥有 VPC 的账户中创建排除项。有关创建 VPC BPA 排除项的更多信息，请参阅[创建和删除排除项](#security-vpc-bpa-exclusions)。
如果启用了 VPC BPA 声明性策略，则在**阻止公开访问**设置中，您将看到**由声明性策略管理**，并且您将无法在账户级别修改 VPC BPA 设置。

# 评测 VPC BPA 的影响并监控 VPC BPA
<a name="security-vpc-bpa-assess-impact-main"></a>

本节包含有关如何在启用 VPC BPA 之前评测其影响及如何在启用 VPC BPA 之后监控流量是否被阻止的信息。

**Topics**
+ [使用网络访问分析器评估 VPC BPA 的影响](#security-vpc-bpa-assess-impact)
+ [使用流日志监控 VPC BPA 影响](#security-vpc-bpa-fl)
+ [使用 CloudTrail 追踪排除项删除](#security-vpc-bpa-cloudtrail)
+ [使用 Reachability Analyzer 验证连接是否被阻止](#security-vpc-bpa-verify-RA)

## 使用网络访问分析器评估 VPC BPA 的影响
<a name="security-vpc-bpa-assess-impact"></a>

在本节中，您将使用网络访问分析器在启用 VPC BPA 和阻止访问*之前*查看账户中使用互联网网关的资源。使用此分析可了解在您的账户中启用 VPC BPA 和阻止流量所产生的影响。

**注意**  
网络访问分析器不支持 IPv6；因此您将无法使用它来查看 VPC BPA 对仅出口互联网网关出站 IPv6 流量的潜在影响。
您需要为使用网络访问分析器执行的分析付费。有关更多信息，请参阅《网络访问分析器指南》**中的 [Pricing](https://docs.aws.amazon.com/vpc/latest/network-access-analyzer/what-is-network-access-analyzer.html#pricing)。
有关网络访问分析器区域可用性的信息，请参阅《Network Access Analyzer Guide》**中的 [Limitations](https://docs.aws.amazon.com/vpc/latest/network-access-analyzer/how-network-access-analyzer-works.html#analyzer-limitations)。

------
#### [ AWS 管理控制台 ]

1. 打开位于 [https://console.aws.amazon.com/networkinsights/](https://console.aws.amazon.com/networkinsights/) 的 AWS 网络见解控制台。

1. 选择**网络访问分析器**。

1. 选择**创建网络访问范围**。

1. 选择**评估 VPC 阻止公开访问的影响**，然后选择**下一步**。

1. 该模板已配置为分析您账户中进出互联网网关的流量。您可以在**来源**和**目标**下查看此项。

1. 选择**下一步**。

1. 选择**创建网络访问范围**。

1. 选择您刚创建的范围，然后选择**分析**。

1. 等待分析完成。

1. 查看分析的调查发现。**调查发现**下的每一行都显示数据包在网络中进出您账户中的互联网网关可以采用的网络路径。在这种情况下，如果您启用 VPC BPA，并且这些调查发现中显示的 VPC 和/或子网均未配置为 VPC BPA 排除项，则流向这些 VPC 和子网的流量将受到限制。

1. 分析每项调查发现，了解 VPC BPA 对 VPC 中资源的影响。

影响分析已完成。

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

1. 创建网络访问范围：

   ```
   aws ec2 create-network-insights-access-scope --region us-east-2 --match-paths "Source={ResourceStatement={ResourceTypes=["AWS::EC2::InternetGateway"]}}" "Destination={ResourceStatement={ResourceTypes=["AWS::EC2::InternetGateway"]}}"
   ```

1. 开始范围分析：

   ```
   aws ec2 start-network-insights-access-scope-analysis  --region us-east-2 --network-insights-access-scope-id nis-id
   ```

1. 获取分析的结果：

   ```
   aws ec2 get-network-insights-access-scope-analysis-findings  --region us-east-2 --network-insights-access-scope-analysis-id nisa-0aa383a1938f94cd1 --max-items 1
   ```

   结果显示进出您账户所有 VPC 中互联网网关的流量。结果被归类为“调查发现”。"FindingId": "AnalysisFinding-1" 表示这是分析中的第一个调查发现。请注意，有多个调查发现，每个调查发现都表明启用 VPC BPA 将影响流量。第一个调查发现表明流量从互联网网关（"SequenceNumber": 1）开始，依次传递到 NACL（"SequenceNumber": 2）、安全组（"SequenceNumber": 3），然后在实例（"SequenceNumber": 4）处结束。

1. 分析调查发现以了解 VPC BPA 对 VPC 中资源的影响。

影响分析已完成。

------

## 使用流日志监控 VPC BPA 影响
<a name="security-vpc-bpa-fl"></a>

利用 VPC 流日志这项功能，您可以捕获有关传入和传出您的 VPC 中弹性网络接口的 IP 流量的信息。您可以使用此功能监控被 VPC BPA 阻止的流量到达您的实例网络接口。

使用[使用流日志](working-with-flow-logs.md)中的步骤为您的 VPC 创建流日志。

创建流日志时，请确保使用包含字段 `reject-reason` 的自定义格式。

查看流日志时，如果发往 ENI 的流量因 VPC BPA 而被拒绝，您将在流日志条目中看到 `BPA` 的 `reject-reason`。

除了 VPC 流日志的标准[限制](flow-logs-limitations.md)外，请注意以下 VPC BPA 特定的限制：
+ VPC BPA 的流日志不包括[跳过的记录](flow-logs-records-examples.md#flow-log-example-no-data)。
+ 即使您在流日志中包含 `bytes` 字段，VPC BPA 的流日志也不会包含 [`bytes`](flow-log-records.md#flow-logs-fields)。

## 使用 CloudTrail 追踪排除项删除
<a name="security-vpc-bpa-cloudtrail"></a>

本节向您介绍如何使用 AWS CloudTrail 监控和追踪 VPC BPA 排除项的删除。

------
#### [ AWS 管理控制台 ]

通过在位于 [https://console.aws.amazon.com/cloudtrailv2/](https://console.aws.amazon.com/cloudtrailv2/) 的 AWS CloudTrail 控制台中查找**资源类型** > `AWS::EC2::VPCBlockPublicAccessExclusion`，您可以在 **CloudTrail 事件历史记录**中查看任何已删除的排除项。

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

您可以使用 `lookup-events` 命令查看与删除排除项有关的事件：

```
aws cloudtrail lookup-events --lookup-attributes AttributeKey=ResourceType,AttributeValue=AWS::EC2::VPCBlockPublicAccessExclusion
```

------

## 使用 Reachability Analyzer 验证连接是否被阻止
<a name="security-vpc-bpa-verify-RA"></a>

[VPC Reachability Analyzer](https://docs.aws.amazon.com/vpc/latest/reachability/what-is-reachability-analyzer.html) 可用于评估根据您的网络配置（包括 VPC BPA 设置）是否可以访问某些网络路径。

有关 Reachability Analyzer 区域可用性的信息，请参阅《Reachability Analyzer Guide》**中的 [Considerations](https://docs.aws.amazon.com/vpc/latest/reachability/how-reachability-analyzer-works.html#considerations)。

------
#### [ AWS 管理控制台 ]

1. 打开位于 [https://console.aws.amazon.com/networkinsights/home#ReachabilityAnalyzer](https://console.aws.amazon.com/networkinsights/home#ReachabilityAnalyzer) 的 AWS 网络见解控制台。

1. 单击**创建和分析路径**。

1. 对于**源类型**，选择**互联网网关**，然后从**源下拉列表**中选择要阻止流量的互联网网关。

1. 对于**目标类型**，选择**实例**，然后从**目标**下拉列表中选择要阻止流量的实例。

1. 单击**创建和分析路径**。

1. 等待分析完成。这可能需要几分钟时间。

1. 完成后，您应该会看到**可访问性状态**为**无法访问**，并且**路径详细信息**显示 `VPC_BLOCK_PUBLIC_ACCESS_ENABLED ` 是导致此可访问性问题的原因。

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

1. 使用要阻止流量传入的互联网网关 ID（源）和要阻止流量传出的实例 ID（目标）创建网络路径：

   ```
   aws ec2 --region us-east-2 create-network-insights-path --source igw-id --destination instance-id --protocol TCP
   ```

1. 开始对网络路径进行分析：

   ```
   aws ec2 --region us-east-2 start-network-insights-analysis --network-insights-path-id nip-id
   ```

1. 检索分析的结果：

   ```
   aws ec2 --region us-east-2 describe-network-insights-analyses --network-insights-analysis-ids nia-id
   ```

1. 请确认 `VPC_BLOCK_PUBLIC_ACCESS_ENABLED` 是无法访问的 `ExplanationCode`。

------

# 高级示例
<a name="security-vpc-bpa-example"></a>

本节包含一个高级示例，可帮助您了解 VPC 屏蔽公共访问权限功能在不同方案中如何工作。每个方案都以之前的方案为基础构建，因此按顺序完成这些步骤很重要。

**重要**  
请勿在生产账户中完成此示例。强烈建议您在生产账户中启用 VPC BPA 之前，仔细检查需要访问互联网的工作负载。

**注意**  
要充分了解 VPC BPA 功能，您的账户中需要某些资源。在本节中，我们提供一个 CloudFormation 模板，您可以使用该模板来预置所需的资源，以充分了解此功能如何工作。使用 CloudFormation 模板预置的资源以及使用网络访问分析器和 Reachability Analyzer 执行分析会产生相关的费用。如果您使用本节中的模板，则请确保在完成此示例后完成清理步骤。

**Topics**
+ [部署 CloudFormation 模板（可选）](#security-vpc-bpa-example-deploy-cfn)
+ [使用网络访问分析器查看 VPC BPA 的影响](#vpc-bpa-naa)
+ [场景 1 - 连接到未启用 VPC BPA 的实例](#vpc-bpa-scenario-1-connect-scen1)
+ [场景 2 - 启用 VPC BPA 双向模式](#vpc-bpa-scenario-1-connect-scen2)
+ [场景 3 - 将 VPC BPA 更改为仅入口模式](#vpc-bpa-scenario-3)
+ [场景 4 - 创建排除项](#vpc-bpa-scenario-4)
+ [场景 5 - 修改排除模式](#vpc-bpa-scenario-5)
+ [场景 6 - 修改 VPC BPA 模式](#vpc-bpa-scenario-6)
+ [清理](#vpc-bpa-scenario-cleanup)

## 部署 CloudFormation 模板（可选）
<a name="security-vpc-bpa-example-deploy-cfn"></a>

要演示此功能如何工作，您需要一个 VPC、子网、实例和其他资源。为了更轻松地完成本演示，我们在下面提供了一个 CloudFormation 模板，您可以使用该模板来快速启动本演示中方案所需的资源。这一步骤是可选的，您可能只是想查看本节场景中的图表。

**注意**  
在本节中使用 CloudFormation 模板创建的资源会产生一些相关费用，例如 NAT 网关和公有 IPv4 地址的费用。为避免产生额外的费用，请确保完成清理步骤，移除为本示例创建的所有资源。
此 CloudFormation 模板创建了 VPC BPA 所需的底层资源，但其本身未启用 VPC BPA 功能。在选择单独启用 VPC BPA 功能后，此处部署的资源旨在帮助您了解和测试这项功能。

该模板在您的账户中创建以下资源：
+ 仅出口互联网网关
+ 互联网网关
+ NAT 网关
+ 两个公有子网
+ 一个私有子网
+ 具有公有和私有 IPv4 地址的两个实例
+ 具有 IPv6 地址和私有 IPv4 地址的一个 EC2 实例
+ 仅具有私有 IPv4 地址的一个 EC2 实例
+ 允许 SSH 和 ICMP 入站流量且允许所有出站流量的安全组
+ VPC 流日志
+ 子网 B 中的一个 EC2 Instance Connect 端点

复制下面的模板并将其保存到 .yaml 文件。

```
AWSTemplateFormatVersion: '2010-09-09'
Description: Creates a VPC with public and private subnets, NAT gateway, and EC2 instances for VPC BPA.

Parameters:
  InstanceAMI:
    Description: ID of the Amazone Machine Image (AMI) to use with the instances launched by this template
    Type: AWS::EC2::Image::Id
  InstanceType:
    Description: EC2 Instance type to use with the instances launched by this template
    Type: String
    Default: t2.micro
 
Resources:

  # VPC
  VPCBPA:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
      EnableDnsHostnames: true
      EnableDnsSupport: true
      InstanceTenancy: default
      Tags:
        - Key: Name
          Value: VPC BPA

  # VPC IPv6 CIDR
  VPCBPAIpv6CidrBlock:
    Type: AWS::EC2::VPCCidrBlock
    Properties:
      VpcId: !Ref VPCBPA
      AmazonProvidedIpv6CidrBlock: true

  # EC2 Key Pair
  VPCBPAKeyPair:
    Type: AWS::EC2::KeyPair
    Properties:
      KeyName: vpc-bpa-key

  # Internet Gateway  
  VPCBPAInternetGateway:
    Type: AWS::EC2::InternetGateway
    Properties:
      Tags:
        - Key: Name
          Value: VPC BPA Internet Gateway
    
  VPCBPAInternetGatewayAttachment:
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:
      VpcId: !Ref VPCBPA
      InternetGatewayId: !Ref VPCBPAInternetGateway

  # Egress-Only Internet Gateway
  VPCBPAEgressOnlyInternetGateway:
    Type: AWS::EC2::EgressOnlyInternetGateway
    Properties:
      VpcId: !Ref VPCBPA

  # Subnets
  VPCBPAPublicSubnetA:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPCBPA
      CidrBlock: 10.0.1.0/24
      MapPublicIpOnLaunch: true
      Tags:
        - Key: Name
          Value: VPC BPA Public Subnet A
      
  VPCBPAPublicSubnetB:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPCBPA
      CidrBlock: 10.0.2.0/24
      MapPublicIpOnLaunch: true
      Tags:
        - Key: Name
          Value: VPC BPA Public Subnet B
      
  VPCBPAPrivateSubnetC:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPCBPA
      CidrBlock: 10.0.3.0/24
      MapPublicIpOnLaunch: false
      Ipv6CidrBlock: !Select [0, !GetAtt VPCBPA.Ipv6CidrBlocks]
      AssignIpv6AddressOnCreation: true
      Tags:
        - Key: Name
          Value: VPC BPA Private Subnet C

  # NAT Gateway
  VPCBPANATGateway:
    Type: AWS::EC2::NatGateway
    Properties:
      AllocationId: !GetAtt VPCBPANATGatewayEIP.AllocationId
      SubnetId: !Ref VPCBPAPublicSubnetB
      Tags:
        - Key: Name
          Value: VPC BPA NAT Gateway

  VPCBPANATGatewayEIP:
    Type: AWS::EC2::EIP
    Properties:
      Domain: vpc
      Tags:
        - Key: Name
          Value: VPC BPA NAT Gateway EIP

  # Route Tables
  VPCBPAPublicRouteTable:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId: !Ref VPCBPA
      Tags:
        - Key: Name
          Value: VPC BPA Public Route Table
      
  VPCBPAPublicRoute:
    Type: AWS::EC2::Route
    DependsOn: VPCBPAInternetGatewayAttachment
    Properties:
      RouteTableId: !Ref VPCBPAPublicRouteTable
      DestinationCidrBlock: 0.0.0.0/0
      GatewayId: !Ref VPCBPAInternetGateway
      
  VPCBPAPublicSubnetARouteTableAssoc:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: !Ref VPCBPAPublicSubnetA
      RouteTableId: !Ref VPCBPAPublicRouteTable
      
  VPCBPAPublicSubnetBRouteTableAssoc:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: !Ref VPCBPAPublicSubnetB
      RouteTableId: !Ref VPCBPAPublicRouteTable
      
  VPCBPAPrivateRouteTable:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId: !Ref VPCBPA
      Tags:
        - Key: Name
          Value: VPC BPA Private Route Table
      
  VPCBPAPrivateRoute:
    Type: AWS::EC2::Route
    Properties:
      RouteTableId: !Ref VPCBPAPrivateRouteTable
      DestinationCidrBlock: 0.0.0.0/0
      NatGatewayId: !Ref VPCBPANATGateway
      
  VPCBPAPrivateSubnetCRoute:
    Type: AWS::EC2::Route
    Properties:
      RouteTableId: !Ref VPCBPAPrivateRouteTable
      DestinationIpv6CidrBlock: ::/0
      EgressOnlyInternetGatewayId: !Ref VPCBPAEgressOnlyInternetGateway
      
  VPCBPAPrivateSubnetCRouteTableAssociation:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: !Ref VPCBPAPrivateSubnetC
      RouteTableId: !Ref VPCBPAPrivateRouteTable

  # EC2 Instances Security Group
  VPCBPAInstancesSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupName: VPC BPA Instances Security Group
      GroupDescription: Allow SSH and ICMP access
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 22
          ToPort: 22
          CidrIp: 0.0.0.0/0
        - IpProtocol: icmp
          FromPort: -1
          ToPort: -1
          CidrIp: 0.0.0.0/0
      VpcId: !Ref VPCBPA
      Tags:
        - Key: Name
          Value: VPC BPA Instances Security Group

  # EC2 Instances
  VPCBPAInstanceA:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: !Ref InstanceAMI
      InstanceType: t2.micro
      KeyName: !Ref VPCBPAKeyPair
      SubnetId: !Ref VPCBPAPublicSubnetA
      SecurityGroupIds:
        - !Ref VPCBPAInstancesSecurityGroup
      Tags:
        - Key: Name
          Value: VPC BPA Instance A

  VPCBPAInstanceB:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: !Ref InstanceAMI
      InstanceType: !Ref InstanceType
      KeyName: !Ref VPCBPAKeyPair
      SubnetId: !Ref VPCBPAPublicSubnetB
      SecurityGroupIds:
        - !Ref VPCBPAInstancesSecurityGroup
      Tags:
        - Key: Name
          Value: VPC BPA Instance B

  VPCBPAInstanceC:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: !Ref InstanceAMI
      InstanceType: !Ref InstanceType
      KeyName: !Ref VPCBPAKeyPair
      SubnetId: !Ref VPCBPAPrivateSubnetC
      SecurityGroupIds:
        - !Ref VPCBPAInstancesSecurityGroup
      Tags:
        - Key: Name
          Value: VPC BPA Instance C

  VPCBPAInstanceD:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: !Ref InstanceAMI
      InstanceType: !Ref InstanceType
      KeyName: !Ref VPCBPAKeyPair
      NetworkInterfaces:
        - DeviceIndex: '0'
          GroupSet:
            - !Ref VPCBPAInstancesSecurityGroup
          SubnetId: !Ref VPCBPAPrivateSubnetC
          Ipv6AddressCount: 1
      Tags:
        - Key: Name
          Value: VPC BPA Instance D

  # Flow Logs IAM Role
  VPCBPAFlowLogRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service: vpc-flow-logs.amazonaws.com
            Action: 'sts:AssumeRole'
      Tags:
        - Key: Name
          Value: VPC BPA Flow Logs Role
      
  VPCBPAFlowLogPolicy:
    Type: AWS::IAM::Policy
    Properties:
      PolicyName: VPC-BPA-FlowLogsPolicy
      PolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Action:
              - 'logs:CreateLogGroup'
              - 'logs:CreateLogStream'
              - 'logs:PutLogEvents'
              - 'logs:DescribeLogGroups'
              - 'logs:DescribeLogStreams'
            Resource: '*'
      Roles:
        - !Ref VPCBPAFlowLogRole

  # Flow Logs
  VPCBPAFlowLog:
    Type: AWS::EC2::FlowLog
    Properties:
      ResourceId: !Ref VPCBPA
      ResourceType: VPC
      TrafficType: ALL
      LogDestinationType: cloud-watch-logs
      LogGroupName: /aws/vpc-flow-logs/VPC-BPA
      DeliverLogsPermissionArn: !GetAtt VPCBPAFlowLogRole.Arn
      LogFormat: '${version} ${account-id} ${interface-id} ${srcaddr} ${dstaddr} ${srcport} ${dstport} ${protocol} ${packets} ${bytes} ${start} ${end} ${action} ${log-status} ${vpc-id} ${subnet-id} ${instance-id} ${tcp-flags} ${type} ${pkt-srcaddr} ${pkt-dstaddr} ${region} ${az-id} ${sublocation-type} ${sublocation-id} ${pkt-src-aws-service} ${pkt-dst-aws-service} ${flow-direction} ${traffic-path} ${reject-reason}'
      Tags:
        - Key: Name
          Value: VPC BPA Flow Logs

  # EC2 Instance Connect Endpoint
  VPCBPAEC2InstanceConnectEndpoint:
    Type: AWS::EC2::InstanceConnectEndpoint
    Properties:
      SecurityGroupIds:
        - !Ref VPCBPAInstancesSecurityGroup
      SubnetId: !Ref VPCBPAPublicSubnetB

Outputs:
  VPCBPAVPCId:
    Description: A reference to the created VPC
    Value: !Ref VPCBPA
    Export:
      Name: vpc-id

  VPCBPAPublicSubnetAId:
    Description: The ID of the public subnet A
    Value: !Ref VPCBPAPublicSubnetA
    
  VPCBPAPublicSubnetAName:
    Description: The name of the public subnet A
    Value: VPC BPA Public Subnet A

  VPCBPAPublicSubnetBId:
    Description: The ID of the public subnet B
    Value: !Ref VPCBPAPublicSubnetB
    
  VPCBPAPublicSubnetBName:
    Description: The name of the public subnet B
    Value: VPC BPA Public Subnet B

  VPCBPAPrivateSubnetCId:
    Description: The ID of the private subnet C
    Value: !Ref VPCBPAPrivateSubnetC
    
  VPCBPAPrivateSubnetCName:
    Description: The name of the private subnet C
    Value: VPC BPA Private Subnet C

  VPCBPAInstanceAId:
    Description: The ID of instance A
    Value: !Ref VPCBPAInstanceA

  VPCBPAInstanceBId:
    Description: The ID of instance B
    Value: !Ref VPCBPAInstanceB

  VPCBPAInstanceCId:
    Description: The ID of instance C
    Value: !Ref VPCBPAInstanceC

  VPCBPAInstanceDId:
    Description: The ID of instance D
    Value: !Ref VPCBPAInstanceD
```

------
#### [ AWS 管理控制台 ]

1. 打开 [https://console.aws.amazon.com/cloudformation/](https://console.aws.amazon.com/cloudformation/) 控制台，网址为 CloudFormation。

1. 选择**创建堆栈**并上传 .yaml 模板文件。

1. 完成启动模板的步骤。您需要输入[映像 ID](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/finding-an-ami.html) 和[实例类型](https://aws.amazon.com/ec2/instance-types/)（如 t2.micro）。您还需要允许 CloudFormation 为您创建一个 IAM 角色，以创建流日志并获得登录 CloudWatch 的权限。

1. 启动堆栈后，请查看**事件**选项卡以查看进度，并确保堆栈已完成，然后再继续。

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

1. 运行以下命令创建 CloudFormation 堆栈：

   ```
   aws cloudformation create-stack --stack-name VPC-BPA-stack --template-body file://sampletemplate.yaml --capabilities CAPABILITY_IAM --region us-east-2
   ```

   输出：

   ```
   {
       "StackId": "arn:aws:cloudformation:us-east-2:470889052923:stack/VPC-BPA-stack/8a7a2cc0-8001-11ef-b196-06386a84b72f"
   }
   ```

1. 查看进度并确保堆栈已完成，然后再继续：

   ```
   aws cloudformation describe-stack-events --stack-name VPC-BPA-stack --region us-east-2
   ```

------

## 使用网络访问分析器查看 VPC BPA 的影响
<a name="vpc-bpa-naa"></a>

在本节中，您将使用网络访问分析器查看账户中使用互联网网关的资源。使用此分析可了解在您的账户中启用 VPC BPA 和阻止流量所产生的影响。

有关网络访问分析器区域可用性的信息，请参阅《Network Access Analyzer Guide》**中的 [Limitations](https://docs.aws.amazon.com/vpc/latest/network-access-analyzer/how-network-access-analyzer-works.html#analyzer-limitations)。

------
#### [ AWS 管理控制台 ]

1. 打开位于 [https://console.aws.amazon.com/networkinsights/](https://console.aws.amazon.com/networkinsights/) 的 AWS 网络见解控制台。

1. 选择**网络访问分析器**。

1. 选择**创建网络访问范围**。

1. 选择**评估 VPC 阻止公开访问的影响**，然后选择**下一步**。

1. 该模板已配置为分析您账户中进出互联网网关的流量。您可以在**来源**和**目标**下查看此项。

1. 选择**下一步**。

1. 选择**创建网络访问范围**。

1. 选择您刚创建的范围，然后选择**分析**。

1. 等待分析完成。

1. 查看分析的调查发现。**调查发现**下的每一行都显示数据包在网络中进出您账户中的互联网网关可以采用的网络路径。在这种情况下，如果您启用 VPC BPA，并且这些调查发现中显示的 VPC 和/或子网均未配置为 VPC BPA 排除项，则流向这些 VPC 和子网的流量将受到限制。

1. 分析每项调查发现，了解 VPC BPA 对 VPC 中资源的影响。

影响分析已完成。

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

1. 创建网络访问范围：

   ```
   aws ec2 create-network-insights-access-scope --match-paths "Source={ResourceStatement={ResourceTypes=["AWS::EC2::InternetGateway"]}}" "Destination={ResourceStatement={ResourceTypes=["AWS::EC2::InternetGateway"]}}" --region us-east-2
   ```

   输出：

   ```
   {
     "NetworkInsightsAccessScope": {
       "NetworkInsightsAccessScopeId": "nis-04cad3c4b3a1d5e3e",
       "NetworkInsightsAccessScopeArn": "arn:aws:ec2:us-east-2:470889052923:network-insights-access-scope/nis-04cad3c4b3a1d5e3e",
       "CreatedDate": "2024-09-30T15:55:53.171000+00:00",
       "UpdatedDate": "2024-09-30T15:55:53.171000+00:00"
     },
     "NetworkInsightsAccessScopeContent": {
       "NetworkInsightsAccessScopeId": "nis-04cad3c4b3a1d5e3e",
       "MatchPaths": [
         {
           "Source": {
             "ResourceStatement": {
               "ResourceTypes": [
                 "AWS::EC2::InternetGateway"
               ]
             }
           }
         },
         {
           "Destination": {
             "ResourceStatement": {
               "ResourceTypes": [
                 "AWS::EC2::InternetGateway"
               ]
             }
           }
         }
       ]
     }
   }
   ```

1. 开始范围分析：

   ```
   aws ec2 start-network-insights-access-scope-analysis --network-insights-access-scope-id nis-04cad3c4b3a1d5e3e --region us-east-2
   ```

   输出：

   ```
   {
     "NetworkInsightsAccessScopeAnalysis": {
       "NetworkInsightsAccessScopeAnalysisId": "nisa-0aa383a1938f94cd1",
       "NetworkInsightsAccessScopeAnalysisArn": "arn:aws:ec2:us-east-2:470889052923:network-insights-access-scope-analysis/nisa-0aa383a1938f94cd",
       "NetworkInsightsAccessScopeId": "nis-04cad3c4b3a1d5e3e",
       "Status": "running",
       "StartDate": "2024-09-30T15:56:59.109000+00:00",
       "AnalyzedEniCount": 0
     }
   }
   ```

1. 获取分析的结果：

   ```
   aws ec2 get-network-insights-access-scope-analysis-findings --network-insights-access-scope-analysis-id nisa-0aa383a1938f94cd1 --region us-east-2 --max-items 1
   ```

   输出：

   ```
   {
     "AnalysisFindings": [
       {
         "NetworkInsightsAccessScopeAnalysisId": "nisa-0aa383a1938f94cd1",
         "NetworkInsightsAccessScopeId": "nis-04cad3c4b3a1d5e3e",
         "FindingId": "AnalysisFinding-1",
         "FindingComponents": [
           {
             "SequenceNumber": 1,
             "Component": {
               "Id": "igw-04a5344b4e30486f1",
               "Arn": "arn:aws:ec2:us-east-2:470889052923:internet-gateway/igw-04a5344b4e30486f1",
               "Name": "VPC BPA Internet Gateway"
             },
             "OutboundHeader": {
               "DestinationAddresses": [
                 "10.0.1.85/32"
               ]
             },
             "InboundHeader": {
               "DestinationAddresses": [
                 "10.0.1.85/32"
               ],
               "DestinationPortRanges": [
                 {
                   "From": 22,
                   "To": 22
                 }
               ],
               "Protocol": "6",
               "SourceAddresses": [
                 "0.0.0.0/5",
                 "100.0.0.0/10",
                 "96.0.0.0/6"
               ],
               "SourcePortRanges": [
                 {
                   "From": 0,
                   "To": 65535
                 }
               ]
             },
             "Vpc": {
               "Id": "vpc-0762547ec48b6888d",
               "Arn": "arn:aws:ec2:us-east-2:470889052923:vpc/vpc-0762547ec48b6888d",
               "Name": "VPC BPA"
             }
           },
           {
             "SequenceNumber": 2,
             "AclRule": {
               "Cidr": "0.0.0.0/0",
               "Egress": false,
               "Protocol": "all",
               "RuleAction": "allow",
               "RuleNumber": 100
             },
             "Component": {
               "Id": "acl-06194fc3a4a03040b",
               "Arn": "arn:aws:ec2:us-east-2:470889052923:network-acl/acl-06194fc3a4a03040b"
             }
           },
           {
             "SequenceNumber": 3,
             "Component": {
               "Id": "sg-093dde06415d03924",
               "Arn": "arn:aws:ec2:us-east-2:470889052923:security-group/sg-093dde06415d03924",
               "Name": "VPC BPA Instances Security Group"
             },
             "SecurityGroupRule": {
               "Cidr": "0.0.0.0/0",
               "Direction": "ingress",
               "PortRange": {
                 "From": 22,
                 "To": 22
               },
               "Protocol": "tcp"
             }
           },
           {
             "SequenceNumber": 4,
             "AttachedTo": {
               "Id": "i-058db34f9a0997895",
               "Arn": "arn:aws:ec2:us-east-2:470889052923:instance/i-058db34f9a0997895",
               "Name": "VPC BPA Instance A"
             },
             "Component": {
               "Id": "eni-0fa23f2766f03b286",
               "Arn": "arn:aws:ec2:us-east-2:470889052923:network-interface/eni-0fa23f2766f03b286"
             },
             "InboundHeader": {
               "DestinationAddresses": [
                 "10.0.1.85/32"
               ],
               "DestinationPortRanges": [
                 {
                   "From": 22,
                   "To": 22
                 }
               ],
               "Protocol": "6",
               "SourceAddresses": [
                 "0.0.0.0/5",
                 "100.0.0.0/10",
                 "96.0.0.0/6"
               ],
               "SourcePortRanges": [
                 {
                   "From": 0,
                   "To": 65535
                 }
               ]
             },
             "Subnet": {
               "Id": "subnet-035d235a762eeed04",
               "Arn": "arn:aws:ec2:us-east-2:470889052923:subnet/subnet-035d235a762eeed04",
               "Name": "VPC BPA Public Subnet A"
             },
             "Vpc": {
               "Id": "vpc-0762547ec48b6888d",
               "Arn": "arn:aws:ec2:us-east-2:470889052923:vpc/vpc-0762547ec48b6888d",
               "Name": "VPC BPA"
             }
           }
         ]
       }
     ],
     "AnalysisStatus": "succeeded",
     "NetworkInsightsAccessScopeAnalysisId": "nisa-0aa383a1938f94cd1",
     "NextToken": "eyJOZXh0VG9rZW4iOiBudWxsLCAiYm90b190cnVuY2F0ZV9hbW91bnQiOiAxfQ=="
   }
   ```

   结果显示进出您账户所有 VPC 中互联网网关的流量。结果被归类为“调查发现”。"FindingId": "AnalysisFinding-1" 表示这是分析中的第一个调查发现。请注意，有多个调查发现，每个调查发现都表明启用 VPC BPA 将影响流量。第一个调查发现表明流量从互联网网关（"SequenceNumber": 1）开始，依次传递到 NACL（"SequenceNumber": 2）、安全组（"SequenceNumber": 3），然后在实例（"SequenceNumber": 4）处结束。

1. 分析调查发现以了解 VPC BPA 对 VPC 中资源的影响。

影响分析已完成。

------

## 场景 1 - 连接到未启用 VPC BPA 的实例
<a name="vpc-bpa-scenario-1-connect-scen1"></a>

在本节中，可以通过允许入站和出站流量的互联网网关，从互联网访问公有子网 A 和 B 中的 EC2 实例。私有子网中的实例 C 和 D 可以通过 NAT 网关或仅出口互联网网关发出出站流量，但无法直接从互联网访问。此设置为某些资源提供 Internet 访问，同时保护其他资源。本设置旨在设置基准并确保在启用 VPC BPA 之前可以访问所有实例，您需要连接到所有实例并对公有 IP 地址运行 ping 命令。

未启用 VPC BPA 的 VPC 示意图：

![\[显示未启用 VPC BPA 的 VPC 的示意图。\]](http://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/images/vpc-bpa-1.png)


### 1.1 连接到实例
<a name="vpc-bpa-scenario-1-connect-scen1-sub"></a>

完成本节以在关闭 VPC BPA 的情况下连接到您的实例，以确保可以毫无问题地进行连接。在本示例中使用 CloudFormation 创建的所有实例都有“VPC BPA 实例 A”之类的名称。

------
#### [ AWS 管理控制台 ]

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 打开实例 A 的详细信息。

1. 通过 **EC2 Instance Connect** > **使用 EC2 Instance Connect 端点连接**选项连接到实例 A。

1. 选择**连接**。成功连接到该实例后，运行 ping www.amazon.com 命令确认您可以向互联网发送出站请求。

1. 使用与连接实例 A 相同的方法连接到实例 B、C 和 D。从每个实例 ping www.amazon.com 以验证您是否可以将出站请求发送到 Internet。

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

1. 使用公有 IPv4 地址对实例 A 运行 Ping 命令以检查入站流量：

   ```
   ping 18.225.8.244
   ```

   输出：

   ```
   Pinging 18.225.8.244 with 32 bytes of data:
   
   Reply from 18.225.8.244: bytes=32 time=51ms TTL=110
   Reply from 18.225.8.244: bytes=32 time=61ms TTL=110
   ```

   请注意，运行 ping 命令成功并且流量未被阻止。

1. 使用私有 IPv4 地址连接并检查出站流量：

   ```
   aws ec2-instance-connect ssh --instance-id i-058db34f9a0997895 --region us-east-2 --connection-type eice
   ```

   输出：

   ```
   A newer release of "Amazon Linux" is available. Version 2023.5.20240916:
   Run "/usr/bin/dnf check-release-update" for full release and version update info
   ,     #_   ~_  ####_        Amazon Linux 2023
   ~~  _#####\  ~~     ###|
   ~~       #/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
   ~~~         /
   ~~._.   _/
   / /
   /m/'
   Last login: Fri Sep 27 18:27:57 2024 from 3.16.146.5
   [ec2-user@ip-10-0-1-85 ~]$ ping www.amazon.com
   PING www-amazon-com.customer.fastly.net (18.65.233.187) 56(84) bytes of data.
   64 bytes from 18.65.233.187 (18.65.233.187): icmp_seq=15 ttl=58 time=2.06 ms
   64 bytes from 18.65.233.187 (18.65.233.187): icmp_seq=16 ttl=58 time=2.26 ms
   ```

   请注意，运行 ping 命令成功并且流量未被阻止。

1. 使用公有 IPv4 地址对实例 B 运行 Ping 命令以检查入站流量：

   ```
   ping 3.18.106.198
   ```

   输出：

   ```
   Pinging 3.18.106.198 with 32 bytes of data:
   Reply from 3.18.106.198: bytes=32 time=83ms TTL=110
   Reply from 3.18.106.198: bytes=32 time=54ms TTL=110
   ```

   请注意，运行 ping 命令成功并且流量未被阻止。

1. 使用私有 IPv4 地址连接并检查出站流量：

   ```
   aws ec2-instance-connect ssh --instance-id  i-08552a0774b5c8f72 --region us-east-2 --connection-type eice
   ```

   输出：

   ```
   A newer release of "Amazon Linux" is available.
   Version 2023.5.20240916:
   Run "/usr/bin/dnf check-release-update" for full release and version update info
   ,     #   ~_  ####        Amazon Linux 2023
   ~~  _#####\  ~~     ###|
   ~~       #/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
   ~~~         /
   ~~..   _/
   / /
   /m/'
   Last login: Fri Sep 27 18:12:27 2024 from 3.16.146.5
   [ec2-user@ip-10-0-2-98 ~]$ ping www.amazon.com
   PING d3ag4hukkh62yn.cloudfront.net (18.65.233.187) 56(84) bytes of data.
   64 bytes from server-3-160-24-126.cmh68.r.cloudfront.net (18.65.233.187): icmp_seq=1 ttl=249 time=1.55 ms
   64 bytes from server-3-160-24-126.cmh68.r.cloudfront.net (18.65.233.187): icmp_seq=2 ttl=249 time=1.67 ms
   ```

   请注意，运行 ping 命令成功并且流量未被阻止。

1. 连接到实例 C。由于没有可以运行 ping 命令的公有 IP 地址，因此请使用 EC2 Instance Connect 进行连接，然后从该实例对公有 IP 运行 ping 命令以检查出站流量：

   ```
   aws ec2-instance-connect ssh --instance-id i-04eca55f2a482b2c4 --region us-east-2 --connection-type eice
   ```

   输出：

   ```
   A newer release of "Amazon Linux" is available.
   Version 2023.5.20240916:
   Run "/usr/bin/dnf check-release-update" for full release and version update info
   ,     #   ~_  ####        Amazon Linux 2023
   ~~  _#####\  ~~     ###|
   ~~       #/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
   ~~~         /
   ~~..   _/
   / /
   /m/'
   Last login: Thu Sep 19 20:31:26 2024 from 10.0.2.86
   [ec2-user@ip-10-0-3-180 ~]$ ping www.amazon.com
   PING d3ag4hukkh62yn.cloudfront.net (18.65.233.187) 56(84) bytes of data.
   64 bytes from server-3-160-24-126.cmh68.r.cloudfront.net (18.65.233.187): icmp_seq=1 ttl=248 time=1.75 ms
   64 bytes from server-3-160-24-126.cmh68.r.cloudfront.net (18.65.233.187): icmp_seq=2 ttl=248 time=1.97 ms
   64 bytes from server-3-160-24-26.cmh68.r.cloudfront.net (18.65.233.187): icmp_seq=3 ttl=248 time=1.08 ms
   ```

   请注意，运行 ping 命令成功并且流量未被阻止。

1. 连接到实例 D。由于没有可以运行 ping 命令的公有 IP 地址，因此请使用 EC2 Instance Connect 进行连接，然后从该实例对公有 IP 运行 ping 命令以检查出站流量：

   ```
   aws ec2-instance-connect ssh --instance-id i-05f9e6a9cfac1dba0 --region us-east-2 --connection-type eice
   ```

   输出：

   ```
   The authenticity of host '10.0.3.59 can't be established.
   ECDSA key fingerprint is SHA256:c4naBCqbC61/cExDyccEproNU+1HHSpMSzl2J6cOtIZA8g.
   Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
   Warning: Permanently added '10.0.3.59' (ECDSA) to the list of known hosts.
   A newer release of "Amazon Linux" is available.  Version 2023.5.20240916:
   Run "/usr/bin/dnf check-release-update" for full release and version update info
   ,     #   ~_  ####        Amazon Linux 2023
   ~~  _#####\  ~~     ###|
   ~~       #/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
   ~~~         /
   ~~..   _/
   _/ _/
   _/m/'
   [ec2-user@ip-10-0-3-59 ~]$ ping www.amazon.com
   PING www.amazon.com(2600:9000:25f3:ee00:7:49a5:5fd4:b121 (2600:9000:25f3:ee00:7:49a5:5fd4:b121)) 56 data bytes
   64 bytes from 2600:9000:25f3:ee00:7:49a5:5fd4:b121 (2600:9000:25f3:ee00:7:49a5:5fd4:b121): icmp_seq=1 ttl=58 time=1.19 ms
   64 bytes from 2600:9000:25f3:ee00:7:49a5:5fd4:b121 (2600:9000:25f3:ee00:7:49a5:5fd4:b121): icmp_seq=2 ttl=58 time=1.38 ms
   ```

   请注意，运行 ping 命令成功并且流量未被阻止。

------

## 场景 2 - 启用 VPC BPA 双向模式
<a name="vpc-bpa-scenario-1-connect-scen2"></a>

在本节中，您将启用 VPC BPA，并在阻止进出您账户中互联网网关的流量。

显示 VPC BPA 双向模式启用的示意图：

![\[显示启用 VPC BPA 双向的 VPC 的示意图。\]](http://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/images/vpc-bpa-2.png)


### 2.1 启用 VPC BPA 双向模式
<a name="vpc-bpa-scenario-1-connect-scen2-sub1"></a>

完成本节以启用 VPC BPA。VPC BPA 双向模式阻止进出此区域互联网网关和仅出口互联网网关的所有流量（已排除 VPC 和子网除外）。

------
#### [ AWS 管理控制台 ]

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

1. 在左侧导航窗格中，选择**设置**。

1. 选择**编辑公共访问权限设置**。

1. 选择**开启屏蔽公共访问**和**双向**，然后选择**保存更改**。

1. 等待**状态**更改为**开启**。VPC BPA 设置生效和状态更新可能需要几分钟时间。

VPC BPA 现已启用。

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

1. 使用 modify-vpc-block-public-access-options 命令启用 VPC BPA：

   ```
   aws ec2 --region us-east-2 modify-vpc-block-public-access-options --internet-gateway-block-mode block-bidirectional
   ```

   VPC BPA 设置生效和状态更新可能需要几分钟时间。

1. 查看 VPC BPA 的状态：

   ```
   aws ec2 --region us-east-2 describe-vpc-block-public-access-options
   ```

------

### 2.2 连接到实例
<a name="vpc-bpa-scenario-1-connect-scen2-sub2"></a>

完成本节以连接到您的实例。

------
#### [ AWS 管理控制台 ]

1. 如同在方案 1 中所做的那样，对实例 A 和实例 B 的公有 IPv4 地址运行 Ping 命令。请注意，流量已被阻止。

1. 按照场景 1 中的方式，通过 **EC2 Instance Connect** > **使用 EC2 Instance Connect 端点连接**选项连接到实例 A。确保您使用端点选项。

1. 选择**连接**。成功连接到实例后，ping www.amazon.com。请注意，所有出站流量均已阻止。

1. 使用与连接实例 A 相同的方法连接到实例 B、C 和 D，测试对互联网的出站请求。请注意，所有出站流量均已阻止。

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

1. 使用公有 IPv4 地址对实例 A 运行 Ping 命令以检查入站流量：

   ```
   ping 18.225.8.244
   ```

   输出：

   ```
   Pinging 18.225.8.244 with 32 bytes of data:
   
   Request timed out.
   ```

   请注意，运行 ping 命令失败并且流量将被阻止。

1. 使用私有 IPv4 地址连接并检查出站流量：

   ```
   aws ec2-instance-connect ssh --instance-id i-058db34f9a0997895 --region us-east-2 --connection-type eice
   ```

   输出：

   ```
   The authenticity of host '10.0.1.85' can't be established.
   ECDSA key fingerprint is SHA256:3zo/gSss+HAZ+7eTyWlOB/Ke04IM+hadjsoLJeRTWBk.
   Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
   Warning: Permanently added '10.0.1.85' (ECDSA) to the list of known hosts.
   A newer release of "Amazon Linux" is available.  Version 2023.5.20240916:
   Run "/usr/bin/dnf check-release-update" for full release and version update info
   ,     #_   ~_  ####_        Amazon Linux 2023
   ~~  _#####\  ~~     ###|
   ~~       #/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
   ~~~         /
   ~~._.   _/
   / /
   /m/'
   Last login: Fri Sep 27 14:16:53 2024 from 3.16.146.5
   [ec2-user@ip-10-0-1-85 ~]$ ping www.amazon.com
   PING d3ag4hukkh62yn.cloudfront.net (18.65.233.187) 56(84) bytes of data.
   ```

   请注意，运行 ping 命令失败并且流量将被阻止。

1. 使用公有 IPv4 地址对实例 B 运行 Ping 命令以检查入站流量：

   ```
   ping 3.18.106.198
   ```

   输出：

   ```
   Pinging 3.18.106.198 with 32 bytes of data:
   Request timed out.
   ```

   请注意，运行 ping 命令失败并且流量将被阻止。

1. 使用私有 IPv4 地址连接并检查出站流量：

   ```
   aws ec2-instance-connect ssh --instance-id  i-08552a0774b5c8f72 --region us-east-2 --connection-type eice
   ```

   输出：

   ```
   The authenticity of host '10.0.2.98' can't be established.
   ECDSA key fingerprint is SHA256:0IjXKKyVlDthcCfI0IPIJMUiItAOLYKRNLGTYURnFXo.
   Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
   Warning: Permanently added '10.0.2.98' (ECDSA) to the list of known hosts.
   A newer release of "Amazon Linux" is available.  Version 2023.5.20240916:
   Run "/usr/bin/dnf check-release-update" for full release and version update info
   ,     #   ~_  ####        Amazon Linux 2023
   ~~  _#####\  ~~     ###|
   ~~       #/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
   ~~~         /
   ~~..   _/
   / /
   /m/'
   Last login: Fri Sep 27 14:18:16 2024 from 3.16.146.5
   [ec2-user@ip-10-0-2-98 ~]$ ping www.amazon.com
   PING d3ag4hukkh62yn.cloudfront.net (18.65.233.187) 56(84) bytes of data.
   ```

   请注意，运行 ping 命令失败并且流量将被阻止。

1. 连接到实例 C。由于没有可以运行 ping 命令的公有 IP 地址，因此请使用 EC2 Instance Connect 进行连接，然后从该实例对公有 IP 运行 ping 命令以检查出站流量：

   ```
   aws ec2-instance-connect ssh --instance-id i-04eca55f2a482b2c4 --region us-east-2 --connection-type eice
   ```

   输出：

   ```
   A newer release of "Amazon Linux" is available.  Version 2023.5.20240916:
   Run "/usr/bin/dnf check-release-update" for full release and version update info
   ,     #   ~_  ####        Amazon Linux 2023
   ~~  _#####\  ~~     ###|
   ~~       #/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
   ~~~         /
   ~~..   _/
   / /
   /m/'
   Last login: Tue Sep 24 15:17:56 2024 from 10.0.2.86
   [ec2-user@ip-10-0-3-180 ~]$ ping www.amazon.com
   PING d3ag4hukkh62yn.cloudfront.net (18.65.233.187) 56(84) bytes of data.
   ```

   请注意，运行 ping 命令失败并且流量将被阻止。

1. 连接到实例 D。由于没有可以运行 ping 命令的公有 IP 地址，因此请使用 EC2 Instance Connect 进行连接，然后从该实例对公有 IP 运行 ping 命令以检查出站流量：

   ```
   aws ec2-instance-connect ssh --instance-id i-05f9e6a9cfac1dba0 --region us-east-2 --connection-type eice
   ```

   输出：

   ```
   A newer release of "Amazon Linux" is available.  Version 2023.5.20240916:
   Run "/usr/bin/dnf check-release-update" for full release and version update info
   ,     #   ~_  ####        Amazon Linux 2023
   ~~  _#####\  ~~     ###|
   ~~       #/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
   ~~~         /
   ~~..   _/
   _/ _/
   _/m/'
   Last login: Fri Sep 27 16:42:01 2024 from 3.16.146.5
   [ec2-user@ip-10-0-3-59 ~]$ ping www.amazon.com
   PING www.amazon.com(2600:9000:25f3:8200:7:49a5:5fd4:b121 (2600:9000:25f3:8200:7:49a5:5fd4:b121)) 56 data bytes
   ```

   请注意，运行 ping 命令失败并且流量将被阻止。

------

### 2.3 可选：使用 Reachability Analyzer 验证连接是否被阻止
<a name="vpc-bpa-scenario-1-connect-scen2-sub3"></a>

[VPC Reachability Analyzer](https://docs.aws.amazon.com/vpc/latest/reachability/what-is-reachability-analyzer.html) 可用于了解根据您的网络配置（包括 VPC BPA 设置）是否可以访问某些网络路径。在本示例中，您将分析之前尝试的相同网络路径，以确认 VPC BPA 是连接失败的原因。

------
#### [ AWS 管理控制台 ]

1. 转到位于 [https://console.aws.amazon.com/networkinsights/home#ReachabilityAnalyzer](https://console.aws.amazon.com/networkinsights/home#ReachabilityAnalyzer) 的网络见解控制台。

1. 单击**创建和分析路径**。

1. 对于**源类型**，选择**互联网网关**，然后从**源**下拉列表中选择标记为 **VPC BPA 互联网网关**的互联网网关。

1. 对于**目标类型**，选择**实例**，然后从**目标**下拉列表中选择标记为 **VPC BPA 实例 A** 的实例。

1. 单击**创建和分析路径**。

1. 等待分析完成。这可能需要几分钟时间。

1. 完成后，您应该会看到**可访问性状态**为**无法访问**，并且**路径详细信息**显示原因是 `VPC_BLOCK_PUBLIC_ACCESS_ENABLED`。

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

1. 使用标记为 VPC BPA 互联网网关的互联网网关的 ID 和标记为 VPC BPA 实例 A 的实例 ID 创建网络路径：

   ```
   aws ec2 --region us-east-2 create-network-insights-path --source igw-id --destination instance-id --protocol TCP
   ```

1. 开始对网络路径进行分析：

   ```
   aws ec2 --region us-east-2 start-network-insights-analysis --network-insights-path-id nip-id
   ```

1. 检索分析的结果：

   ```
   aws ec2 --region us-east-2 describe-network-insights-analyses --network-insights-analysis-ids nia-id
   ```

1. 请确认 `VPC_BLOCK_PUBLIC_ACCESS_ENABLED` 是无法访问的 `ExplanationCode`。

------

请注意，您也可以[使用流日志监控 VPC BPA 影响](security-vpc-bpa-assess-impact-main.md#security-vpc-bpa-fl)。

## 场景 3 - 将 VPC BPA 更改为仅入口模式
<a name="vpc-bpa-scenario-3"></a>

在本节中，您将更改 VPC BPA 流量方向，只允许使用 NAT 网关或仅出口互联网网关的流量。公有子网中的 EC2 实例 A 和 B 无法通过互联网访问，因为 BPA 会阻止通过互联网网关的入站流量。私有子网中的实例 C 和 D 仍能够通过 NAT 网关和仅出口互联网网关发出出站流量，因此仍然可以访问互联网。

VPC BPA 仅入口模式已启用的示意图：

![\[显示 VPC BPA 仅入口已启用的 VPC 的示意图。\]](http://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/images/vpc-bpa-3.png)


### 3.1 将模式更改为仅入口
<a name="vpc-bpa-scenario-1-connect-scen3-sub1"></a>

完成本节以更改模式。

------
#### [ AWS 管理控制台 ]

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

1. 在左侧导航窗格中，选择**设置**。

1. 在**阻止公开访问**选项卡中，选择**编辑公共访问权限设置**。

1. 在 VPC 控制台中修改公共访问设置，并将方向更改为**仅入口**。

1. 保存更改并等待状态更新。VPC BPA 设置生效和状态更新可能需要几分钟时间。

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

1. 修改 VPC BPA 模式：

   ```
   aws ec2 --region us-east-2 modify-vpc-block-public-access-options --internet-gateway-block-mode block-ingress
   ```

   VPC BPA 设置生效和状态更新可能需要几分钟时间。

1. 查看 VPC BPA 的状态：

   ```
   aws ec2 --region us-east-2 describe-vpc-block-public-access-options
   ```

------

### 3.2 连接到实例
<a name="vpc-bpa-scenario-1-connect-scen3-sub2"></a>

完成本节以连接到实例。

------
#### [ AWS 管理控制台 ]

1. 如同在方案 1 中所做的那样，对实例 A 和实例 B 的公有 IPv4 地址运行 Ping 命令。请注意，流量已被阻止。

1. 如同在方案 1 中所做的那样，使用 EC2 Instance Connect 连接到实例 A 和实例 B，然后从这些实例运行 ping www.amazon.com 命令。请注意，您无法从实例 A 或实例 B 对互联网上的公共站点运行 ping 命令并且流量已被阻止。

1. 如同在方案 1 中所做的那样，使用 EC2 Instance Connect 连接到实例 C 和实例 D，然后从这些实例运行 ping www.amazon.com 命令。请注意，您可以从实例 C 或实例 D 对互联网上的公共站点运行 ping 命令并且允许流量。

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

1. 使用公有 IPv4 地址对实例 A 运行 Ping 命令以检查入站流量：

   ```
   ping 18.225.8.244
   ```

   输出：

   ```
   Pinging 18.225.8.244 with 32 bytes of data:
   
   Request timed out.
   ```

   请注意，运行 ping 命令失败并且流量将被阻止。

1. 使用私有 IPv4 地址连接并检查出站流量：

   ```
   aws ec2-instance-connect ssh --instance-id i-058db34f9a0997895 --region us-east-2 --connection-type eice
   ```

   输出：

   ```
   The authenticity of host '10.0.1.85' can't be established.
   ECDSA key fingerprint is SHA256:3zo/gSss+HAZ+7eTyWlOB/Ke04IM+hadjsoLJeRTWBk.
   Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
   Warning: Permanently added '10.0.1.85' (ECDSA) to the list of known hosts.
   A newer release of "Amazon Linux" is available.  Version 2023.5.20240916:
   Run "/usr/bin/dnf check-release-update" for full release and version update info
   ,     #_   ~_  ####_        Amazon Linux 2023
   ~~  _#####\  ~~     ###|
   ~~       #/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
   ~~~         /
   ~~._.   _/
   / /
   /m/'
   Last login: Fri Sep 27 14:16:53 2024 from 3.16.146.5
   [ec2-user@ip-10-0-1-85 ~]$ ping www.amazon.com
   PING d3ag4hukkh62yn.cloudfront.net (18.65.233.187) 56(84) bytes of data.
   ```

   请注意，运行 ping 命令失败并且流量将被阻止。

1. 使用公有 IPv4 地址对实例 B 运行 Ping 命令以检查入站流量：

   ```
   ping 3.18.106.198
   ```

   输出：

   ```
   Pinging 3.18.106.198 with 32 bytes of data:
   Request timed out.
   ```

   请注意，运行 ping 命令失败并且流量将被阻止。

1. 使用私有 IPv4 地址连接并检查出站流量：

   ```
   aws ec2-instance-connect ssh --instance-id i-08552a0774b5c8f72 --region us-east-2 --connection-type eice
   ```

   输出：

   ```
   The authenticity of host '10.0.2.98 ' can't be established.
   ECDSA key fingerprint is SHA256:0IjXKKyVlDthcCfI0IPIJMUiItAOLYKRNLGTYURnFXo.
   Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
   Warning: Permanently added '10.0.2.98' (ECDSA) to the list of known hosts.
   A newer release of "Amazon Linux" is available.  Version 2023.5.20240916:
   Run "/usr/bin/dnf check-release-update" for full release and version update info
   ,     #   ~_  ####        Amazon Linux 2023
   ~~  _#####\  ~~     ###|
   ~~       #/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
   ~~~         /
   ~~..   _/
   _/ /
   /m/'
   Last login: Fri Sep 27 14:18:16 2024 from 3.16.146.5
   [ec2-user@ip-10-0-2-98 ~]$ ping www.amazon.com
   PING d3ag4hukkh62yn.cloudfront.net (18.65.233.187) 56(84) bytes of data.
   ```

   请注意，运行 ping 命令失败并且流量将被阻止。

1. 连接到实例 C。由于没有可以运行 ping 命令的公有 IP 地址，因此请使用 EC2 Instance Connect 进行连接，然后从该实例对公有 IP 运行 ping 命令以检查出站流量：

   ```
   aws ec2-instance-connect ssh --instance-id i-04eca55f2a482b2c4 --region us-east-2 --connection-type eice
   ```

   输出：

   ```
   A newer release of "Amazon Linux" is available.  Version 2023.5.20240916:
   Run "/usr/bin/dnf check-release-update" for full release and version update info
      ,     #_   ~\_  ####_        Amazon Linux 2023
     ~~  \_#####\  ~~     \###|
     ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
      ~~       V~' '->
       ~~~         /
         ~~._.   _/
            _/ _/
          _/m/'                                                                                        
   Last login: Tue Sep 24 15:28:09 2024 from 10.0.2.86                                                     
   [ec2-user@ip-10-0-3-180 ~]$ ping www.amazon.com                                                         
   PING d3ag4hukkh62yn.cloudfront.net (18.65.233.187) 56(84) bytes of data.                                 
   64 bytes from server-3-160-24-126.cmh68.r.cloudfront.net (18.65.233.187): icmp_seq=1 ttl=248 time=1.84 ms
   64 bytes from server-3-160-24-126.cmh68.r.cloudfront.net (18.65.233.187): icmp_seq=2 ttl=248 time=1.40 ms
   ```

   请注意，运行 ping 命令成功并且流量未被阻止。

1. 连接到实例 D。由于没有可以运行 ping 命令的公有 IP 地址，因此请使用 EC2 Instance Connect 进行连接，然后从该实例对公有 IP 运行 ping 命令以检查出站流量：

   ```
   aws ec2-instance-connect ssh --instance-id i-05f9e6a9cfac1dba0 --region us-east-2 --connection-type eice
   ```

   输出：

   ```
   A newer release of "Amazon Linux" is available.  Version 2023.5.20240916:
   Run "/usr/bin/dnf check-release-update" for full release and version update info
      ,     #_   ~\_  ####_        Amazon Linux 2023
     ~~  \_#####\  ~~     \###|
     ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
      ~~       V~' '->
       ~~~         /
         ~~._.   _/
            _/ _/
          _/m/'
   Last login: Fri Sep 27 16:48:38 2024 from 3.16.146.5
   [ec2-user@ip-10-0-3-59 ~]$ ping www.amazon.com
   PING www.amazon.com(2600:9000:25f3:5800:7:49a5:5fd4:b121 (2600:9000:25f3:5800:7:49a5:5fd4:b121)) 56 data bytes
   64 bytes from 2600:9000:25f3:5800:7:49a5:5fd4:b121 (2600:9000:25f3:5800:7:49a5:5fd4:b121): icmp_seq=14 ttl=58 time=1.47 ms
   64 bytes from 2600:9000:25f3:5800:7:49a5:5fd4:b121 (2600:9000:25f3:5800:7:49a5:5fd4:b121): icmp_seq=16 ttl=58 time=1.59 ms
   ```

   请注意，运行 ping 命令成功并且流量未被阻止。

------

## 场景 4 - 创建排除项
<a name="vpc-bpa-scenario-4"></a>

在本部分中，您将创建一个排除项。然后，VPC BPA 将只阻止*没有排除项*的子网上的流量。VPC BPA 排除是一种可以应用于单个 VPC 或子网的模式，可将其排除在账户的 VPC BPA 模式之外，并允许双向或仅出口访问。即使账户未启用 VPC BPA，您也可以为 VPC 和子网创建 VPC BPA 排除项，以确保启用 VPC BPA 时排除项不会中断流量。

在本示例中，我们将为子网 A 创建排除项，以显示 VPC BPA 如何影响排除项的流量。

VPC BPA 仅入口模式已启用且子网 A 排除项已启用双向模式的示意图：

![\[显示 VPC BPA 处于仅入口模式并具有排除项的 VPC 的示意图。\]](http://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/images/vpc-bpa-4.png)


### 4.1 为子网 A 创建排除项
<a name="vpc-bpa-scenario-1-connect-scen4-sub1"></a>

完成本节以创建排除项。VPC BPA 排除是一种可以应用于单个 VPC 或子网的模式，可将其排除在账户的 VPC BPA 模式之外，并允许双向或仅出口访问。即使账户未启用 VPC BPA，您也可以为 VPC 和子网创建 VPC BPA 排除项，以确保启用 VPC BPA 时排除项不会中断流量。

------
#### [ AWS 管理控制台 ]

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

1. 在左侧导航窗格中，选择**设置**。

1. 在**屏蔽公共访问**选项卡的**排除**下，选择**创建排除项**。

1. 选择 **VPC BPA 公有子网 A**，确保选择的允许方向为**双向**，然后选择**创建排除项**。

1. 等待**排除项状态**变为**活动**。您可能需要刷新排除项表才能查看更改。

排除项已创建。

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

1. 修改排除允许方向：

   ```
   aws ec2 --region us-east-2 create-vpc-block-public-access-exclusion --subnet-id subnet-id --internet-gateway-exclusion-mode allow-bidirectional
   ```

1. 更新排除项状态可能需要一段时间。要查看排除项的状态：

   ```
   aws ec2 --region us-east-2 describe-vpc-block-public-access-exclusions --exclusion-ids exclusion-id
   ```

------

### 4.2 连接到实例
<a name="vpc-bpa-scenario-1-connect-scen4-sub2"></a>

完成本节以连接到实例。

------
#### [ AWS 管理控制台 ]

1. 对实例 A 的公有 IPv4 地址运行 Ping 命令。请注意，允许流量。

1. 对实例 B 的公有 IPv4 地址运行 Ping 命令。请注意，流量已被阻止。

1. 如同在方案 1 中所做的那样，使用 EC2 Instance Connect 连接到实例 A，然后运行 ping www.amazon.com 命令。请注意，您可以从实例 A 对互联网上的公共站点运行 ping 命令。允许流量。

1. 如同在方案 1 中所做的那样，使用 EC2 Instance Connect 连接到实例 B，然后从该实例运行 ping www.amazon.com 命令。请注意，您无法从实例 B 对互联网上的公共站点运行 ping 命令。流量已被阻止。

1. 如同在方案 1 中所做的那样，使用 EC2 Instance Connect 连接到实例 C 和实例 D，然后从这些实例运行 ping www.amazon.com 命令。请注意，您可以从实例 C 或实例 D 对互联网上的公共站点运行 ping 命令。允许流量。

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

1. 使用公有 IPv4 地址对实例 A 运行 Ping 命令以检查入站流量：

   ```
   ping 18.225.8.244
   ```

   输出：

   ```
   Pinging 18.225.8.244 with 32 bytes of data:
   
   Reply from 18.225.8.244: bytes=32 time=51ms TTL=110
   Reply from 18.225.8.244: bytes=32 time=61ms TTL=110
   ```

   请注意，运行 ping 命令成功并且流量未被阻止。

1. 使用私有 IPv4 地址连接并检查出站流量：

   ```
   aws ec2-instance-connect ssh --instance-id i-058db34f9a0997895 --region us-east-2 --connection-type eice
   ```

   输出：

   ```
   A newer release of "Amazon Linux" is available.  Version 2023.5.20240916:
   Run "/usr/bin/dnf check-release-update" for full release and version update info
   ,     #_   ~_  ####_        Amazon Linux 2023
   ~~  _#####\  ~~     ###|
   ~~       #/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
   ~~~         /
   ~~._.   _/
   / /
   /m/'
   Last login: Fri Sep 27 17:58:12 2024 from 3.16.146.5
   [ec2-user@ip-10-0-1-85 ~]$ ping www.amazon.com
   PING d3ag4hukkh62yn.cloudfront.net (18.65.233.187) 56(84) bytes of data.
   64 bytes from server-3-160-24-126.cmh68.r.cloudfront.net (18.65.233.187): icmp_seq=1 ttl=249 time=1.03 ms
   64 bytes from server-3-160-24-126.cmh68.r.cloudfront.net (18.65.233.187): icmp_seq=2 ttl=249 time=1.72 ms
   ```

   请注意，运行 ping 命令成功并且流量未被阻止。

1. 使用公有 IPv4 地址对实例 B 运行 Ping 命令以检查入站流量：

   ```
   ping 3.18.106.198
   ```

   输出：

   ```
   Pinging 3.18.106.198 with 32 bytes of data:
   Request timed out.
   ```

   请注意，运行 ping 命令失败并且流量将被阻止。

1. 使用私有 IPv4 地址连接并检查出站流量：

   ```
   aws ec2-instance-connect ssh --instance-id i-08552a0774b5c8f72 --region us-east-2 --connection-type eice
   ```

   输出：

   ```
   A newer release of "Amazon Linux" is available.  Version 2023.5.20240916:
   Run "/usr/bin/dnf check-release-update" for full release and version update info
   ,     #   ~_  ####        Amazon Linux 2023
   ~~  _#####\  ~~     ###|
   ~~       #/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
   ~~~         /
   ~~..   _/
   _/ /
   /m/'
   Last login: Fri Sep 27 18:12:03 2024 from 3.16.146.5
   [ec2-user@ip-10-0-2-98 ~]$ ping www.amazon.com
   PING d3ag4hukkh62yn.cloudfront.net (18.65.233.187) 56(84) bytes of data.
   ```

   请注意，运行 ping 命令失败并且流量将被阻止。

1. 连接到实例 C。由于没有可以运行 ping 命令的公有 IP 地址，因此请使用 EC2 Instance Connect 进行连接，然后从该实例对公有 IP 运行 ping 命令以检查出站流量：

   ```
   aws ec2-instance-connect ssh --instance-id i-04eca55f2a482b2c4 --region us-east-2 --connection-type eice
   ```

   Output

   ```
   A newer release of "Amazon Linux" is available.  Version 2023.5.20240916:
   Run "/usr/bin/dnf check-release-update" for full release and version update info
   ,     #   ~_  ####        Amazon Linux 2023
   ~~  _#####\  ~~     ###|
   ~~       #/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
   ~~~         /
   ~~..   _/
   _/ /
   /m/'                                                                                           
   Last login: Tue Sep 24 15:28:09 2024 from 10.0.2.86                                                     
   [ec2-user@ip-10-0-3-180 ~]$ ping www.amazon.com                                                         
   PING d3ag4hukkh62yn.cloudfront.net (18.65.233.187) 56(84) bytes of data.                                 
   64 bytes from server-3-160-24-126.cmh68.r.cloudfront.net (18.65.233.187): icmp_seq=1 ttl=248 time=1.84 ms
   64 bytes from server-3-160-24-126.cmh68.r.cloudfront.net (18.65.233.187): icmp_seq=2 ttl=248 time=1.40 ms
   ```

   请注意，运行 ping 命令成功并且流量未被阻止。

1. 连接到实例 D。由于没有可以运行 ping 命令的公有 IP 地址，因此请使用 EC2 Instance Connect 进行连接，然后从该实例对公有 IP 运行 ping 命令以检查出站流量：

   ```
   aws ec2-instance-connect ssh --instance-id i-05f9e6a9cfac1dba0 --region us-east-2 --connection-type eice
   ```

   Output

   ```
   A newer release of "Amazon Linux" is available.  Version 2023.5.20240916:
   Run "/usr/bin/dnf check-release-update" for full release and version update info
      ,     #_   ~\_  ####_        Amazon Linux 2023
     ~~  \_#####\  ~~     \###|
     ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
      ~~       V~' '->
       ~~~         /
         ~~._.   _/
            _/ _/
          _/m/'
   Last login: Fri Sep 27 18:00:52 2024 from 3.16.146.5
   [ec2-user@ip-10-0-3-59 ~]$ ping www.amazon.com
   PING www.amazon.com(g2600-141f-4000-059a-0000-0000-0000-3bd4.deploy.static.akamaitechnologies.com (2600:141f:4000:59a::3bd4)) 56 data bytes
   64 bytes from g2600-141f-4000-059a-0000-0000-0000-3bd4.deploy.static.akamaitechnologies.com (2600:141f:4000:59a::3bd4): icmp_seq=1 ttl=48 time=15.9 ms
   64 bytes from g2600-141f-4000-059a-0000-0000-0000-3bd4.deploy.static.akamaitechnologies.com (2600:141f:4000:59a::3bd4): icmp_seq=2 ttl=48 time=15.8 ms
   ```

   请注意，运行 ping 命令成功并且流量未被阻止。

------

### 4.3 可选：使用 Reachability Analyzer 验证连接
<a name="vpc-bpa-scenario-1-connect-scen4-sub3"></a>

使用与方案 2 在 Reachability Analyzer 中创建的相同网络路径，由于已经为公有子网 A 创建了排除项，您现在可以运行新分析并确认路径目前是否可访问。

有关 Reachability Analyzer 区域可用性的信息，请参阅《Reachability Analyzer Guide》**中的 [Considerations](https://docs.aws.amazon.com/vpc/latest/reachability/how-reachability-analyzer-works.html#considerations)。

------
#### [ AWS 管理控制台 ]

1. 从您之前在网络见解控制台中创建的网络路径，单击**重新运行分析**。

1. 等待分析完成。该过程可能需要几分钟。

1. 确认该路径现在**可访问**。

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

1. 使用之前创建的网络路径 ID 开始新分析：

   ```
   aws ec2 --region us-east-2 start-network-insights-analysis --network-insights-path-id nip-id
   ```

1. 检索分析的结果：

   ```
   aws ec2 --region us-east-2 describe-network-insights-analyses --network-insights-analysis-ids nia-id
   ```

1. 确认 `VPC_BLOCK_PUBLIC_ACCESS_ENABLED` 说明代码不再存在。

------

## 场景 5 - 修改排除模式
<a name="vpc-bpa-scenario-5"></a>

在本节中，您将更改排除项的允许流量方向，以了解其如何影响 VPC BPA。

**注意**  
在这一场景下，您需要将排除模式更改为仅出口。请注意在这样操作时，子网 A 上的“仅出口”排除项不允许出站流量，这是有违直觉的，因为您原本希望它允许出站流量。但是，由于账户级 BPA 为仅入口模式，因此仅出口排除项将被忽略，并且子网 A 到互联网网关的路由受到 VPC BPA 的限制，从而阻止了出站流量。要在子网 A 上启用出站流量，就必须将 VPC BPA 切换到双向模式。

VPC BPA 仅入口模式已启用且子网 A 排除项已启用仅出口模式的示意图：

![\[显示 VPC BPA 处于仅入口模式，允许出站流量经过 NAT 网关的 VPC 的示意图。\]](http://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/images/vpc-bpa-5.png)


### 5.1 将排除项允许方向更改为仅出口
<a name="vpc-bpa-scenario-1-connect-scen5-sub1"></a>

完成本节以更改排除项允许方向。

------
#### [ AWS 管理控制台 ]

1. 编辑您在方案 4 中创建的排除项，并将允许方向更改为**仅出口**。

1. 选择**保存更改**。

1. 等待**排除项**状态变为**活动**。VPC BPA 设置生效和状态更新可能需要几分钟时间。您可能需要刷新排除项表才能查看更改。

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

1. 修改排除允许方向：

   ```
   aws ec2 --region us-east-2 modify-vpc-block-public-access-exclusion --exclusion-id exclusion-id --internet-gateway-exclusion-mode allow-egress
   ```

   VPC BPA 设置生效和状态更新可能需要几分钟时间。

1. 更新排除项状态可能需要一段时间。要查看排除项的状态：

   ```
   aws ec2 --region us-east-2 describe-vpc-block-public-access-exclusion
   ```

------

### 5.2 连接到实例
<a name="vpc-bpa-scenario-1-connect-scen5-sub2"></a>

完成本节以连接到实例。

------
#### [ AWS 管理控制台 ]

1. 对实例 A 和实例 B 的公有 IPv4 地址运行 Ping 命令。请注意，流量已被阻止。

1. 如同在方案 1 中所做的那样，使用 EC2 Instance Connect 连接到实例 A 和实例 B，然后运行 ping www.amazon.com 命令。请注意，您无法从实例 A 或实例 B 对互联网上的公共站点运行 ping 命令。流量已被阻止。

1. 如同在方案 1 中所做的那样，使用 EC2 Instance Connect 连接到实例 C 和实例 D，然后从这些实例运行 ping www.amazon.com 命令。请注意，您可以从实例 C 或实例 D 对互联网上的公共站点运行 ping 命令。允许流量。

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

1. 使用公有 IPv4 地址对实例 A 运行 Ping 命令以检查入站流量：

   ```
   ping 18.225.8.244
   ```

   输出：

   ```
   Pinging 18.225.8.244 with 32 bytes of data:
   Request timed out.
   ```

   请注意，运行 ping 命令失败并且流量将被阻止。

1. 使用私有 IPv4 地址连接并检查出站流量：

   ```
   aws ec2-instance-connect ssh --instance-id i-058db34f9a0997895 --region us-east-2 --connection-type eice
   ```

   输出：

   ```
   A newer release of "Amazon Linux" is available.  Version 2023.5.20240916:
   Run "/usr/bin/dnf check-release-update" for full release and version update info
      ,     #_   ~\_  ####_        Amazon Linux 2023
     ~~  \_#####\  ~~     \###|
     ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
      ~~       V~' '->
       ~~~         /
         ~~._.   _/
            _/ _/
          _/m/'
   Last login: Fri Sep 27 18:09:55 2024 from 3.16.146.5
   [ec2-user@ip-10-0-1-85 ~]$ ping www.amazon.com
   PING d3ag4hukkh62yn.cloudfront.net (18.65.233.187) 56(84) bytes of data.
   ```

   请注意，运行 ping 命令失败并且流量将被阻止。

1. 使用公有 IPv4 地址对实例 B 运行 Ping 命令以检查入站流量：

   ```
   ping 3.18.106.198
   ```

   输出：

   ```
   Pinging 3.18.106.198 with 32 bytes of data:
   Request timed out.
   ```

   请注意，运行 ping 命令失败并且流量将被阻止。

1. 使用私有 IPv4 地址连接并检查出站流量：

   ```
   aws ec2-instance-connect ssh --instance-id i-058db34f9a0997895 --region us-east-2 --connection-type eice
   ```

   输出：

   ```
   A newer release of "Amazon Linux" is available.  Version 2023.5.20240916:
   Run "/usr/bin/dnf check-release-update" for full release and version update info
      ,     #_   ~\_  ####_        Amazon Linux 2023
     ~~  \_#####\  ~~     \###|
     ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
      ~~       V~' '->
       ~~~         /
         ~~._.   _/
            _/ _/
          _/m/'
   Last login: Fri Sep 27 18:09:55 2024 from 3.16.146.5
   [ec2-user@ip-10-0-1-85 ~]$ ping www.amazon.com
   PING d3ag4hukkh62yn.cloudfront.net (18.65.233.187) 56(84) bytes of data.
   ```

   请注意，运行 ping 命令失败并且流量将被阻止。

1. 连接到实例 C。由于没有可以运行 ping 命令的公有 IP 地址，因此请使用 EC2 Instance Connect 进行连接，然后从该实例对公有 IP 运行 ping 命令以检查出站流量：

   ```
   aws ec2-instance-connect ssh --instance-id i-04eca55f2a482b2c4 --region us-east-2 --connection-type eice      
   ```

   输出：

   ```
   A newer release of "Amazon Linux" is available.  Version 2023.5.20240916:
   Run "/usr/bin/dnf check-release-update" for full release and version update info
      ,     #_   ~\_  ####_        Amazon Linux 2023
     ~~  \_#####\  ~~     \###|
     ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
      ~~       V~' '->
       ~~~         /
         ~~._.   _/
            _/ _/
          _/m/'
   Last login: Fri Sep 27 18:00:31 2024 from 3.16.146.5
   [ec2-user@ip-10-0-3-180 ~]$ ping www.amazon.com
   PING www.amazon.com(2600:9000:25f3:a600:7:49a5:5fd4:b121 (2600:9000:25f3:a600:7:49a5:5fd4:b121)) 56 data bytes
   64 bytes from 2600:9000:25f3:a600:7:49a5:5fd4:b121 (2600:9000:25f3:a600:7:49a5:5fd4:b121): icmp_seq=1 ttl=58 time=1.51 ms
   64 bytes from 2600:9000:25f3:a600:7:49a5:5fd4:b121 (2600:9000:25f3:a600:7:49a5:5fd4:b121): icmp_seq=2 ttl=58 time=1.49 ms
   ```

   请注意，运行 ping 命令成功并且流量未被阻止。

1. 连接到实例 D。由于没有可以运行 ping 命令的公有 IP 地址，因此请使用 EC2 Instance Connect 进行连接，然后从该实例对公有 IP 运行 ping 命令以检查出站流量：

   ```
   aws ec2-instance-connect ssh --instance-id i-05f9e6a9cfac1dba0 --region us-east-2 --connection-type eice
   ```

   输出：

   ```
   A newer release of "Amazon Linux" is available.  Version 2023.5.20240916:
   Run "/usr/bin/dnf check-release-update" for full release and version update info
      ,     #_   ~\_  ####_        Amazon Linux 2023
     ~~  \_#####\  ~~     \###|
     ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
      ~~       V~' '->
       ~~~         /
         ~~._.   _/
            _/ _/
          _/m/'
   Last login: Fri Sep 27 18:13:55 2024 from 3.16.146.5
   [ec2-user@ip-10-0-3-59 ~]$ ping www.amazon.com
   PING www.amazon.com(2606:2cc0::374 (2606:2cc0::374)) 56 data bytes
   64 bytes from 2606:2cc0::374 (2606:2cc0::374): icmp_seq=1 ttl=58 time=1.21 ms
   64 bytes from 2606:2cc0::374 (2606:2cc0::374): icmp_seq=2 ttl=58 time=1.51 ms
   ```

   请注意，运行 ping 命令成功并且流量未被阻止。

------

## 场景 6 - 修改 VPC BPA 模式
<a name="vpc-bpa-scenario-6"></a>

在本节中，您将更改 VPC BPA 阻止方向，以了解其如何影响流量。在本方案中，双向模式下启用的 VPC BPA 会阻止所有流量，就像在方案 1 中一样。除非排除项可以访问 NAT 网关或仅出口互联网网关，否则流量将被阻止。

VPC BPA 双向模式已启用且子网 A 排除项已启用仅入口模式的示意图：

![\[显示 VPC BPA 处于仅入口模式，允许出站流量经过 NAT 网关的 VPC 的示意图\]](http://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/images/vpc-bpa-6.png)


### 6.1 将 VPC BPA 更改为双向模式
<a name="vpc-bpa-scenario-1-connect-scen6-sub1"></a>

完成本节以更改 VPC BPA 模式。

------
#### [ AWS 管理控制台 ]

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

1. 在左侧导航窗格中，选择**设置**。

1. 选择**编辑公共访问权限设置**。

1. 将阻止方向更改为**双向**，然后选择**保存更改**。

1. 等待**状态**更改为**开启**。VPC BPA 设置生效和状态更新可能需要几分钟时间。

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

1. 修改 VPC BPA 阻止方向：

   ```
   aws ec2 --region us-east-2 modify-vpc-block-public-access-options --internet-gateway-block-mode block-bidirectional
   ```

   VPC BPA 设置生效和状态更新可能需要几分钟时间。

1. 查看 VPC BPA 的状态：

   ```
   aws ec2 --region us-east-2 describe-vpc-block-public-access-options
   ```

------

### 6.2 连接到实例
<a name="vpc-bpa-scenario-1-connect-scen6-sub2"></a>

完成本节以连接到实例。

------
#### [ AWS 管理控制台 ]

1. 对实例 A 和实例 B 的公有 IPv4 地址运行 Ping 命令。请注意，流量已被阻止。

1. 如同在方案 1 中所做的那样，使用 EC2 Instance Connect 连接到实例 A 和实例 B，然后运行 ping www.amazon.com 命令。请注意，您无法从实例 A 或实例 B 对互联网上的公共站点运行 ping 命令。流量已被阻止。

1. 如同在方案 1 中所做的那样，使用 EC2 Instance Connect 连接到实例 C 和实例 D，然后从这些实例运行 ping www.amazon.com 命令。请注意，您无法从实例 C 或实例 D 对互联网上的公共站点运行 ping 命令。流量已被阻止。

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

1. 使用公有 IPv4 地址对实例 A 运行 Ping 命令以检查入站流量：

   ```
   ping 18.225.8.244
   ```

   输出：

   ```
   Pinging 18.225.8.244 with 32 bytes of data:
   Request timed out.
   ```

   请注意，运行 ping 命令失败并且流量将被阻止。

1. 使用私有 IPv4 地址连接并检查出站流量：

   ```
   aws ec2-instance-connect ssh --instance-id i-058db34f9a0997895 --region us-east-2 --connection-type eice
   ```

   输出：

   ```
   A newer release of "Amazon Linux" is available.  Version 2023.5.20240916:
   Run "/usr/bin/dnf check-release-update" for full release and version update info
      ,     #_   ~\_  ####_        Amazon Linux 2023
     ~~  \_#####\  ~~     \###|
     ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
      ~~       V~' '->
       ~~~         /
         ~~._.   _/
            _/ _/
          _/m/'
   Last login: Fri Sep 27 18:17:44 2024 from 3.16.146.5
   [ec2-user@ip-10-0-1-85 ~]$ ping www.amazon.com
   PING d3ag4hukkh62yn.cloudfront.net (18.65.233.187) 56(84) bytes of data.
   ```

   请注意，运行 ping 命令失败并且流量将被阻止。

1. 使用公有 IPv4 地址对实例 A 运行 Ping 命令以检查入站流量：

   ```
   ping 3.18.106.198
   ```

   输出：

   ```
   Pinging 3.18.106.198 with 32 bytes of data:
   Request timed out.
   ```

   请注意，运行 ping 命令失败并且流量将被阻止。

1. 使用私有 IPv4 地址连接并检查出站流量：

   ```
   aws ec2-instance-connect ssh --instance-id i-058db34f9a0997895 --region us-east-2 --connection-type eice
   ```

   输出：

   ```
   A newer release of "Amazon Linux" is available.  Version 2023.5.20240916:
   Run "/usr/bin/dnf check-release-update" for full release and version update info
      ,     #_   ~\_  ####_        Amazon Linux 2023
     ~~  \_#####\  ~~     \###|
     ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
      ~~       V~' '->
       ~~~         /
         ~~._.   _/
            _/ _/
          _/m/'
   Last login: Fri Sep 27 18:09:55 2024 from 3.16.146.5
   [ec2-user@ip-10-0-1-85 ~]$ ping www.amazon.com
   PING d3ag4hukkh62yn.cloudfront.net (18.65.233.187) 56(84) bytes of data.
   ```

   请注意，运行 ping 命令失败并且流量将被阻止。

1. 连接到实例 C。由于没有可以运行 ping 命令的公有 IP 地址，因此请使用 EC2 Instance Connect 进行连接，然后从该实例对公有 IP 运行 ping 命令以检查出站流量：

   ```
   aws ec2-instance-connect ssh --instance-id i-04eca55f2a482b2c4 --region us-east-2 --connection-type eice                                   
   ```

   输出：

   ```
   A newer release of "Amazon Linux" is available.  Version 2023.5.20240916:
   Run "/usr/bin/dnf check-release-update" for full release and version update info
      ,     #_   ~\_  ####_        Amazon Linux 2023
     ~~  \_#####\  ~~     \###|
     ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
      ~~       V~' '->
       ~~~         /
         ~~._.   _/
            _/ _/
          _/m/'
   Last login: Fri Sep 27 18:19:45 2024 from 3.16.146.5
   [ec2-user@ip-10-0-3-180 ~]$ ping www.amazon.com
   PING www.amazon.com(2600:9000:25f3:6200:7:49a5:5fd4:b121 (2600:9000:25f3:6200:7:49a5:5fd4:b121)) 56 data bytes
   ```

   请注意，运行 ping 命令失败并且流量将被阻止。

1. 连接到实例 D。由于没有可以运行 ping 命令的公有 IP 地址，因此请使用 EC2 Instance Connect 进行连接，然后从该实例对公有 IP 运行 ping 命令以检查出站流量：

   ```
   aws ec2-instance-connect ssh --instance-id i-05f9e6a9cfac1dba0 --region us-east-2 --connection-type eice                                  
   ```

   输出：

   ```
   A newer release of "Amazon Linux" is available.  Version 2023.5.20240916:
   Run "/usr/bin/dnf check-release-update" for full release and version update info
      ,     #_   ~\_  ####_        Amazon Linux 2023
     ~~  \_#####\  ~~     \###|
     ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
      ~~       V~' '->
       ~~~         /
         ~~._.   _/
            _/ _/
          _/m/'
   Last login: Fri Sep 27 18:20:58 2024 from 3.16.146.5
   [ec2-user@ip-10-0-3-59 ~]$ ping www.amazon.com
   PING www.amazon.com(2600:9000:25f3:b400:7:49a5:5fd4:b121 (2600:9000:25f3:b400:7:49a5:5fd4:b121)) 56 data bytes
   ```

   请注意，运行 ping 命令失败并且流量将被阻止。

------

## 清理
<a name="vpc-bpa-scenario-cleanup"></a>

在本节中，您将删除为此高级示例创建的所有资源。清理资源很重要，这样可以避免在您账户中创建的资源产生过多的额外费用。

### 删除 CloudFormation 资源
<a name="vpc-bpa-scenario-1-connect-cleanup-sub1"></a>

完成本节以删除您使用 CloudFormation 模板创建的资源。

------
#### [ AWS 管理控制台 ]

1. 打开 [https://console.aws.amazon.com/cloudformation/](https://console.aws.amazon.com/cloudformation/) 控制台，网址为 CloudFormation。

1. 选择 VPC BPA 堆栈。

1. 选择**删除**。

1. 开始删除堆栈后，请查看**事件**选项卡，以查看进度并确保堆栈已删除。您可能必须[强制删除堆栈](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html)才能将其完全删除。

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

1. 删除 CloudFormation 堆栈。您可能必须[强制删除堆栈](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html)才能将其完全删除。

   ```
   aws cloudformation delete-stack --stack-name VPC-BPA-stack --region us-east-2
   ```

1. 查看进度并确保堆栈已删除。

   ```
   aws cloudformation describe-stack-events --stack-name VPC-BPA-stack --region us-east-2
   ```

------

### 使用 CloudTrail 跟踪排除项删除
<a name="vpc-bpa-scenario-1-connect-cleanup-sub2"></a>

完成本节以使用 AWS CloudTrail 跟踪排除项删除。当您删除排除项时，会显示 CloudTrail 条目。

------
#### [ AWS 管理控制台 ]

通过在位于 [https://console.aws.amazon.com/cloudtrailv2/](https://console.aws.amazon.com/cloudtrailv2/) 的 AWS CloudTrail 控制台中查找**资源类型** > **AWS::EC2::VPCBlockPublicAccessExclusion**，您可以在 CloudTrail 事件历史记录中查看任何已删除的排除项。

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

您可以使用 lookup-events 命令查看与删除排除项有关的事件：

```
aws cloudtrail lookup-events --lookup-attributes AttributeKey=ResourceType,AttributeValue=AWS::EC2::VPCBlockPublicAccessExclusion
```

------

高级示例已完成。

# VPC 的安全最佳实践
<a name="vpc-security-best-practices"></a>

 以下最佳实践是一般指导原则，并不代表完整安全解决方案。这些最佳实践可能不适合环境或不满足环境要求，请将其视为有用的考虑因素而不是惯例。
+ 向 VPC 添加子网以托管应用程序时，请在多个可用区中创建子网。可用区是 AWS 区域中一个或多个具有冗余电源、网络和连接的离散数据中心。使用可用区可为生产级应用程序提供高可用性、容错能力和可扩展性。
+ 使用安全组来控制流向子网中的 EC2 实例的流量。有关更多信息，请参阅 [安全组](vpc-security-groups.md)。
+ 使用网络 ACL 在子网级别控制入站和出站流量。有关更多信息，请参阅 [使用网络访问控制列表控制子网流量](vpc-network-acls.md)。
+ 使用 AWS Identity and Access Management（IAM）身份联合验证、用户和角色，管理对 VPC 中 AWS 资源的访问。有关更多信息，请参阅 [适用于 Amazon VPC 的 Identity and Access Management](security-iam.md)。
+ 使用 VPC 流日志监控传入和传出 VPC、子网或网络接口的 IP 流量。有关更多信息，请参阅 [VPC 流日志](flow-logs.md)。
+ 使用网络访问分析器识别对我们 VPC 中资源的计划外网络访问。有关更多信息，请参阅 [网络访问分析器用户指南](https://docs.aws.amazon.com/vpc/latest/network-access-analyzer/)。
+ 使用 AWS Network Firewall 通过筛选入站和出站流量来监控和保护您的 VPC。有关更多信息，请参阅 [AWS Network Firewall 指南](https://docs.aws.amazon.com/network-firewall/latest/developerguide/)。
+ 使用 Amazon GuardDuty 检测您的账户、容器、工作负载以及 AWS 环境中的数据面临的潜在威胁。基础威胁检测包括监控与 Amazon EC2 实例关联的 VPC 流日志。有关更多信息，请参阅《*Amazon GuardDuty 用户指南*》中的 [VPC 流日志](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_data-sources.html#guardduty_vpc)。

有关 VPC 安全性的常见问题的答案，请参阅 [Amazon VPC 常见问题解答](https://aws.amazon.com/vpc/faqs/)中的*安全性和筛选*。