You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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自带的旧版本,具体步骤如下:

  1. 本地构建部署包

    • 创建一个空目录,比如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相关文件夹,不要包含外层目录)
  2. 更新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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 23:11:05