写点什么

VPC 入口路由 – 简化第三方设备的集成

  • 2019-12-11
  • 本文字数:3978 字

    阅读完需:约 13 分钟

VPC 入口路由 – 简化第三方设备的集成

当我传输 Architecting on AWS 类时,客户经常会问我如何配置 Amazon Virtual Private Cloud,以在云中强制实施与本地策略相同的网络安全策略。例如,扫描入侵检测系统 (IDS) 设备中的所有进站流量或在云中使用与本地防火墙相同的防火墙。截止今天,我可以提供的唯一答案是将所有流量从其 VPC 路由回本地设备或防火墙,以便在将其路由回云之前使用其常用联网齿轮检测流量。显然,这并非理想配置,它增加了延迟和复杂性。


今天,我们公布了新的 VPC 联网路由基元,以允许路由往返于互联网网关 (IGW) 或虚拟私有网关 (VGW) 与特定 Amazon Elastic Compute Cloud (EC2) 实例的弹性网络接口之间的所有传入和传出流量。这意味着,您现在可以将您的 Virtual Private Cloud 配置为在流量达到业务工作负载之前将所有流量发送至 EC2 实例。通常来说,该实例运行网络安全工具来检测或阻止可疑网络流量(例如 IDS/IPS防火墙),或者在将流量中继到其他 EC2 实例之前执行任何其他网络流量检测。


它的工作原理是什么?


为了了解它的工作原理,我编写了此 CDK 脚本,以创建一个具有两个公共子网的 VPC:一个子网用于设备,另一个子网用于业务应用程序。该脚本将启动两个具有公共 IP 地址的 EC2 实例,每个子网中一个。该脚本将创建以下架构:



这是常规 VPC,子网具有纸互联网网关的路由表且流量按预期流入和流出。应用程序实例托管静态网站,可通过任何浏览器对其进行访问。您可以从 EC2 控制台检索应用程序公共 DNS 名称(为方便起见,我也将 CLI 版本包含在了 CDK 脚本的注释中)。


Bash


AWS_REGION=us-west-2APPLICATION_IP=$(aws ec2 describe-instances                           \                     --region $AWS_REGION                             \                     --query "Reservations[].Instances[] | [?Tags[?Key=='Name' && Value=='application']].NetworkInterfaces[].Association.PublicDnsName"  \                     --output text)
curl -I $APPLICATION_IP
复制代码



配置路由


要配置路由,您需要了解 VPC ID、连接至设备实例的 ENI ID 以及互联网网关 ID。假定您已使用我提供的 CDK 创建了基础设施,以下是我用于查找这三个 ID 的注释(务必调整您使用的 AWS 区域):


Bash


AWS_REGION=us-west-2VPC_ID=$(aws cloudformation describe-stacks                              \             --region $AWS_REGION                                        \             --stack-name VpcIngressRoutingStack                         \             --query "Stacks[].Outputs[?OutputKey=='VPCID'].OutputValue" \             --output text)
ENI_ID=$(aws ec2 describe-instances \ --region $AWS_REGION \ --query "Reservations[].Instances[] | [?Tags[?Key=='Name' && Value=='appliance']].NetworkInterfaces[].NetworkInterfaceId" \ --output text)
IGW_ID=$(aws ec2 describe-internet-gateways \ --region $AWS_REGION \ --query "InternetGateways[] | [?Attachments[?VpcId=='${VPC_ID}']].InternetGatewayId" \ --output text)
复制代码


为了通过我的设备路由所有传入流量,我创建了一个互联网网关路由表,并随附了一个规则,以将所有流量导向至 EC2 实例弹性网络接口 (ENI):


Bash


# 创建新的互联网网关路由表ROUTE_TABLE_ID=$(aws ec2 create-route-table                      \                     --region $AWS_REGION                        \                     --vpc-id $VPC_ID                            \                     --query "RouteTable.RouteTableId"           \                     --output text)
# 为指向设备 ENI 的 10.0.1.0/24 创建路由aws ec2 create-route \ --region $AWS_REGION \ --route-table-id $ROUTE_TABLE_ID \ --destination-cidr-block 10.0.1.0/24 \ --network-interface-id $ENI_ID
# 将路由表关联至互联网网关aws ec2 associate-route-table \ --region $AWS_REGION \ --route-table-id $ROUTE_TABLE_ID \ --gateway-id $IGW_ID
复制代码


或者,我可以使用新的边缘关联选项卡下面的 VPC 控制台。



为了通过设备路由所有应用程序传出流量,我替换了应用程序子网的默认路由,以指向设备的 ENI:


Bash


SUBNET_ID=$(aws ec2 describe-instances                                  \                --region $AWS_REGION                                    \                --query "Reservations[].Instances[] | [?Tags[?Key=='Name' && Value=='application']].NetworkInterfaces[].SubnetId"    \                --output text)ROUTING_TABLE=$(aws ec2 describe-route-tables                           \                    --region $AWS_REGION                                \                    --query "RouteTables[?VpcId=='${VPC_ID}'] | [?Associations[?SubnetId=='${SUBNET_ID}']].RouteTableId" \                    --output text)
# 删除现有的默认路由(指向互联网网关的路由)aws ec2 delete-route \ --region $AWS_REGION \ --route-table-id $ROUTING_TABLE \ --destination-cidr-block 0.0.0.0/0
# 创建指向设备 ENI 的默认路由aws ec2 create-route \ --region $AWS_REGION \ --route-table-id $ROUTING_TABLE \ --destination-cidr-block 0.0.0.0/0 \ --network-interface-id $ENI_ID
aws ec2 associate-route-table \ --region $AWS_REGION \ --route-table-id $ROUTING_TABLE \ --subnet-id $SUBNET_ID
复制代码


或者,我可以使用 VPC 控制台。在正确的路由表内,选择路由选项卡并单击编辑路由,替换默认路由(指向 0.0.0.0/0 的路由),以指向设备的 ENI。



现在,我已完成路由配置。新的路由类似于:



配置设备实例


最后,我将设备实例配置为转发其接收的所有流量。您的软件设备通常会为您完成此操作,因此,当您使用 AWS Marketplace 设备时无需其他额外步骤。使用纯 Linux 实例时,需要执行两个额外的步骤:


1.连接到 EC2 设备实例并配置内核中的 IP 流量转发:


Bash


APPLIANCE_ID=$(aws ec2 describe-instances  \                   --region $AWS_REGION    \                   --query "Reservations[].Instances[] | [?Tags[?Key=='Name' && Value=='appliance']].InstanceId" \                   --output text)aws ssm start-session --region $AWS_REGION --target $APPLIANCE_ID  
#### once connected (you see the 'sh-4.2$' prompt), type:##
sudo sysctl -w net.ipv4.ip_forward=1sudo sysctl -w net.ipv6.conf.all.forwarding=1exit
复制代码


2.将 EC2 实例配置为接受除本身之外的其他目的地的流量(称为目的地/来源检查):


Bash


aws ec2 modify-instance-attribute --region $AWS_REGION \                         --no-source-dest-check        \                         --instance-id $APPLIANCE_ID
复制代码


现在,设备已做好将流量转发到其他 EC2 实例的准备。您可以通过将浏览器(或使用 cURL)指向应用程序实例来对此进行测试。


Bash


APPLICATION_IP=$(aws ec2 describe-instances --region $AWS_REGION                          \                     --query "Reservations[].Instances[] | [?Tags[?Key=='Name' && Value=='application']].NetworkInterfaces[].Association.PublicDnsName"  \                     --output text)
curl -I $APPLICATION_IP
复制代码


为了验证流量是否真正流经设备,您可以再次在实例上启用来源/目的地检查(结合使用 --source-dest-check 参数及上面的 modify-instance-attributeCLI 命令)。当来源/目的地检查启用时,流量将受阻。


清理


如果您使用我在本文中提供的 CDK 脚本,请务必在完成后运行 cdk destroy。这可确保不会为我在此演示中使用的两个 EC2 实例向您收费。由于我在 AWS CloudFormation 背后修改了路由表,因此,我需要手动删除路由表、子网和 VPC。最简单的方法是导航至 VPC 控制台,选择 VPC 并单击操作 => 删除 VPC。控制台将按照正确的顺序删除所有组件。在控制台能够删除 VPC 之前,您可能需要在 cdk destroy 结束后等待 5-10 分钟。


**来自我们的合作伙伴


**在这些新路由功能的测试版测试过程中,我们授予了对 AWS 合作伙伴集合的早期访问权限。他们为我们提供了大量有帮助的反馈。以下是他们为分享其经验而撰写的部分博客文章(我将在其发布时更新本文及链接):


  • 128 Technology

  • Aviatrix

  • Checkpoint

  • Cisco

  • Citrix

  • FireEye

  • Fortinet

  • HashiCorp

  • IBM Security

  • Lastline

  • Netscout

  • Palo Alto Networks

  • ShieldX Networks

  • Sophos

  • Trend Micro

  • Valtix

  • Vectra AI

  • Versa Networks


