写点什么

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:361052

评论

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

Java开发面试基础,java架构师全套百度网盘,Java基础面试重点

Java 程序员 后端

Java开发最佳实践手册全网独一份,vue视频教程百度网盘,正式加入字节跳动

Java 程序员 后端

Java开发核心知识笔记共2100页,如何保证Redis与数据库的双写一致性

Java 程序员 后端

Java开发自学技巧!极客学院百度云资源,2021最新Java笔试题目

Java 程序员 后端

Java开发自学教程!尚学堂java,我被面试官绝地反杀了

Java 程序员 后端

Java开发从零开始,java基础入门传智播客网页版,Java后端路线图

Java 程序员 后端

Java开发前景怎么样,java全套教程百度云,linux基础入门教程

Java 程序员 后端

Java开发工程师笔试题目,图灵学院vip百度云盘,阿里P8大牛手把手教你

Java 程序员 后端

Java开发经验的有效总结,以商品超卖为例讲解Redis分布式锁

Java 程序员 后端

Java开发实战讲解,牛客网面试经验,Java编程入门教材

Java 程序员 后端

模块一作业

忘记喝水的猫

架构训练营

Java开发还会吃香吗,Java微服务架构从入门到精通

Java 程序员 后端

Java开发从零开始,牛客网java选择题库,程序员Javaweb源码

Java 程序员 后端

Java开发教程,极客时间架构师训练营,面试流程4轮技术面+1轮HR

Java 程序员 后端

Java开发者跳槽指,牛客网算法初级班,春招我借这份PDF的复习思路

Java 程序员 后端

Java开发还不会这些,极客学院和黑马,进阶学习工作最全指南

Java 程序员 后端

Java开发究竟该如何学习,年末阿里百度等大厂技术面试题汇总,程序员翻身之路

Java 程序员 后端

Java开发面试基础,牛客网客户端,【面试总结】

Java 程序员 后端

Java开发面经分享,springboot项目案例百度云,实战篇

Java 程序员 后端

Java开发入门与实战!极客学院和黑马程序员,Java高级工程师系列学习路线介绍

Java 程序员 后端

Java开发岗还不会这些问题,想拿高工资

Java 程序员 后端

Java开发者应该会哪些东西才不会被公司淘汰,美团Java面试

Java 程序员 后端

Java开发者跳槽面试,尚硅谷java课程,netty框架面试题

Java 程序员 后端

Java开发经典实战!自学java教程百度云盘,阿里程序员的Java之路

Java 程序员 后端

Java开发经验谈,linux视频教程百度网盘,逆袭面经分享

Java 程序员 后端

云栖收官:想跟远道而来的朋友们说

阿里巴巴云原生

云原生 云栖大会 收官 致谢

模块一作业

心怀架构

Java开发你需要了解的那些事,Java线程池基础入门和简单实践以及使用技巧

Java 程序员 后端

Java开发实战讲解,牛客网面试经验,Java高级知识图谱

Java 程序员 后端

第1周作业

波波

「架构实战营」

Java开发视频教程,linux使用教程,BIO和NIO有啥区别

Java 程序员 后端

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