亚马逊AWS官方博客

新 – VPC Reachability Analyzer

通过 Amazon Virtual Private Cloud (VPC),您可以在 AWS 云上启动逻辑上隔离的客户特定虚拟网络。随着客户扩大其在云中的足迹,以及部署日益复杂的网络架构,解决配置错误导致的网络连接问题可能需要更长的时间。今天,我们很高兴地宣布推出 VPC Reachability Analyzer,这是一种网络诊断工具,用于排查 VPC 中两个终端节点之间或多个 VPC 内的可访问性问题。

确保您的网络配置符合预期
您可以完全控制虚拟网络环境,包括选择自己的 IP 地址范围,创建子网,以及配置路由表和网络网关。您还可以轻松自定义 VPC 的网络配置。例如,您可以为可以使用互联网网关访问互联网的 Web 服务器创建公有子网。对安全敏感的后端系统(例如数据库和应用程序服务器)可以放置在没有互联网访问权限的私有子网上。您可以使用多个安全层,例如安全组网络访问控制列表 (ACL),通过协议、IP 地址和端口号来控制对每个子网实体的访问。

您还可以通过 VPC 对等连接AWS Transit Gateway 合并多个 VPC,进而在区域范围或全球实现能够以非公开的方式路由流量的网络连接。您还可以使用 VPN 网关将站点与 AWS 账户连接起来,以实现安全通信。许多驻留在 VPC 之外的 AWS 服务(例如 AWS LambdaAmazon S3)都支持 VPC 终端节点AWS PrivateLink 作为 VPC 内的实体,并能够以非公开的方式与这些服务进行通信。

当您拥有如此丰富的控件和功能集时,意外配置可能导致连接问题并不罕见。现在,您可以使用 VPC Reachability Analyzer 来分析两个终端节点之间的可访问性,而无需发送任何数据包。VPC Reachability Analyzer 会查看 VPC 中所有资源的配置,并使用自动推理来确定哪些网络流量是可行的。它可以分析网络中的所有可能路径,而无需在线路上发送任何流量。要了解有关这些算法如何工作的更多信息,请参阅 re: Invent 演讲或阅读本文

VPC Reachability Analyzer 的工作原理
下面我们来看它的工作原理。VPC Reachability Analyzer 非常简单易用,您可以使用当前的 VPC 对其进行测试。如果您需要独立的 VPC 进行测试,可以运行本文底部的 AWS CloudFormation YAML 模板。该模板创建了一个 VPC,其中包含 1 个子网、2 个安全组和 3 个实例 A、B 和 C。实例 A 和 B 可以相互通信,但这些实例无法与实例 C 通信,因为附加到实例 C 的安全组不允许任何传入流量。

您可以在 VPC 管理控制台的左侧导航中看到 Reachability Analyzer

单击 Reachability Analyzer,然后单击 Create and analyze path(创建和分析路径)按钮,将看到新窗口,您可以在其中指定源和目标之间的路径,然后开始分析。

您可以为通信的源和目标指定以下任何终端节点类型:VPN 网关、实例、网络接口、互联网网关、VPC 终端节点、VPC 对等连接和 Transit Gateway。例如,我们为源设置实例 A,为目标设置实例 B。您可以选择通过 TCP 或 UDP 协议检查连接。或者,您还可以指定端口号、源或目标 IP 地址。

配置测试路径

最后,单击 Create and analyze path(创建和分析路径)按钮开始分析。根据 VPC 的规模和复杂程度,分析可能需要几分钟时间,但通常需要几秒钟的时间。

现在,您可以看到分析结果为 Reachable(可访问)。如果单击分析 ID nip-xxxxxxxxxxxxxxxxx 的 URL 链接,您可以看到逐跳路由。

从实例 A 到实例 C 的通信无法访问,因为附加到实例 C 的安全组不允许任何传入流量。

如果您单击 nip-xxxxxxxxxxxxxxxxx 以获取更多详细信息,可以查看 Explanations(说明)以了解详细信息。

结果详细信息

在这里我们看到了阻止通信的安全组。单击右上角列出的安全组时,可以直接进入安全组编辑窗口来更改安全组规则。在这种情况下,添加适当范围的入口规则将允许实例进行通信。

现已推出
此功能适用于除中国(北京)中国(宁夏)区域之外的所有 AWS 商业区域。我们的技术文档中提供了更多信息,请记住,要使用此功能,您的 IAM 权限需要按此处的说明进行设置。

– Kame

用于测试的 CloudFormation YAML 模板

---
Description: An AWS VPC configuration with 1 subnet, 2 security groups and 3 instances.When testing ReachabilityAnalyzer, this provides both a path found and path not found scenario.
AWSTemplateFormatVersion: 2010-09-09

Mappings:
  RegionMap:
    us-east-1:
      execution: ami-0915e09cc7ceee3ab
      ecs: ami-08087103f9850bddd

Resources:
  # VPC
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 172.0.0.0/16
      EnableDnsSupport: true
      EnableDnsHostnames: true
      InstanceTenancy: default

  # Subnets
  Subnet1:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: 172.0.0.0/20
      MapPublicIpOnLaunch: false

  # SGs
  SecurityGroup1:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Allow all ingress and egress traffic
      VpcId: !Ref VPC
      SecurityGroupIngress:
        - CidrIp: 0.0.0.0/0
          IpProtocol: "-1" # -1 specifies all protocols

  SecurityGroup2:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Allow all egress traffic
      VpcId: !Ref VPC

  # Instances
  # Instance A and B should have a path between them since they are both in SecurityGroup 1
  InstanceA:
    Type: AWS::EC2::Instance
    Properties:
      ImageId:
        Fn::FindInMap:
          - RegionMap
          - Ref: AWS::Region
          - execution
      InstanceType: 't3.nano'
      SubnetId:
        Ref: Subnet1
      SecurityGroupIds:
        - Ref: SecurityGroup1

  # Instance A and B should have a path between them since they are both in SecurityGroup 1
  InstanceB:
    Type: AWS::EC2::Instance
    Properties:
      ImageId:
        Fn::FindInMap:
          - RegionMap
          - Ref: AWS::Region
          - execution
      InstanceType: 't3.nano'
      SubnetId:
        Ref: Subnet1
      SecurityGroupIds:
        - Ref: SecurityGroup1

  # This instance should not be reachable from Instance A or B since it is in SecurityGroup 2
  InstanceC:
    Type: AWS::EC2::Instance
    Properties:
      ImageId:
        Fn::FindInMap:
          - RegionMap
          - Ref: AWS::Region
          - execution
      InstanceType: 't3.nano'
      SubnetId:
        Ref: Subnet1
      SecurityGroupIds:
        - Ref: SecurityGroup2