如何在Python 3.8 Lambda中更新Protobuf修复安全漏洞?
修复Lambda中protobuf版本过低的高危漏洞
问题根源
你的Lambda函数使用的Python 3.8 runtime自带了protobuf库(版本4.21.2),虽然你的部署包只有index.py,但Lambda底层或代码间接依赖的组件(比如AWS SDK、Datadog相关调用)会调用这个自带的protobuf,导致Security Hub检测到漏洞。升级Python到3.9没用,是因为该版本的Lambda runtime自带的protobuf版本仍未达到4.21.6的要求。
解决方案:自定义打包依赖覆盖默认版本
你需要将指定版本的protobuf打包进部署包,覆盖Lambda runtime自带的旧版本,具体步骤如下:
本地构建部署包
- 创建一个空目录,比如
lambda-deploy - 切换到该目录,创建并激活Python 3.8虚拟环境:
python3.8 -m venv venv source venv/bin/activate # Linux/macOS # Windows 下执行:venv\Scripts\activate - 安装指定版本的protobuf:
pip install protobuf==4.21.6 -t . - 将你的
index.py复制到当前目录 - 压缩目录内所有文件(注意:压缩包根目录要直接包含
index.py和protobuf相关文件夹,不要包含外层目录)
- 创建一个空目录,比如
更新CloudFormation模板
- 将新的压缩包上传到S3存储桶
- 修改CloudFormation中Lambda函数的
Code属性,更新S3Bucket和S3Key指向新的压缩包 - 部署更新后的CloudFormation栈
可选方案:使用Lambda层复用依赖
如果有多个Lambda函数需要修复该漏洞,推荐用Lambda层打包protobuf:
- 创建层目录结构:
mkdir -p lambda-protobuf-layer/python/lib/python3.8/site-packages cd lambda-protobuf-layer/python/lib/python3.8/site-packages - 安装protobuf到该目录:
pip install protobuf==4.21.6 -t . - 压缩
python目录为protobuf-layer.zip - 在CloudFormation中添加
AWS::Lambda::LayerVersion资源,指向该压缩包 - 在Lambda函数的
Layers属性中引用该层的ARN
验证修复
部署完成后,可在Lambda函数中添加临时代码验证版本:
import protobuf print(f"Protobuf version: {protobuf.__version__}")
执行测试后查看日志,确认版本为4.21.6即可。
内容的提问来源于stack exchange,提问作者Ala
相关产品推荐
相关产品推荐

