介绍
在这篇文章中,我将引导您完成在 AWS 上部署入侵检测系统的过程
注意:此项目假设您已经拥有一个活跃的 AWS 账户,并为代码编辑器配置了您的账户凭证(访问密钥),并且此项目将在您的控制台中产生一些费用
项目概况
目标
该项目的目标如下:
- 使用 Docker 将应用程序容器化
- 将容器镜像推送到 ECR
- 创建一个 VPC、两个私有子网和两个公有子网
- 为私有子网创建 VPC 终端节点以访问 ECR
- 在 ECS 服务的公有子网中部署应用程序负载均衡器和目标组
- 为 ECS 服务创建任务定义
- 在私有子网中创建 ECS 集群和具有 Fargate 启动类型的 ECS 服务。
- 在路由 53 中创建托管区域并将其指向 ALB 的 DNS 名称
项目架构
使用 docker 将应用程序容器化
本节将展示从头开始创建此项目所涉及的步骤
第 1 步:Dockerize Flask 应用程序
在项目目录中创建一个 Dockerfile 以打包 Flask 应用。
FROM python:3.12 #set the working dir WORKDIR /usr/src/app #copy the requirements and install dependencies COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # Copy all the files to the container COPY . . #Expose the port EXPOSE 5000 #run the app CMD ["gunicorn","-b","0.0.0.0:5000", "app:app"]
第 2 步:构建并测试 Docker 镜像
在本地构建和测试 docker 镜像以确保其按预期工作非常重要
docker build -t image-name . docker run -p 5000:5000 image-name
将 Docker 镜像推送到 ECR
步骤 1. 创建弹性容器存储库 (ECR)
- 转到 AWS ECR 控制台并创建存储库并记下 URI(例如 123456789012.dkr.ecr.region.amazonaws.com/repo-name)
- 注意:输入您的 ECR 存储库并选择查看推送命令,以便查看将映像推送到您的 ECR 存储库的命令。这些命令将在这里使用。
步骤 2.向 ECR 验证 Docker
运行以下命令以使用 ECR 验证 Docker(替换 your-region 和 your-account-id):
aws ecr get-login-password --region your-region | docker login --username AWS --password-stdin your-account-id.dkr.ecr.your-region.amazonaws.com
步骤 3. 标记并推送镜像
标记本地 Docker 镜像以匹配 ECR 存储库,然后推送它:
注意:确保这是您帐户各自的区域和帐户 ID
docker tag image-name:latest your-account-id.dkr.ecr.your-region.amazonaws.com/image-name:latest docker push your-account-id.dkr.ecr.your-region.amazonaws.com/image-name:latest
您的 ECR 存储库应该看起来像这样,图像已成功推送
创建 VPC 及其子网
记下该区域,因为这是所有资源将部署的地方
步骤一:创建新的VPC
- 进入VPC控制台并创建新的VPC
- 指定 CIDR 块(例如 10.0.0.0/16)
- 注意:创建 VPC 时确保选中启用 DNS 主机名设置
步骤 2:为 VPC 创建 Internet 网关 (IGW)
在 VPC 控制台中,选择 Intergate Gateway 选项卡并创建 Internet 网关。创建 IGW 后,将其附加到您的 VPC
第 3 步:创建子网
- 在一个可用区中创建两个子网(例如 us-east-1)
- 在不同的可用区 (AZ) 中创建另一组两个子网(例如 us-east-2)
- 注意:在每个可用区中,子网将分别充当私有子网和公有子网。
注意:ECS 集群将部署在私有子网中,Application Load Balancer 将位于公有子网中,并将访问私有子网中的 ECS 集群
第 4 步:更新路由表
- 为公有子网和私有子网创建路由表,并将路由表分别关联到公有子网和私有子网。 (确保两者都选择正在使用的 VPC。)
- 对于公有子网路由表,添加路由以通过互联网网关引导所有出站流量 0.0.0.0/0。
- 私有子网暂时不会路由出站流量。
为 ECR 创建 VPC 终端节点
这将使 ECS 集群能够访问弹性容器注册表 (ECR)。
注意:将为 S3、ECR、DOCKER 和 CloudWatch 创建四个端点。
- 选择端点并单击创建端点。
- 命名端点并在服务 com.amazonaws.us-east-1.ecr.api 下搜索 ECR api 端点
- 选择我们一直使用的 VPC,这将显示子网选项,其中将选择我们的私有子网所在的可用区,然后最终选择我们的私有子网和默认安全组。
- 选择默认值并保留策略不变,然后创建 VPC。
*现在创建其余端点,并更改 docker com.amazonaws.us-east-1.ecr.dkr、CloudWatch 日志 com.amazonaws.us-east-1.logs 和 S3 com.amazonaws 的服务。分别为 us-east-1.s3 并遵循这些更改所预期的所有其他内容。
- 注意:对于 S3 端点,选择网关。这称为 S3 网关端点,会提示您将其连接到私有子网路由表,这将在路由表中为其创建一条路由。
创建应用程序负载均衡器和目标组
这是非常重要的一步,因为它是 ALB
将把流量路由到私有 ECS 服务。
首先,我们需要为 ALB 创建一个安全组。
- 转到左侧的安全组并选择创建安全组。为安全性提供名称和描述。
- 在端口范围 80 和源 0.0.0.0/0 上添加入站规则,并分别针对 HTTP 和 HTTPS 流量在端口范围 443 和源 0.0.0.0/24 上添加第二个入站规则
第 1 步:创建目标组
- 转到 EC2 控制台,在左侧的负载均衡下选择目标组。
- 在基本配置下选择 IP 地址并命名目标组
- 将协议和端口保留为 HTTP:80
- 选择我们要在其中部署负载均衡器的 VPC,然后滚动并单击下一步。
- 此处删除现有的 IP 地址,所有 IP 地址将自动添加。接下来,指定暴露的端口,Port:5000 并创建目标组。
创建应用程序负载均衡器
- 在 EC2 控制台左侧,选择负载均衡器,然后选择创建负载均衡器。
- 选择创建应用程序负载均衡器,这将是一个面向互联网的负载均衡器。给 ALB 起一个名字。
- 在网络映射部分选择已创建的 VPC 以及两个可用区中的公有子网。
- 在侦听器和路由部分中,选择创建的目标组。 ALB 将监听端口:80 并转发到目标组。
- 创建 ALB。
创建任务定义
进入ECS控制台并选择任务定义。
步骤一:
- 命名任务定义系列
- 保留默认的基础架构要求不变,但您可以根据您的判断更改 vCPU 和内存。
第 2 步:对于 容器 1
- 给个名字
- 转到 ECR 并复制我们在本项目前面部分中推送的 docker 映像的 URI,然后返回到我们正在创建的任务定义的容器 1 部分,并将其粘贴到容器的映像 URI 中。
- 对于端口映射,将其设置为 5000,因为这是我们在 docker 容器中公开的端口并为其命名。 注意:端口映射与公开的 docker 端口相同非常重要
添加环境变量
这在该项目的 CI/CD 部分非常重要。但暂时会被跳过。继续跳过剩余部分并创建任务定义
创建 Fargate 集群和服务
为 ECS 服务创建安全组
- 转到左侧的安全组并选择创建安全组。为安全性提供名称和描述。
- 在端口范围 5000 上添加入站规则,源将是 Application Load Balancer 安全组。
步骤一:创建集群
- 转到集群选项卡并选择创建集群,这将带您进入集群配置页面。命名集群并确保在基础设施选项卡下仅选择 AWS Fargate(Serverless),然后创建集群。
第 2 步:创建服务
- 选择创建的集群,点击service下的create。
这将引导您进入一个新页面,您将在其中指定 Fargate 服务的配置。
- 滚动经过“环境”部分并移至“部署配置”。在这里,指定任务定义系列,它也会自动选择修订版。
选择要启动的所需任务数量。对于这个项目来说,一个就可以了。
滚动到网络选项卡并选择已创建的 VPC,然后选择私有子网
在负载均衡器部分中,选择负载均衡器类型作为应用程序负载均衡器,然后选择使用现有负载均衡器。这将显示在前面部分中创建的 ALB。选择它。
滚动你就会看到,听众。选择使用现有侦听器并选择那里的端口 80 侦听器,在目标组下执行相同操作,选择我们创建的现有目标组。
接下来是服务自动缩放。这是可选的,但对于必须根据定义的指标扩展到应用程序来说是一个很好的补充。启用此选项并指定要运行的任务的最小和最大数量。接下来添加扩展策略。对于此项目,Target 跟踪策略与 ALBrequestCountPerTarget ECS 服务指标一起使用,目标值为 50,横向扩展冷却时间和横向收缩冷却时间为 60 秒
创建服务。
创建服务后,将创建所需数量的任务。
在路线 53 中创建托管区域
如果遵循上述说明,您应该拥有一个功能齐全的网络应用程序,要访问它,请转到您的负载均衡器,复制 DNS 名称并粘贴到您的浏览器中。但这很乏味,而且没有使用最佳实践。理想情况下,ALB 或 CloudFront 前面应该有一个 Web 应用程序防火墙,但为了简单起见,我们将仅使用 Route 53。
注意:本部分要求您拥有 AWS 或任何其他提供商的注册域名
第 1 步:创建托管于
- 转到 Route 53 控制台。
- 在左侧选项卡上,选择托管区域。你应该拥有这个。
- 选择创建托管区域
- 输入您的域名并提供描述。将类型保留为公共托管区域并选择创建托管区域。
步骤 2:将 ALB DNS 名称添加到托管区域记录
- 转到您的 ALB 控制台并复制其 DNS 名称。
- 返回托管区域并选择创建记录。
- 默认记录类型是 A 记录,将使用该记录。
- 切换别名开关
- 在选择端点下,选择应用程序别名和经典负载均衡器
- 接下来,选择您启动负载均衡器的区域。在本例中为 us-east-1,确保它是您所在的区域。
- 从下拉菜单中选择您的负载均衡器。
- 创建记录。
这假设您在 AWS 拥有域名
恭喜!
如果您按照步骤进行操作,您应该拥有一个可通过您的域名访问的功能齐全的网络应用程序。
这是一个非常令人兴奋的项目,因为我与 VPC、私有和公有子网、VPC 端点、ECS 服务、ECR、目标组、安全组和应用程序负载均衡器一起工作,因为它们一起创建了这个网络 -应用程序。
以上是使用 CI/CD 将基于 Flask 的入侵检测系统部署到 AWS ECS的详细内容。更多信息请关注PHP中文网其他相关文章!

