AWS Lambda中将敏感数据写入/tmp目录是否存在安全风险?
Lambda /tmp目录存储SSH私钥的安全风险说明
先纠正一个常见认知偏差
你提到paramiko仅接受文件名参数是误解,该库支持直接传入内存中的私钥对象,完全不需要将私钥落地到磁盘,可以从根源上规避写入/tmp的安全风险,参考实现代码:
import paramiko from io import StringIO # 从AWS Secrets Manager获取的私钥字符串 secret_private_key = "你获取到的私钥明文内容" # 直接加载内存中的私钥,无需写入文件 pkey = paramiko.RSAKey.from_private_key(StringIO(secret_private_key)) # 建立SSH连接时直接传入pkey参数即可 ssh_client = paramiko.SSHClient() ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh_client.connect( hostname="目标服务器IP/域名", username="SSH登录用户名", pkey=pkey )
如果你确实有必须写入/tmp的场景,安全影响如下:
Lambda的/tmp是同执行环境独占的临时磁盘存储,执行环境销毁后数据会被彻底清除,默认不存在跨账号、跨函数的泄露风险,但仍有以下需要注意的安全问题:
- 执行环境复用泄露风险:Lambda处理完请求后不会立刻销毁执行环境,同函数的后续请求大概率会复用同一个执行环境,/tmp下未删除的私钥会被后续的函数执行逻辑读取。如果函数存在代码注入、任意文件读取类的漏洞,攻击者可以通过复用环境获取到私钥内容。
- 权限配置不当风险:如果写入文件时没有主动设置严格的文件权限,默认权限可能允许执行环境内的其他进程读取私钥内容,建议写入时直接设置权限为
0o600。 - 残留窗口过大风险:如果私钥写入后没有在使用完成后立刻删除,会在执行环境的生命周期内长期留存,进一步扩大泄露的可能性。
写入/tmp时的安全优化建议
- 私钥使用完毕后立刻调用
os.remove()删除文件,不要等待函数执行结束自动清理 - 不要在函数全局初始化阶段写入私钥,仅在需要建立SSH连接前临时写入,用完即删
- 写入文件时显式指定权限:
os.chmod("/tmp/你的私钥文件名", 0o600)
内容的提问来源于stack exchange,提问作者rooni
相关产品推荐
相关产品推荐