可用性


使用 Virtual Private Cloud 入口路由无需额外费用。它已在所有区域推出(包括 AWS GovCloud(美国西部)),您可以立即开始使用。


您可以在更新的 VPC 文档中了解与网关路由表相关的更多信息。


您会将这一新的 VPC 路由功能用于什么样的设备呢?


本文转载自 AWS 技术博客。


原文链接:https://amazonaws-china.com/cn/blogs/china/new-vpc-ingress-routing-simplifying-integration-of-third-party-appliances/


2019-12-11 15:36850

评论

发布
暂无评论
发现更多内容

云原生助力数字原生企业业务快速迭代|阿里云峰会精彩回顾

阿里巴巴云原生

阿里云 云原生

记一次 MySQL 主从同步异常的排查记录,百转千回

做梦都在改BUG

Java MySQL 主从同步

对话大咖 | 人工智能+视频编解码能带来新的变革吗

小红书技术REDtech

人工智能 深度学习 活动回顾

如何解决spring的循环依赖问题?

做梦都在改BUG

Java spring 循环依赖

深入理解 Redis 新特性:Stream

Java你猿哥

redis SSM框架 Redis 核心技术与实战 redis 底层原理

ChatGPT的狂欢背后:短板犹在,启发甚多,2023有这些事可以做……

小红书技术REDtech

人工智能 ChatGPT 活动回顾

面试官:如何动态的给一个类增加功能?

做梦都在改BUG

Spring Cloud微服务网关Zuul过滤链实现的源码解读

做梦都在改BUG

阿里耗时1年:用283张图+24问完美诠释“Java并发编程”所有难点

做梦都在改BUG

Java 并发编程

人工智能会取代人类成为地球的主宰么?| 社区征文

毛小毛

人工智能 ChatGPT 三周年征文

MySQL8.0 优化器介绍(二)

GreatSQL

MySQL greatsql greatsql社区

直播预告 | TDengine & Apache SeaTunnel 联合应用最佳实践

TDengine

Apache tdengine 时序数据库

如何将一个链表分组并对每组进行反转?

Java你猿哥

Java 链表 架构师 SSM框架 链表结构

SpringBoot设计了哪些可拓展的机制?

做梦都在改BUG

数说热点|春暖花开日,露营正当时——当精致露营遇上新能源车

MobTech袤博科技

零拷贝浅析

数新网络官方账号

大数据 零拷贝

镭速Raysync v6.6.8.0版本发布

镭速

原来XXL-JOB可以这么造

六月的雨在InfoQ

Serverless XXL-JOB SAE 三周年连更

架构师才需要学习的知识:亿级流量调优方法+实战

做梦都在改BUG

Java 性能优化 性能调优

详解,LED显示屏灰度等级

Dylan

灰度 LED显示屏 色彩

Github上标星68.5K,阿里巴巴《MySQL成长手册》火了

做梦都在改BUG

Java MySQL 数据库

从零开始学习 GraphQL:入门指南和教程

Apifox

程序员 gRPC 后端 协议 graphql

Seata:连接数据与应用

阿里巴巴云原生

阿里云 云原生 seata

面试了个阿里P7大佬,他让我见识到什么才是“精通高并发与调优”

做梦都在改BUG

Java 高并发 性能调优

从此告别写SQL!DataLeap帮你零门槛完成“数据探查”

字节跳动数据平台

MySQL 数据分析 数据治理 数据探查 企业号 4 月 PK 榜

阿里P8:Java性能调优(独孤版),带你打造淘宝秒杀架构

做梦都在改BUG

Java 架构 性能调优

eBPF动手实践系列一:解构内核源码eBPF样例编译过程

阿里云大数据AI技术

运维 代码 企业号 4 月 PK 榜

OpenHarmony3.2release抢先体验

坚果

OpenHarmony 三周年连更

C语言_sprintf固定字符串输出位数

DS小龙哥

三周年连更

带你用三种不同的工具体验AI作诗

华为云开发者联盟

云计算 华为云 华为云开发者联盟 企业号 4 月 PK 榜

高性能存储SIG月度动态:ANCK ublk完成POC测试,EROFS优化xattr元数据开销

OpenAnolis小助手

操作系统 内核 高性能存储 龙蜥社区 sig

VPC 入口路由 – 简化第三方设备的集成_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章