为 Amazon Lambda 配置代码签名
Amazon Lambda 代码签名有助于确保 Lambda 函数中只运行可信代码。为函数启用代码签名时,Lambda 将检查每次代码部署并验证代码包是否由可信来源签名。
注意
定义为容器映像的函数不支持代码签名。
要验证代码完整性,请使用 Amazon Signer 为函数和层创建经数字签名的代码包。当用户尝试部署代码包时,Lambda 会在接受部署之前对代码包执行验证检查。由于代码签名验证检查在部署时运行,因此对函数执行的性能没有影响。
您还可以使用 Amazon Signer 创建签名配置文件。您可以使用签名配置文件创建签名代码包。使用 Amazon Identity and Access Management (IAM) 可以控制能够对代码包进行签名并创建签名配置文件的对象。有关更多信息,请参阅 Amazon Signer 开发人员指南中的身份验证和访问控制。
要为函数启用代码签名,您需要创建代码签名配置并将其附加到函数。代码签名配置定义了允许的签名配置文件列表以及在任意一项验证检查失败时要采取的策略操作。
Lambda 层采用与函数代码包相同的签名代码包格式。将层添加到启用代码签名的函数时,Lambda 会检查该层是否由允许的签名配置文件签名。如果为函数启用代码签名,则添加到函数的所有层还必须由一项允许的签名配置文件进行签名。
使用 IAM 来控制能够创建代码签名配置的对象。通常,您只允许特定的管理用户具有此能力。此外,您可以设置 IAM 策略来强制开发人员只创建启用代码签名的函数。
您可以配置代码签名以将更改记录到 Amazon CloudTrail。成功和受阻的函数部署都将记录到 CloudTrail 并随附签名和验证检查的信息。
您可以使用 Lambda 控制台、Amazon Command Line Interface (Amazon CLI)、Amazon CloudFormation 和 Amazon Serverless Application Model (Amazon SAM) 为函数配置代码签名。
使用 Amazon Signer 或 Amazon Lambda 代码签名不收取任何额外费用。
签名验证
将签名代码包部署到函数时,Lambda 会执行以下验证检查:
-
完整性 – 验证代码包自签名以来是否尚未修改。Lambda 将包的哈希值与签名的哈希值进行比较。
-
过期 – 验证代码包的签名是否尚未过期。
-
不匹配 – 验证代码包是否使用 Lambda 函数允许的一项签名配置文件进行签名。如果签名不存在,则会导致不匹配。
-
撤销 – 验证代码包的签名是否尚未撤销。
在代码签名配置中定义的签名验证策略确定了在任意一项验证检查失败时,Lambda 应采取以下哪一项操作:
-
警告 – Lambda 允许部署代码包,但会发出警告。Lambda 会发布新的 Amazon CloudWatch 指标,并将警告存储在 CloudTrail 日志中。
-
强制执行 – Lambda 发出警告(与警告操作相同)并阻止代码包的部署。
您可以为过期、不匹配和撤销验证检查配置策略。请注意,您无法为完整性检查配置策略。如果完整性检查失败,Lambda 将阻止部署。
配置先决条件
为 Lambda 函数配置代码签名之前,请使用 Amazon Signer 执行以下操作:
-
创建一个或多个签名配置文件。
-
可以使用签名配置文件为函数创建签名代码包。
有关更多信息,请参阅 Amazon Signer 开发人员指南中的创建签名配置文件(控制台)。
创建代码签名配置
代码签名配置定义允许的签名配置文件列表和签名验证策略。
创建代码签名配置(控制台)
-
打开 Lambda 控制台的 Code signing configurations(代码签名配置)页面
。 -
选择 Create configuration(创建配置)。
-
对于 Description(描述),输入一个描述性的配置名称。
-
在 Signing profiles(签名配置文件)下,最多可以在配置中添加 20 个签名配置文件。
-
对于 Signing profile version ARN(签名配置文件版本 ARN),选择配置文件版本的 Amazon 资源名称 (ARN) 或输入 ARN。
-
要添加其他签名配置文件,请选择 Add signing profiles(添加签名配置文件)。
-
-
在 Signature validation policy(签名验证策略)下,选择 Warn(警告)或 Enforce(强制执行)。
-
选择 Create configuration(创建配置)。
更新代码签名配置
更新代码签名配置时,这些更改将会在未来的部署中影响附加代码签名配置的函数。
更新代码签名配置(控制台)
-
打开 Lambda 控制台的 Code signing configurations(代码签名配置)页面
。 -
选择要更新的代码签名配置,然后选择 Edit(编辑)。
-
对于 Description(描述),输入一个描述性的配置名称。
-
在 Signing profiles(签名配置文件)下,最多可以在配置中添加 20 个签名配置文件。
-
对于 Signing profile version ARN(签名配置文件版本 ARN),选择配置文件版本的 Amazon 资源名称 (ARN) 或输入 ARN。
-
要添加其他签名配置文件,请选择 Add signing profiles(添加签名配置文件)。
-
-
在 Signature validation policy(签名验证策略)下,选择 Warn(警告)或 Enforce(强制执行)。
-
选择 Save changes(保存更改)。
删除代码签名配置
只有在任何函数都不使用代码签名配置的情况下,才能删除该配置。
删除代码签名配置(控制台)
-
打开 Lambda 控制台的 Code signing configurations(代码签名配置)页面
。 -
选择要删除的代码签名配置,然后选择 Delete(删除)。
-
再次选择 Delete(删除)以确认。
为函数启用代码签名
要为函数启用代码签名,您需要将代码签名配置与函数关联。
将代码签名配置与函数关联(控制台)
打开 Lamba 控制台的 Functions
(函数)页面。 -
选择要启用代码签名的函数。
-
在 Code signing configuration(代码签名配置)下,选择 Edit(编辑)。
-
在 Edit code signing(编辑代码签名)中,为此函数选择代码签名配置。
-
选择 Save(保存)。
配置 IAM 策略
要授予用户访问代码签名 API 操作的权限,请将一个或多个策略声明附加到用户策略。有关用户策略的详细信息,请参阅Lambda 的基于身份的 IAM policy。
以下示例策略声明将授予创建、更新和检索代码签名配置的权限。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:CreateCodeSigningConfig", "lambda:UpdateCodeSigningConfig", "lambda:GetCodeSigningConfig" ], "Resource": "*" } ] }
管理员可以使用 CodeSigningConfigArn
条件键指定开发人员创建或更新函数时必须使用的代码签名配置。
以下示例策略声明将授予创建函数的权限。策略声明包括指定允许的代码签名配置的 lambda:CodeSigningConfigArn
条件。如果 CodeSigningConfigArn
参数缺失或与条件中的值不匹配,Lambda 会阻止任何 CreateFunction
API 请求。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowReferencingCodeSigningConfig", "Effect": "Allow", "Action": [ "lambda:CreateFunction", ], "Resource": "*", "Condition": { "StringEquals": { "lambda:CodeSigningConfigArn": “arn:aws:lambda:us-west-2:123456789012:code-signing-config:csc-0d4518bd353a0a7c6” } } } ] }
使用 Lambda API 配置代码签名
要使用 Amazon CLI 或 Amazon 开发工具包管理代码签名配置,请使用以下 API 操作:
要管理函数的代码签名配置,请使用以下 API 操作: