

# 使用代码签名通过 Lambda 验证代码完整性
<a name="configuration-codesigning"></a>

代码签名有助于确保只有可信代码部署到您的 Lambda 函数。使用 AWS Signer，您可以为您的函数创建数字签名的代码包。当您[向函数添加代码签名配置](configuration-codesigning-create.md)时，Lambda 会验证所有新代码部署是否由可信来源签名。由于代码签名验证检查在部署时运行，因此对函数执行没有影响。

**重要**  
代码签名配置仅阻止未签名代码的新部署。如果将代码签名配置添加到具有未签名代码的现有函数，则该代码将一直运行，直到您部署新的代码包。

当您为某个函数启用代码签名时，您添加到该函数的任何[层](chapter-layers.md)也必须由允许的签名配置文件进行签名。

使用 AWS Signer 或 AWS Lambda 代码签名不收取任何额外费用。

## 签名验证
<a name="config-codesigning-valid"></a>

将签名代码包部署到函数时，Lambda 会执行以下验证检查：

1. **完整性**：验证代码包自签名以来是否尚未修改。Lambda 将包的哈希值与签名的哈希值进行比较。

1. **过期**：验证代码包的签名是否尚未过期。

1. **不匹配**：验证代码包是否使用允许的签名配置文件进行签名

1. **撤销**：验证代码包的签名是否尚未撤销。

创建代码签名配置时，您可以使用 [UntrustedArtifactOnDeployment](https://docs.aws.amazon.com/lambda/latest/api/API_CodeSigningPolicies.html#lambda-Type-CodeSigningPolicies-UntrustedArtifactOnDeployment) 参数来指定在过期、不匹配或撤销检查失败时 Lambda 应如何响应。您可以选择以下操作之一：
+ `Warn`：这是默认设置。Lambda 允许部署代码包，但会发出警告。Lambda 发布新的 Amazon CloudWatch 指标 (`SignatureValidationErrors`)，并将警告存储在 CloudTrail 日志中。
+ `Enforce` Lambda 发出警告（与 `Warn` 操作相同）并阻止代码包的部署。

**Topics**
+ [签名验证](#config-codesigning-valid)
+ [为 Lambda 创建代码签名配置](configuration-codesigning-create.md)
+ [为 Lambda 代码签名配置 IAM 策略](config-codesigning-policies.md)
+ [在代码签名配置上使用标签](tags-csc.md)