能否为EC2堡垒主机设置连接限制?实现AWS RDS分组访问管控
实现堡垒服务器用户的RDS访问权限隔离
完全可以实现,不用在SSH隧道建立时跑脚本校验,有几个更可靠的落地方案:
1. 用SSH强制命令+端口转发限制锁死访问范围
给组1用户的SSH登录配置强制规则,只允许他们建立指向RDS1的隧道,禁止其他操作:
- 编辑堡垒机上组1用户的
~/.ssh/authorized_keys,在对应公钥前添加参数:command="/usr/local/bin/restrict-rds1-tunnel.sh",no-agent-forwarding,no-X11-forwarding,permitopen="rds1-private-endpoint:3306" - 编写
/usr/local/bin/restrict-rds1-tunnel.sh脚本:#!/bin/bash # 仅允许用户建立指向RDS1的SSH隧道 if [[ -z "$SSH_ORIGINAL_COMMAND" || "$SSH_ORIGINAL_COMMAND" != *"-L"*"rds1-private-endpoint:3306"* ]]; then echo "权限限制:仅允许连接RDS1实例" exit 1 fi exec "$SSH_ORIGINAL_COMMAND" - 给脚本加执行权限:
chmod +x /usr/local/bin/restrict-rds1-tunnel.sh
这种配置下,组1用户连尝试建立RDS2的隧道都做不到,直接被拦截。
2. 用iptables基于用户组做流量拦截
在堡垒机上配置防火墙规则,限制组1用户的流量只能发往RDS1:
- 先创建用户组
group1,把对应用户加入组:usermod -aG group1 username - 添加iptables规则:
# 允许group1用户访问RDS1的3306端口 iptables -A OUTPUT -m owner --gid-owner group1 -d rds1-private-ip -p tcp --dport 3306 -j ACCEPT # 禁止group1用户访问RDS2的3306端口 iptables -A OUTPUT -m owner --gid-owner group1 -d rds2-private-ip -p tcp --dport 3306 -j DROP # 保存规则(以CentOS为例) service iptables save
不管用户用什么方式尝试访问RDS2,只要流量从堡垒机发出,就会被iptables拦截,就算知道RDS2的账号密码也无法建立连接。
3. 结合RDS IAM认证实现权限映射
给RDS开启IAM数据库认证,通过堡垒机的用户权限控制获取认证token的范围:
- 给RDS1和RDS2分别配置IAM认证,创建对应的IAM角色:
- 给组1用户绑定的IAM角色只授予
rds-db:connect权限针对RDS1,不包含RDS2
- 给组1用户绑定的IAM角色只授予
- 在堡垒机上,组1用户只能通过
aws rds generate-db-auth-token生成RDS1的登录凭证,无法生成RDS2的
这种方式从数据库登录层面限制,就算用户知道RDS2的账号,也拿不到有效的登录token,无法访问。
内容的提问来源于stack exchange,提问作者Brian
相关产品推荐
相关产品推荐

