课题研究 云安全与容器安全 子课题04 · 第06页 / 共8页
04子课题 · Serverless与函数计算安全

Serverless与函数计算安全第06页:供应链与依赖安全

函数的单体依赖量虽小,但制品形态多样、部署频率极高,供应链的"单位风险密度"反而更高。本页将函数供应链拆解为源代码、第三方依赖、打包制品、IaC与部署、发布与签名、事件源绑定六环节,逐一给出控制点:依赖侧以lockfile信任根、私有仓库(CodeArtifact类)与扫描门禁防投毒;制品侧覆盖zip构建白名单、Layer不可变版本与第三方Layer风险、镜像函数digest固定与cosign验证;部署侧以OIDC联邦消灭长期AK、checkov/tfsec扫描模板、漂移检测纳管事件源映射;发布侧以AWS Signer代码签名与SBOM收束,并以Log4Shell实证"托管运行时修复≠自带依赖安全"的两层责任划分。

Serverless供应链SBOMSLSA代码签名AWS SignerLayer容器镜像函数OIDCcheckovcosignLog4Shell研究状态:研究中
所属专题互联网基础设施安全 › 云安全与容器安全
目标受众DevSecOps团队、供应链安全工程师、平台工程与应用开发者
本节要点六环节控制点 / 依赖投毒防御 / 三类制品安全 / 管道OIDC / 代码签名与SBOM

01 · 函数供应链全景

OWASP Serverless Top 10将"不安全的第三方依赖"(SAS-06)与"密钥存储不当"(SAS-07)均归入代码与依赖域。函数的单体依赖量虽小于传统应用,但函数数量庞大、制品形态多样(代码包、Layer、容器镜像)、部署频率极高,供应链的"单位风险密度"反而更高。函数供应链应按下述六环节逐一建立控制点:

环节典型风险控制点
源代码密钥硬编码、危险函数、不安全反序列化代码评审清单;Semgrep类静态规则;git-secrets/gitleaks提交扫描
第三方依赖存在漏洞的组件、恶意包投毒、依赖混淆lockfile强制提交;私有仓库(如AWS CodeArtifact);依赖扫描门禁
打包制品zip包含.dev凭证与测试数据;Layer来源不可信;镜像基础层漏洞构建清单白名单;Layer仅可信来源;镜像固定digest+扫描
IaC与部署模板硬编码密钥、默认角色过宽、环境漂移、长期AKcheckov/tfsec扫描;OIDC联邦部署;策略即代码门禁
发布与签名未签名制品被篡改、未授权部署AWS Signer代码签名(官方支持);发布审批与环境隔离
事件源绑定触发器在管道外被手工增改(持久化通道)事件源映射纳入IaC与变更审计;漂移检测
函数供应链六环节控制点
与主课题子课题03的SBOM/SLSA方法论一一对应,本节聚焦函数制品形态的落地差异
说明:各环节工具链均为公开可查的开源或云厂商官方产品,详见参考来源。

02 · 依赖与包治理

  • lockfile是信任根:npm/package-lock.json、pip/requirements.txt(带哈希)、go.sum等必须提交入库;CI以lockfile为准安装,杜绝构建时浮动解析。依赖混淆与仿冒包的主要入口正是"构建时按名取最新版本"。
  • 私有仓库隔离:AWS CodeArtifact、Azure Artifacts、私有npm/PyPI源将公网包代理与内部包命名空间隔离;内部包以作用域(scope)前缀独占,防止攻击者注册同名公网包。
  • 扫描门禁:Dependabot/npm audit(JS)、pip-audit/safety(Python)、GitHub Advisory/OSV情报源比对;镜像与文件系统层面可用Trivy/Grype兜底。
  • 真实投毒事件的警示:event-stream(2018年,比特币钱包相关包投毒)、ua-parser-js(2021年,窃取凭据与加密货币)、colors/faker维护者事件(2022年)均波及Node函数常见依赖——函数场景无人工运维环节,投毒包的执行几乎无人目击,门禁与私有源不可省略。

03 · 打包制品安全:zip、Layer与镜像函数

3.1 代码包(zip)基线

  • 构建清单白名单:仅打包运行时所需文件,排除.env、测试夹具、本地密钥与CI临时文件;构建后列出包内清单并比对预期。
  • 制品可追溯:构建号、代码commit哈希、依赖锁版本写入制品元数据;发布记录保留180天以上。

3.2 Layer(层)专项

  • Layer版本发布后不可变(AWS官方文档),这为回滚与审计提供了天然锚点——所有Layer变更以新版本发布,禁止就地修改。
  • 第三方Layer风险:Layer代码在函数执行权限下运行任意逻辑;仅使用组织自建或官方来源Layer;引入新Layer须经代码级审查。

