ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

AWS EC2 Security Groups 实战演练:用控制台与 AWS CLI 验证入站规则对 Web 应用可达性的影响

AWS EC2 Security Groups 实战演练:用控制台与 AWS CLI 验证入站规则对 Web 应用可达性的影响 文档教程DevOps运维【免费下载链接】devops-exercisesLinux, Jenkins, AWS, SRE, Prometheus, Docker, Python, Ansible, Git, Kubernetes, Terraform, OpenStack, SQL, NoSQL, Azure, GCP, DNS, Elastic, Network, Virtualization. DevOps Interview Questions项目地址https://gitcode.com/GitHub_Trending/de/devops-exercises点击查看免费下载安全组Security Group是 AWS EC2 最核心的网络隔离手段本质上是实例级别的虚拟防火墙。本文基于 devops-exercises 仓库的 AWS EC2 Security Groups 练习与官方解答完整还原其控制台与 CLI 两套操作路径列出账户内安全组、删除/恢复 HTTP 入站规则并观察规则变更前后 Web 应用的可达性变化。读完本文你将掌握安全组入站规则的增删命令、timeout与connection refused两类故障现象的本质区别并能用 Terraform 将同样的规则以 IaC 方式固化下来。实验场景与前置条件该练习要求你预先准备两样东西缺一不可一台 EC2 实例其上运行着 Web 应用例如用 httpd 提供的静态页面一个允许 HTTP 流量的安全组入站规则即允许 TCP 80 端口入站。如果你还没有这样一台实例可以先完成仓库中的前置练习 Launch EC2 Web Instance——该练习会引导你通过控制台或 Terraform 启动一台 Amazon Linux 2 实例实例类型t2.micro通过 user data 安装并启动 httpd写入index.html并在安全组中添加“接受来自任意位置的 HTTPTCP 80流量”规则。完成它之后本练习就有了可被验证的实验对象。成本提示仓库的 AWS 主题 README 明确提醒部分练习会产生费用、无法在免费层完成。本练习涉及已运行的实例和入站规则修改请留意自己账户的实际用量。安全组核心机制速览在动手之前先对齐几个安全组的关键事实这些结论直接来自仓库 AWS 主题 README 的面试问答部分属于可查证的项目内容安全组是实例级虚拟防火墙控制一个或多个实例的流量进出。安全组只包含 allow允许规则没有 deny拒绝规则。凡是未被显式允许的流量一律被默认丢弃。默认行为是“入站全禁、出站全放”新创建的安全组默认阻断所有入站流量默认允许所有出站流量。安全组被锁定在“区域 VPC”维度切换区域或 VPC 时不能复用旧安全组需要重新创建。一个安全组可以关联多台实例一台实例也可以挂多个安全组规则取并集。安全组之间可以互相引用在规则中以另一个安全组作为 Source即可实现“只允许来自某组实例的流量”无需写死 IP。理解了这五条本练习的实验逻辑就非常清晰了0.0.0.0/0的 HTTP 入站规则存在时公网流量可直达实例的 80 端口规则被删除后TCP 80 入站流量落入“未显式允许即丢弃”的默认行为应用立刻对外不可达。实验目标五步验证安全组即插即用的特性练习文件 exercise.md 定义了五项目标核心是验证“安全组规则是热生效的无需重启实例”列出你当前账户、当前区域下所有的安全组删除允许 HTTP 入站流量的那条规则再次访问应用观察现象还能访问吗你看到/得到什么把规则重新加回去再次访问应用确认是否恢复。下面分别用控制台与 CLI 两条路径完成这五步。路径一AWS 管理控制台操作1. 列出账户中的安全组进入 EC2 服务页面在左侧菜单 “Network Security网络与安全” 下点击Security Groups安全组。此时你应该至少能看到一个安全组其中必然有一个名为default的默认安全组新账户的每个 VPC 都会自带一个。2. 删除 HTTP 入站规则找到那个带有 HTTP 规则的安全组即你在前置练习中配置、并关联到 Web 实例的那一个点击进入详情选择Edit inbound rules编辑入站规则删掉所有与 HTTP 相关的规则通常是 Type 为 HTTP、端口 80 的那条然后点击Save rules保存规则。3. 访问应用观察现象在浏览器中访问实例的公网 IP。预期结果是无法访问请求发生超时time out因为删除规则后发往 80 端口的入站数据包被安全组直接丢弃TCP 握手永远无法完成。注意这里的关键词是“超时”而不是“拒绝”两者成因完全不同详见下文“现象解读”小节。4. 恢复 HTTP 入站规则再次进入安全组 → Edit inbound rules添加一条规则并保存配置项值Type类型HTTPPort range端口范围80Source来源Anywhere →0.0.0.0/00.0.0.0/0表示任意 IPv4 来源即允许全世界访问该实例的 80 端口。这正是前置练习 launch_ec2_web_instance 中要求“HTTP traffic (port 80) should be accepted from anywhere”所对应的规则形态。5. 再次访问验证恢复刷新浏览器。预期结果是可以正常访问。规则保存后即时生效不需要重启实例、不需要重新关联安全组——这是安全组作为“有状态、热更新”防火墙的核心体验。路径二AWS CLI 操作1. 列出安全组aws ec2 describe-security-groups在新账户中默认情况下这条命令会返回一个名为default的安全组每个 VPC 各一个。你也可以按名称或 ID 精确过滤# 按名称过滤 aws ec2 describe-security-groups --group-names default # 按安全组 ID 过滤更常用 aws ec2 describe-security-groups --group-ids sg-xxxxxxxx2. 删除撤销HTTP 入站规则使用revoke-security-group-ingress命令aws ec2 revoke-security-group-ingress \ --group-name someHTTPSecurityGroup \ --protocol tcp \ --port 80 \ --cidr 0.0.0.0/0原文档solution.md中该命令的换行处缺少续行符直接复制会报错。上面给出的版本补充了\续行符是可直接执行的完整形式。实际使用时请把someHTTPSecurityGroup替换成你的真实安全组名称。实操提示--group-name参数依赖名称解析在默认 VPC 之外的场景下更稳妥的写法是使用--group-id sg-xxxxxxxx定位安全组。--protocol tcp --port 80 --cidr 0.0.0.0/0四个参数共同精确描述了“要撤销的这条规则”的匹配特征与入站规则一一对应。3. 访问应用观察现象同上无法访问请求超时因为撤销规则后 80 端口入站被默认丢弃。4. 重新添加 HTTP 入站规则使用authorize-security-group-ingress命令参数与撤销时完全一致aws ec2 authorize-security-group-ingress \ --group-name someHTTPSecurityGroup \ --protocol tcp \ --port 80 \ --cidr 0.0.0.0/05. 再次访问验证恢复可以正常访问。至此你已经在 CLI 侧完整闭环了“列出 → 撤销 → 观察超时 → 恢复 → 验证通过”的验证链路。现象解读timeout 与 connection refused 的本质区别练习中你观察到的现象是time out超时。仓库中另一个姊妹练习 No Application :( 对两种常见故障做了精确区分值得在此一并掌握Time out超时的常见原因安全组不允许该流量数据包被静默丢弃目标主机根本不存在如 IP 错误、实例已终止操作系统层面防火墙如iptables、firewalld拦截了流量。Connection refused连接被拒绝的常见原因应用没有正常启动或没有监听在预期端口上防火墙以 rejectRST 回包方式而非 drop 方式丢弃报文。一句话记忆超时 ≈ 包被丢了没有回音拒绝 ≈ 收到了明确的不予理睬。本练习删掉规则后安全组是“静默丢弃”因此表现为超时如果你遇到的是 connection refused则更应怀疑应用本身没起来而不是安全组。用 Terraform 固化同样的规则IaC 视角仓库 launch_ec2_web_instance 的解答 提供了与本练习完全同构的 Terraform 定义——用aws_security_group资源表达“放行 TCP 80 入站”再用aws_instance通过security_group_ids关联resource aws_security_group web_sg { name web_sg description Security group for web server ingress { from_port 80 to_port 80 protocol tcp cidr_blocks [0.0.0.0/0] } }resource aws_instance web_server { ami ami-12345678 # 替换为正确的 Amazon Linux 2 AMI instance_type t2.micro security_group_ids [aws_security_group.web_sg.id] tags { Name web-1 Type web } root_block_device { volume_size 8 delete_on_termination true } # ... }这段代码与你在控制台/CLI 中手工添加的规则完全等价ingress块中的from_port 80、to_port 80、protocol tcp、cidr_blocks [0.0.0.0/0]正是上文“Type: HTTP / Port: 80 / Source: 0.0.0.0/0”的声明式表达。仓库 AWS 主题 README 也建议优先使用 IaC如 Terraform、Pulumi完成练习而非仅依赖控制台。常见误区与最佳实践结合本练习的现象与仓库问答内容整理几条值得带走的经验规则增删即时生效无需重启实例安全组是有状态的修改规则后流量行为立即改变——这也是本练习能快速验证的原因。尽量精确到端口与来源避免长期开放0.0.0.0/0本练习出于演示目的放行任意来源生产环境应遵循最小权限原则将 Source 收敛为特定 CIDR 或引用其他安全组。用安全组引用替代硬编码 IP如 README 问答所述当一台实例的入站规则以“另一安全组”为 Source 时任何挂载了该安全组的实例都能直接通信无需维护 IP 列表天然适配实例 IP 动态变化的场景。排障顺序先确认安全组规则是否存在且关联到正确实例再检查 OS 层防火墙最后检查应用是否监听在预期端口配合ss -tlnp等命令。新账户/新 VPC 总有一个default安全组它默认放行组内互访、放行全部出站除非必要不建议直接在 default 组上堆积规则。延伸练习安全组知识在仓库的 AWS 练习体系中是承上启下的关键一环后续练习大量依赖它Launch EC2 Web Instance前置练习教你创建带 HTTP 规则的 Web 实例含 Terraform 版本。Application Load Balancer 与 Network Load Balancer负载均衡器同样需要选择安全组并配合目标组的健康检查判定实例是否“可被放行”。ALB Multiple Target Groups基于路径的路由规则验证安全组之外更细粒度的流量分发。No Application :(把本练习的“超时”现象放入更完整的排障框架中理解。完成本练习后建议你顺手用 Terraform 复刻一遍相同的规则变更并在terraform plan的 diff 中观察安全组规则的增删体会声明式基础设施与命令式 CLI 在“可重复、可审计”上的差异。赞分享文档教程DevOps运维【免费下载链接】devops-exercisesLinux, Jenkins, AWS, SRE, Prometheus, Docker, Python, Ansible, Git, Kubernetes, Terraform, OpenStack, SQL, NoSQL, Azure, GCP, DNS, Elastic, Network, Virtualization. DevOps Interview Questions项目地址https://gitcode.com/GitHub_Trending/de/devops-exercises点击查看免费下载相关推荐AWS EC2 实战使用 User Data 与 Terraform 启动一个 Web 实例devops-exercises 演练AWS EC2 实战使用 User Data 与 Terraform 启动一个 Web 实例devops exercises 演练 本文基于开源仓库 de文档教程DevOps运维my-arsenal-of-aws-security-tools与AWS WAF集成Web应用防火墙规则管理my arsenal of aws security tools与AWS WAF集成Web应用防火墙规则管理 1. 为什么需要AWS WAF规则管理工具 A文档网络安全云原生使用 AWS SDK for .NET v4 管理 AWS IoTThing、证书、影子与规则的实战指南使用 AWS SDK for .NET v4 管理 AWS IoTThing、证书、影子与规则的实战指南 本文以 aws doc sdk examples 仓示例工程教程后端上一篇Ranger21 beta版前瞻下一代深度学习优化器的8大改进下一篇LikeC4 MCP preview-view 工具修复非默认项目 ID 项目的预览渲染创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表