亚马逊AWS官方博客

新增功能 – 适用于 AWS Lambda 的信任和完整性控件:代码签名

代码签名是一种行业标准技术,用于确认代码未被修改且来自受信任的发布者。在 AWS Lambda 函数内部运行的代码在高度强化的系统上执行,并以安全的方式运行。但是,函数代码在 AWS 外部运行的部署管道中移动时,很容易发生更改。

现在,我们发布了适用于 AWS Lambda 的代码签名功能。它是一个信任和完整性控件,可帮助管理员强制执行以下操作:仅受信任发布者发布的已签名代码包可在其 Lambda 函数中运行,且代码在签名后未被更改。

适用于 Lambda 的代码签名功能提供一流的机制,可强制要求仅在 Lambda 中部署受信任的代码。这让组织摆脱了在部署管道中构建网守组件的负担。适用于 AWS Lambda 的代码签名功能采用 AWS Signer,后者是 AWS 提供的完全托管的代码签名服务。管理员创建签名配置文件(AWS Signer 中用于创建签名的资源),并使用 AWS Identity and Access Management (IAM) 向开发人员授予访问签名配置文件的权限。在 Lambda 中,管理员使用名为代码签名配置 (CSC) 的新资源来指定允许的签名配置文件。CSC 可帮助组织实现管理员和开发人员之间的职责分离。管理员可以使用 CSC 为函数设置代码签名策略,开发人员则可以将代码部署到函数中。

如何创建签名配置文件
您可以使用 AWS Signer 控制台创建新的签名配置文件。签名配置文件可以代表一组受信任的发布者,类似于使用数字签名证书。

可单击创建签名配置文件来创建签名配置文件,用于创建已签名的代码包。

您可以为签名配置文件生成的签名指定签名有效期,时间介于 1 天到 135 个月之间。

如何创建代码签名配置 (CSC)
您可以通过创建名为代码签名配置的新资源并将其附加到函数,来使用 AWS Lambda 控制台、命令行界面 (CLI) 或 API 将函数配置为使用代码签名。您可以在其他资源菜单下找到代码签名配置

您可以单击创建配置,来定义允许对此配置的代码构件进行签名的签名配置文件,并设置签名验证策略。要添加允许的签名配置文件,您可以从下拉菜单中进行选择,下拉菜单会显示您的 AWS 账户中的所有签名配置文件;也可以通过指定版本 ARN 添加其他账户中的签名配置文件。

此外,您还可以将签名验证策略设置为“警告”或“强制执行”。如果设置为“警告”,Lambda 会在签名检查失败时记录 Cloudwatch 指标,但会接受部署。如果设置为“强制”,Lambda 会在签名检查失败时拒绝部署。如果签名的签名配置文件与 CSC 中允许的某一个签名配置文件不匹配、签名已过期或签名已撤销,则签名检查会失败。如果代码包在签名以后遭到篡改或更改,则无论签名验证策略如何,都会拒绝部署。

您也可以使用新的 Lambda API CreateCodeSigningConfig 来创建 CSC。您可以看到以下 JSON 请求语法。

{
     "CodeSigningConfigId": string,
     "CodeSigningConfigArn": string,
     "Description": string,
     "AllowedPublishers": {
           "SigningProfileVersionArns": [string]
      },
     "CodeSigningPolicies": {
     "UntrustedArtifactOnDeployment": string,   // WARN OR ENFORCE
    },
     "LastModified”: string
}

为 Lambda 函数启用代码签名
要为 Lambda 函数启用代码签名功能,您可以选择一个函数,然后单击代码签名配置部分中的编辑

选择一个可用的 CSC,然后单击保存按钮。

将函数配置为使用代码签名后,您需要上传已签名的 .zip 文件或由 AWS Signer 中的签名作业生成的已签名 .zip 文件的 Amazon S3 URL。

如何创建已签名代码包
选择一个允许的签名配置文件,然后指定要签名的代码包 ZIP 文件的 S3 位置。此外,还需指定已签名代码包的目标上传路径。

签名作业是一个异步过程,它为代码包生成签名并将已签名代码包放到指定的目标路径中。

签名作业成功后,您就可以在指定的 S3 存储桶中找到已签名的 ZIP 包了。

返回 Lambda 控制台,您现在可以将已签名代码包发布到 Lambda 函数了。Lambda 将执行签名检查,验证代码在签名后未被更改,以及代码是由允许的一个签名配置文件进行签名的。

您还可以通过将 CSC 附加到函数,使用 CreateFunctionPutFunctionCodeSigningConfig API 来为函数启用代码签名。

开发人员还可以使用 SAM CLI 对代码包进行签名。他们通过在打包或部署阶段指定签名配置文件来完成此操作。在将代码部署到 Lambda 之前,SAM CLI 会自动启动签名工作流程。

AWS CloudFormationTerraform 等基础设施即代码工具也支持代码签名。除了声明和创建代码签名资源外,Terraform 也允许开发人员对代码进行签名。

现已推出!
适用于 AWS Lambda 的代码签名功能已在除以下区域的所有商业区域推出:AWS 中国区域、AWS GovCloud(美国)区域和亚太地区(大阪)区域。使用代码签名不会产生任何额外的费用,但客户需按标准价格为 Lambda 函数付费。

要详细了解适用于 AWS Lambda 的代码签名功能和 AWS Signer,请访问 Lambda 开发人员指南。此外,您还可以通过 AWS Lambda 论坛或您常用的 AWS Support 联系方式向我们发送反馈。

Channy