如何限制EC2服务器上Linux用户的特定AWS CLI命令执行权限
限制EC2 Linux用户执行特定AWS CLI命令的方法
针对EC2服务器上Linux用户的AWS CLI命令限制需求,以下是几种实用方案:
方案1:Shell别名拦截(快速实现)
通过给用户的shell配置添加别名,直接拦截禁止的命令:
- 编辑用户的
~/.bashrc(或~/.profile,依shell类型而定),添加以下内容:
alias aws='function _aws_restrict() { if [[ "$1" == "secretsmanager" ]]; then echo "错误:该命令已被限制执行" return 1 else command aws "$@" fi }; _aws_restrict'
- 让配置生效:
source ~/.bashrc
注意:此方法简单易操作,但用户可通过直接调用AWS CLI的绝对路径(如/usr/bin/aws secretsmanager ...)绕过限制,适合对权限要求不极高的场景。
方案2:自定义脚本替换AWS CLI调用(较难绕过)
通过修改用户PATH优先级,用自定义脚本替代默认AWS CLI调用:
- 创建自定义脚本
/usr/local/bin/aws,内容如下:
#!/bin/bash # 拦截禁止的命令 if [[ "$1" == "secretsmanager" ]]; then echo "错误:该命令已被限制执行" exit 1 fi # 调用真实的AWS CLI exec /usr/bin/aws "$@"
- 给脚本添加执行权限:
chmod +x /usr/local/bin/aws - 确保用户的PATH环境变量中
/usr/local/bin在/usr/bin之前(默认通常满足)
此方法拦截更彻底,除非用户知晓真实CLI路径并直接调用,否则无法执行禁止命令。
方案3:IAM权限边界+用户层面限制(双重保障)
从IAM根源限制权限,配合用户层面拦截实现双重防护:
- 给EC2关联的IAM角色添加权限边界,仅允许
s3和iam相关操作,示例策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:*", "iam:*" ], "Resource": "*" } ] }
- 同时搭配上述任意一种用户层面的命令拦截方法
此方案最安全,即使用户绕过shell限制,IAM权限也会直接拒绝secretsmanager相关请求,从根源解决权限过大问题。
内容的提问来源于stack exchange,提问作者Nitin G
相关产品推荐
相关产品推荐

