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

评论

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

小令观点 | 是什么让马斯克也受骗了?

令牌云数字身份

数字身份

小令观点 | 需要留存用户的身份证照片?想清楚这三点了再做……

令牌云数字身份

身份认证 身份安全 敏感信息加密

小令观点 | 需要留存用户的身份证照片?想清楚这三点了再做……

令牌云数字身份

数字身份 身份认证 加密技术 可信

开源大数据热力报告:StarRocks摘得数据查询与分析方向增速第一

StarRocks

数据库

隐语 PSI benchmark 白皮书

隐语SecretFlow

密码学 隐私计算 PSI 安全多方计算 隐语

为了进大厂!吃透了各大厂最新 3000+Java 面试题啃完面试肯定妥了

钟奕礼

Java 程序员 java面试 java编程

直播预告lApache Hudi 中文社区技术交流会第六弹

StarRocks

数据库

深入掌握 Fiori Elements 工作原理的前提条件:理解 Smart Field

汪子熙

前端开发 web开发 Fiori SAP UI5 11月月更

Java 八股文能不背吗?Java 面试都只是背答案吗?

钟奕礼

Java 程序员 java面试 java 编程

异常检测算法分类总结(含常用开源数据集)

云智慧AIOps社区

人工智能 机器学习 深度学习 异常检测 算法模型

从零开始学习Java系列之你为什么要学Java?

千锋IT教育

阿里云易立:以增效促降本,容器服务全面进入智能化时代

阿里巴巴云原生

阿里云 云原生 容器服务

AI赋能音乐创作,人人都是音视频创作者

HarmonyOS SDK

HMS Core

最佳实践|用腾讯云AI文字识别对混贴票据识别

牵着蜗牛去散步

人工智能 腾讯云 腾讯 文字识别 OCR

【昇思生态城市行】南京站圆满举办, 昇腾携手伙伴见证多项重磅发布!

极客天地

SCADA系统架构、类型和应用

2D3D前端可视化开发

物联网 组态软件 web组态 组态编辑器 SCADA

业务畅行海外,如何做到安全第一

火线安全

上班干,下班学!这份 Java 面试八股文涵盖 20 多个技术点

钟奕礼

Java 程序员 java面试 java编程

MySQL的存储引擎及常用数据类型详解

C++后台开发

MySQL 数据库 中间件 后端开发 C++开发

ElasticSearch 集群迁移最佳实践

冰心的小屋

elasticsearch

百度面试被算法血虐,闭关肝完445页算法神仙笔记成功入职字节

钟奕礼

Java 程序员 java面试 java编程

携手!Kyligence 支持 Amazon EMR Serverless,赋能云上企业降本增效

Kyligence

数据分析 OLAP

自动驾驶的「数据引擎」,该如何“降本”、“增效”和“精准化”?

澳鹏Appen

人工智能 自动驾驶 无人驾驶 智能驾驶 数据标注

Linux系统保存文件命令的详细介绍

源字节1号

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

中心化危机下,NFT 去中心化协议能否破局?

NFT Research

区块链 去中心化 NFT

刷了三个月 leetcode 算法,顺利拿下百度、阿里等大厂的 offer

钟奕礼

Java 程序员 java面试 java编程

技术分享| 快对讲视频调度功能说明

anyRTC开发者

监控 快对讲 语音对讲 视频对讲 视频回传

想要做好代码质量,如何破局?

京东科技开发者

代码质量 系统 代码优化

云服务器买谁家的好?为什么?理由是什么?

行云管家

云计算 服务器 云服务器

云原生加速器企业维格表创始人陈霈霖:提供人人可用的数字化转型全新方案,真正驱动组织创新

阿里巴巴云原生

阿里云 云原生 维格表

江西省四家等保测评机构名单详解

行云管家

江西 等保测评 等保测评机构

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