把握行业变革关键节点,12 月 19 日 - 20 日,AICon北京站即将重磅启幕! 了解详情
写点什么

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

评论

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

一步迈入数智化,华为坤灵助力中小企业轻松飞跃

脑极体

AI 数智化 分销

从“群聊”到“一单到底”,天润融通工单系统助力品牌服务升级

天润融通

2024网安周 | 百度安全深度参与,探索人工智能与数字安全的融合发展之路

百度安全

百度一站式数据管理解决方案荣获2024北京互联网大会行业数据安全优秀解决方案

百度安全

瓜子二手车 x TiDB 丨平均耗时降低 30%,TiDB HTAP 在瓜子二手车财务中台结账核心系统的深度实践

PingCAP

TiDB

知乎 PB 级别 TiDB 数据库在线迁移实践

PingCAP

TiDB

打造全栈云自主可控体系,天翼云构筑数字安全屏障!

天翼云开发者社区

云计算 网络安全 云服务 天翼云

Groovy 是一门 DSL 语言

FunTester

一个示例了解什么是 API 集成

幂简集成

API API集成

百度副总裁陈洋:大模型让软件开发更高效、更安全

百度安全

AM Green收购Chempolis下一代2G生物燃料技术;投资10亿美元生产SAF

财见

精通Java并发锁机制:24种锁技巧+业务锁匹配方案(第一部分)

肖哥弹架构

Java 高并发

AI大模型行业应用:企业如何走出一条智能化蜕变之路?

平平无奇爱好科技

解锁电商数据分析新纪元:淘宝商品详情api接口的多线程调用策略

代码忍者

API 接口 pinduoduo API

“你好BOE”即将重磅亮相上海国际光影节 这场“艺术x科技”的顶级光影盛宴不容错过!

科技汇

深入剖析酷睿i7-14700KF与锐龙7 7800X3D:谁才是优秀多面手处理器

E科讯

文心快码Baidu Comate荣获2024北京信息通信行业网络安全产品优秀应用案例

百度安全

【第3期】INFINI Easysearch 免费认证培训开放报名

极限实验室

培训与认证 easysearch

云栖实录 | DataWorks:新一代智能湖仓一体数据开发与治理平台

阿里云大数据AI技术

大数据 阿里云 云栖大会 Dataworks

对 AI 产品定价模式的新思考:基于人数 or 工作量?

Baihai IDP

程序员 AI LLMs Baihai IDP 企业 9 月 PK 榜

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