如何在AWS上运行仅允许单个IAM用户执行的Python脚本
问题解答
这类权限限制不需要在脚本内部实现,AWS原生的IAM权限校验机制已经可以满足你的需求,且安全性、可靠性远高于脚本侧自行实现的校验逻辑,具体说明如下:
- AWS服务端会强制校验所有API请求的身份权限:boto3发起请求时会自动加载你指定的AWS CLI凭证文件中的身份密钥,请求到达AWS服务端后,会先校验该IAM用户是否有对应操作的权限,校验不通过会直接返回
AccessDenied错误,这个逻辑是在服务端执行的,本地脚本无法绕过。 - 脚本侧实现权限校验存在安全隐患:如果脚本被恶意篡改、校验逻辑被绕过,权限限制会直接失效,而IAM侧的权限控制不受本地文件影响,是更合规的权限管控方式。
你只需要完成以下配置即可实现需求:
- 创建指定的低权限IAM用户,仅为其分配脚本运行必须的最小权限,比如脚本仅需要读取单个S3桶的对象,就只授予针对该桶的
s3:GetObject权限,不要授予多余的全量权限。 - 为该IAM用户生成访问密钥,在AWS CLI凭证文件中配置为单独的命名配置文件,示例配置如下(凭证文件默认路径为
~/.aws/credentials):
[low-perm-script-user] aws_access_key_id = 你的IAM用户AK aws_secret_access_key = 你的IAM用户SK
- 脚本初始化boto3会话时明确指定使用该配置文件即可,示例代码:
import boto3 # 指定使用低权限用户的配置文件 session = boto3.Session(profile_name='low-perm-script-user') # 初始化对应服务的客户端 s3_client = session.client('s3')
额外安全提示:不要将访问密钥硬编码到脚本中,除了使用CLI凭证文件外,也可以通过环境变量传递凭证;如果脚本是在EC2、Lambda等AWS托管服务上运行,建议直接绑定IAM角色,无需手动配置访问密钥,进一步降低密钥泄露风险。
内容的提问来源于stack exchange,提问作者Sanat Favas
相关产品推荐
相关产品推荐

