如何修改AWS Lambda中SSM.send_command的执行用户为centos?
直接指定SSM命令执行用户的方法(无需runuser)
当然有更优雅的解决办法!不用再用runuser绕弯子,还能彻底避免权限混乱的问题。AWS SSM自带的AWS-RunShellScript文档本身就支持指定执行命令的用户,直接在send_command调用里配置即可。
具体实现步骤
在你的Python Lambda代码中,调用ssm.send_command时,通过Parameters参数里的runAs字段指定centos用户,同时把你的命令直接放在commands列表里:
import boto3 def lambda_handler(event, context): # 初始化SSM客户端,替换成你的AWS区域 ssm_client = boto3.client('ssm', region_name='us-east-1') # 发送命令,指定centos用户执行 command_response = ssm_client.send_command( InstanceIds=['i-xxxxxxxxx'], # 替换成你的EC2实例ID DocumentName='AWS-RunShellScript', Parameters={ 'commands': [ 'mkdir /home/centos/mydir', 'aws s3 cp s3://<my_s3_file_to_transfer> /home/centos/mydir' ], 'runAs': ['centos'] # 关键配置:指定执行命令的用户 } ) return { 'statusCode': 200, 'commandId': command_response['Command']['CommandId'] }
为什么这个方法更优?
- 命令直接以
centos用户身份执行,创建的目录、文件的所有者和权限天然符合预期,不需要额外执行chmod或chown修正。 - 彻底避免了
runuser命令嵌套带来的语法复杂度和潜在权限隐患(比如你之前遇到的权限异常问题)。 - 完全贴合SSM Run Command的原生设计,代码可读性和维护性更高。
注意事项
确保你的EC2实例上的SSM Agent版本足够新(建议2.3.672.0及以上),CentOS 7默认安装的SSM Agent通常都满足这个要求,如果版本过旧,可以通过SSM的AWS-UpdateSSMAgent文档一键升级。
内容的提问来源于stack exchange,提问作者AnxGotta
相关产品推荐
相关产品推荐

