You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否为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用户只能通过aws rds generate-db-auth-token生成RDS1的登录凭证,无法生成RDS2的
    这种方式从数据库登录层面限制,就算用户知道RDS2的账号,也拿不到有效的登录token,无法访问。

内容的提问来源于stack exchange,提问作者Brian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 13:27:33