2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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

评论

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

精通Vue.js系列实例教程 │ Vue组件的数据监听

TiAmo

Vue Web Worker 监听 watche

ChatGPT火了,客服产业怎么办?

创智荟

知识计算 客服 ChatGPT 数字员工

flutter系列之:做一个修改组件属性的动画

程序那些事

flutter 大前端 程序那些事

【自己更换模型】如何用 Serverless 一键部署 Stable Diffusion?

阿里巴巴云原生

阿里云 Serverless 云原生 动态模型

最高等级!Apache RocketMQ 入选可信开源项目星云象限领导型象限

阿里巴巴云原生

阿里云 云原生 Apache RocketMQ

轻量级思维导图工具:iMap Builder 免激活版

真大的脸盆

Mac 思维导图 Mac 软件

直播预告 | 博睿学院:全面升级自适应AIOps

博睿数据

可观测性 AIOPS 智能运维 博睿数据 博睿学院

IaaS预留实例在线交易策略详解

天翼云开发者社区

云计算 大数据 云服务

解决centos7.0安装mysql后出现access defind for user@'localhost'的错误

北桥苏

MySQL

出海无从下手?看社交泛娱乐出海「第一趁手工具」怎么说

融云 RongCloud

互联网 社交 融云 泛娱乐 出海

解析内存中的高性能图结构

NebulaGraph

数据结构 图数据库

开源家装小程序

源字节1号

开源 软件开发 前端开发 后端开发 小程序发开

专访顶象CEO: 新一代AI如何增强验证码安全性

极客天地

分享:两年两度升级数据库,我们经历了什么

OceanBase 数据库

数据库 oceanbase

应用在虚机和容器场景下如何优雅上下线

华为云开源

微服务 云原生

长三角生物医药产业加速跑,飞桨螺旋桨为创新药企、医药技术伙伴装上AI大模型引擎

飞桨PaddlePaddle

飞桨 生物医药

ScaleFlux压缩存储产品通过 PolarDB-PG社区版和PolarDB-X 开源版认证

ScaleFlux

开源数据库 数据压缩 数据库技术 企业数据

PostgreSQL-HA 高可用集群在 Rainbond 上的部署方案

北京好雨科技有限公司

postgresql Kubernetes 云原生 rainbond 企业号 5 月 PK 榜

MobPush 创建应用

MobTech袤博科技

DPDK与ScaleFlux CSD 3000:金融数据处理的创新组合

ScaleFlux

DPDK 存储技术 数据压缩 金融开源

百度王海峰团队荣获吴文俊人工智能科技进步奖特等奖,成果已应用于文心一言

飞桨PaddlePaddle

您的数据可以压缩吗?

ScaleFlux

存储成本 存储技术 数据压缩

极狐(GitLab)重磅发布新产品「极狐星」,让研发效能看得清,算得准,成就企业精英效能管理

极狐GitLab

DevOps 研发管理 研发效能 极狐GitLab 研发效能度量

openEuler 社区 2023 年 4 月运作报告

openEuler

Linux 开源 操作系统 openEuler 资讯

日常节省 30%计算资源:阿里云实时计算 Flink 自动调优实践

Apache Flink

大数据 flink 实时计算

可计算存储技术全面升级CSD 3000存储体验

ScaleFlux

人工智能 机器学习 计算与存储 数据压缩

【修复问题】HBuilder打包编译报错汇集(持续更新)

红泥

小程序:技术标准与生态的演变

没有用户名丶

【web 开发】快来给你的类定个标准 -PHP 的接口技术(64)

迷彩

php 接口 interface 三周年连更 类扩展

CCIG 2023 百度飞桨分论坛:大模型时代的图象图形技术变革与实践

飞桨PaddlePaddle

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