昨天有个刚用AWS俩月的朋友跟我吐槽,说他的测试环境突然连不上数据库了。我让他截个图发我,一看,他把安全组的出站规则全关了,就留了个80端口,然后RDS在另一个子网,死活握手不通。他说:“我怕被黑,就全锁了。” 锁过头了。

今天咱们不聊高可用那一套,就说说怎么把VPC、IAM、安全组这哥仨搭得稳当、安全、还不给自己挖坑。


VPC:别碰默认的,也别自己造航母

AWS给你的默认VPC(虚拟私有云,相当于你在云上的独立局域网),看起来省事,直接能用,但别贪这个方便。默认VPC把所有子网都配了公网路由,等于每台机器都光着膀子站在大街上——攻击面太大了。

自己建一个新的VPC,网段用 10.0.0.0/16 就够了(给私人局域网用的三段私网地址之一)。子网划分按最老实的做法:两个可用区,每个区一个公有子网和一个私有子网

  • 公有子网(关联了互联网网关IGW,相当于家里的路由器出口):放负载均衡器(ALB)、跳板机(Bastion,用来登录内网机器的中转站)。

  • 私有子网(没有直通互联网的路由):放你的应用服务器(EC2)和数据库(RDS)。

这么做图什么?数据库没公网IP、没直接出网路由,就算代码有SQL注入漏洞,攻击者也拿不到数据库——因为连敲门的机会都没有。

NAT网关(给私有子网机器偷偷上网更新补丁用的)新手期可以不开。你的私有子网EC2如果非要装软件,先把它临时挪到公有子网装完再挪回去,省下NAT每小时好几毛的支出,够买杯豆浆了。


IAM:别用根账号干任何事

根账号(注册时那个邮箱登录的超级管理员)是拿来收账单和关账户的,不是拿来配权限的。创建第一个普通用户,给 AdministratorAccess 都别给根账号直接干活。

然后落地一条铁律:给每个服务创建一个单独的角色(IAM Role,相当于给EC2、Lambda这些服务发的工作证),别把AK/SK(访问密钥,相当于用户名密码)写在代码里或者配置文件里。

比如你的Java应用跑在EC2上,它要去S3读图片——给这个EC2绑一个S3读权限的Role,别在application.yml里写 accessKeysecretKey。代码里用SDK默认的凭证链(InstanceProfileCredentialsProvider)就能自动拿到这个角色的临时密钥。临时密钥几个小时就失效,比写在代码里的永久密钥安全太多了。

策略(Policy,就是权限清单)的写法遵循“最小够用原则”。别给 s3:*(所有S3操作),只给 s3:GetObjects3:PutObject,限制到具体的桶名和路径前缀。比如 arn:aws:s3:::my-bucket/dev/*,这样就算代码被注入了,攻击者也删不了你整个桶。


安全组:像包租公一样管好出入门

安全组(Security Group,相当于每台机器的虚拟防火墙)是AWS里最爽的防护工具——因为它是有状态的。什么意思?你允许了入站,出站自动允许回包,不用两边都配。

入站规则(Inbound):能窄就窄。SSH(22端口)只对跳板机的私有IP开放,别写 0.0.0.0/0(全世界都能连)。HTTP(80)和HTTPS(443)只对负载均衡器的安全组开放,应用服务器的安全组里只允许来自负载均衡器安全组的流量,而不是允许所有来源。这样用户无法绕过ALB直接打你的源站。

出站规则(Outbound):新手最容易一刀切全禁。正确的做法是保留默认的出站全开(0.0.0.0/0),因为你的服务器需要访问yum源、NTP时间同步、DNS解析。实在有洁癖,可以限制目标为 0.0.0.0/0 的端口只开80、443、53(UDP),外加你自己的私有子网网段。

RDS的安全组就更好办了:入站只允许你的应用服务器安全组,端口只开数据库端口(比如3306)。其他人、其他机器、其他子网统统不通。


网络ACL:别碰,新手真用不上

网络ACL(网络访问控制列表,子网级别的无状态防火墙)是个看起来很美好、实际上极易翻车的东西。它无状态,意味着你开了入站就得手动开出站,回包会被拦截,排查起来能让人怀疑人生。新手期把它保持默认“全允许”就行,别给自己加戏。


最怕的就是“我觉得这样更安全”

很多翻车案例不是配置错了,是“想多了”。把出站全禁,结果连不上NTP,时间漂移导致证书验证失败;把IAM权限开太宽,结果误操作删了备份;把VPC子网路由配错,结果跨可用区不通。

安全配置的黄金法则是:默认拒绝 + 逐条开放最小范围 + 测试验证。建好之后,从跳板机SSH到内网EC2,再从内网EC2 telnet到RDS端口,三步能通,就说明你的“三明治”结构搭对了。


结论:VPC分公私子网隔离,IAM用角色不用密钥,安全组按最小范围开口子。这三件事理顺了,你的AWS环境就能安稳跑起来,既不会被黑,也不会自己把自己堵死。记住,安全配置是做减法——去掉所有不必要的通路,留下的每一条都要知道“为什么开着”。