本文解释了如何使用美丽的汤库来解析html。 它详细介绍了常见方法,例如find(),find_all(),select()和get_text(),以用于数据提取,处理不同的HTML结构和错误以及替代方案(SEL)

Python的statistics模块提供强大的数据统计分析功能,帮助我们快速理解数据整体特征,例如生物统计学和商业分析等领域。无需逐个查看数据点,只需查看均值或方差等统计量,即可发现原始数据中可能被忽略的趋势和特征,并更轻松、有效地比较大型数据集。 本教程将介绍如何计算平均值和衡量数据集的离散程度。除非另有说明,本模块中的所有函数都支持使用mean()函数计算平均值,而非简单的求和平均。 也可使用浮点数。 import random import statistics from fracti

Python 对象的序列化和反序列化是任何非平凡程序的关键方面。如果您将某些内容保存到 Python 文件中,如果您读取配置文件,或者如果您响应 HTTP 请求,您都会进行对象序列化和反序列化。 从某种意义上说,序列化和反序列化是世界上最无聊的事情。谁会在乎所有这些格式和协议?您想持久化或流式传输一些 Python 对象,并在以后完整地取回它们。 这是一种在概念层面上看待世界的好方法。但是,在实际层面上,您选择的序列化方案、格式或协议可能会决定程序运行的速度、安全性、维护状态的自由度以及与其他系

本文比较了Tensorflow和Pytorch的深度学习。 它详细介绍了所涉及的步骤:数据准备,模型构建,培训,评估和部署。 框架之间的关键差异,特别是关于计算刻度的

Linux终端中查看Python版本时遇到权限问题的解决方法当你在Linux终端中尝试查看Python的版本时,输入python...

本文讨论了诸如Numpy,Pandas,Matplotlib,Scikit-Learn,Tensorflow,Tensorflow,Django,Blask和请求等流行的Python库,并详细介绍了它们在科学计算,数据分析,可视化,机器学习,网络开发和H中的用途

该教程建立在先前对美丽汤的介绍基础上,重点是简单的树导航之外的DOM操纵。 我们将探索有效的搜索方法和技术,以修改HTML结构。 一种常见的DOM搜索方法是EX

本文指导Python开发人员构建命令行界面(CLIS)。 它使用Typer,Click和ArgParse等库详细介绍,强调输入/输出处理,并促进用户友好的设计模式,以提高CLI可用性。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。