3.3 容器镜像函数(2020年12月起支持)

  • 基础镜像限定官方镜像或经内部评审的等效镜像(Lambda对镜像函数的基础镜像有官方兼容性要求,见官方文档);以digest固定版本,禁用latest类浮动标签。
  • 镜像入仓后触发扫描(ECR增强扫描/Inspector),高危漏洞未修复不得发布;签名验证(cosign/sigstore)嵌入CI,验证失败阻断部署(Lambda无运行时准入钩子,验证责任在流水线)。
  • 镜像函数把容器供应链问题完整引入函数域——主课题子课题03的SBOM/SLSA/sigstore方法论直接适用,不再重复展开。

04 · IaC与部署管道安全

主流函数以基础设施即代码部署:AWS SAM、Serverless Framework、Terraform、Pulumi,国内阿里云Serverless Devs、腾讯云SCF CLI。IaC把"配置错误"变成了"可批量复制配置错误",其安全要求:

控制项要求工具/依据
模板静态扫描每次合并前扫描公开面、宽权限、未加密资源、明文密钥checkov、tfsec(开源,规则覆盖AWS/Azure/GCP)
部署身份CI以OIDC联邦短期凭证部署,禁止长期AK入库GitHub Actions OIDC→AssumeRoleWithWebIdentity(官方文档)
分支与环境隔离分支保护+CODEOWNERS;dev/stg/prod分账号或分角色部署,生产部署需审批GitHub分支保护;AWS Organizations多账户
漂移治理控制台手工变更与IaC状态定期比对;事件源映射纳管Terraform plan漂移检测;AWS Config规则
Git历史治理密钥提交即视为泄露:吊销+轮换+历史清理git-secrets/gitleaks提交拦截;GitHub secret scanning推送保护

05 · 代码签名、SBOM与Log4Shell案例

5.1 函数代码签名

AWS Lambda支持代码签名(AWS Signer,官方功能):为函数配置签名配置文件后,平台在发布(PublishVersion/部署)时验证部署包签名,未签名或签名者不被信任的版本将被拒绝。这把"谁允许往生产函数写代码"从账户级细化为签名者级——配合OIDC部署身份,可构成"CI签名→平台验签"的完整信任链。注意:代码签名验证的是部署时刻的完整性,运行时依赖漏洞仍需扫描兜底。

5.2 SBOM对函数依然必要

函数依赖少而分散,恰是SBOM易落地场景:构建时以Syft生成CycloneDX/SPDX格式清单,归档至制品库;应急场景(如Log4Shell)按SBOM分钟级定位受影响函数。SBOM格式与消费方法继承主课题子课题03(SPDX为ISO/IEC 5962:2021、CycloneDX为OWASP项目)。

5.3 函数制品SBOM最小字段集(课题建议)

字段说明
组件名与版本精确到semver(含Layer与镜像基础层组件),版本号不得含浮动范围符
来源与哈希制品来源仓库地址与commit哈希;包级哈希(如npm的integrity)用于比对复现
依赖层级直接依赖与传递依赖分层标注——投毒与漏洞定位均依赖层级信息
构建环境构建镜像digest与CI运行ID,支撑"同代码同产物"复现验证
许可证逐组件许可证标识,满足合规审计与商用准入检查
时间戳与签名SBOM生成时间与生成工具(Syft等)版本;SBOM本身随制品签名一并归档

5.4 Log4Shell(CVE-2021-44228)的两层责任实证

层级处置主体依据
托管Java运行时AWS完成修复并向存量函数热修补(官方博客,2021年12月)平台责任面
函数打包自带依赖(fat-jar内log4j-core)客户自行升级依赖并重新部署——官方明确该层责任在客户客户责任面(本课题范围)

供应链治理的本质判断:函数越小,依赖越隐含(打包进zip/jar后不可见)。没有SBOM与锁版本的组织,在Log4Shell级事件中只能全量人工排查——这正是供应链控制点(第01节表)必须逐环节落实的根本原因。

本节参考来源(第6页)

以下均为真实可查的权威来源,用于支撑本页事实性表述。

[1]

OWASP Serverless Top 10(SAS-06第三方依赖、SAS-07密钥存储):owasp.org/www-project-serverless-top-ten。

[2]

GitHub Docs:在AWS中配置OpenID Connect(CI/CD联邦凭证):Configuring OpenID Connect in AWS。

[3]

AWS Lambda官方文档:Layer(版本不可变性与使用约束)、容器镜像函数:Lambda layers;Creating Lambda container images。

[4]

AWS官方文档:Lambda代码签名(AWS Signer):Configuring code signing。

[5]

AWS CodeArtifact:aws.amazon.com/codeartifact;GitHub secret scanning:About secret scanning。

[7]

AWS Security Blog:Log4Shell期间Lambda函数的处置说明(托管运行时修复与热修补层,2021年12月):AWS Security Blog。

[8]

NVD官方条目 CVE-2021-44228:nvd.nist.gov/vuln/detail/CVE-2021-44228。