使用代码签名通过 Lambda 验证代码完整性
AWS Lambda 代码签名有助于确保 Lambda 函数中只运行可信代码。为函数启用代码签名时,Lambda 将检查每次代码部署并验证代码包是否由可信来源签名。
注意
定义为容器映像的函数不支持代码签名。
要验证代码完整性,请使用 AWS Signer 为函数和层创建经数字签名的代码包。当用户尝试部署代码包时,Lambda 会在接受部署之前对代码包执行验证检查。由于代码签名验证检查在部署时运行,因此对函数执行的性能没有影响。
您还可以使用 AWS Signer 创建签名配置文件。您可以使用签名配置文件创建签名代码包。使用 AWS Identity and Access Management (IAM) 可以控制能够对代码包进行签名并创建签名配置文件的对象。有关更多信息,请参阅 AWS Signer 开发人员指南中的身份验证和访问控制。
Lambda 层采用与函数代码包相同的签名代码包格式。将层添加到启用代码签名的函数时,Lambda 会检查该层是否由允许的签名配置文件签名。如果为函数启用代码签名,则添加到函数的所有层还必须由一项允许的签名配置文件进行签名。
您可以配置代码签名以将更改记录到 AWS CloudTrail。成功和受阻的函数部署都将记录到 CloudTrail 并随附签名和验证检查的信息。
使用 AWS Signer 或 AWS Lambda 代码签名不收取任何额外费用。
签名验证
将签名代码包部署到函数时,Lambda 会执行以下验证检查:
-
完整性 – 验证代码包自签名以来是否尚未修改。Lambda 将包的哈希值与签名的哈希值进行比较。
-
过期 – 验证代码包的签名是否尚未过期。
-
不匹配 – 验证代码包是否使用 Lambda 函数允许的一项签名配置文件进行签名。如果签名不存在,则会导致不匹配。
-
撤销 – 验证代码包的签名是否尚未撤销。
在代码签名配置中定义的签名验证策略确定了在任意一项验证检查失败时,Lambda 应采取以下哪一项操作:
-
警告 – Lambda 允许部署代码包,但会发出警告。Lambda 会发布新的 Amazon CloudWatch 指标,并将警告存储在 CloudTrail 日志中。
-
强制执行 – Lambda 发出警告(与警告操作相同)并阻止代码包的部署。
您可以为过期、不匹配和撤销验证检查配置策略。请注意,您无法为完整性检查配置策略。如果完整性检查失败,Lambda 将阻止部署。
使用 Lambda API 配置代码签名
要使用 AWS CLI 或 AWS 开发工具包管理代码签名配置,请使用以下 API 操作:
要管理函数的代码签名配置,请使用以下 API 操作: