为 AWS SAM 应用程序配置代码签名 - AWS Serverless Application Model
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

为 AWS SAM 应用程序配置代码签名

您可以使用 AWS SAM 启用无服务器应用程序的代码签名,以帮助确保仅部署受信任的代码。有关代码签名功能的更多信息,请参阅 中的Lambda为 函数配置代码签名。AWS Lambda Developer Guide

您必须先使用 AWS Signer 创建签名配置文件,然后才能为无服务器应用程序配置代码签名。您使用此签名配置文件执行以下任务:

  1. 创建代码签名配置 – 声明 AWS::Lambda::CodeSigningConfig 资源,以指定可信发布者的签名配置文件以及设置验证检查策略操作。您可以在与无服务器函数相同的 AWS SAM 模板中、在不同的 AWS SAM 模板中或在 AWS CloudFormation 模板中声明此对象。然后,您可以通过使用 CodeSigningConfigArn 资源的 Amazon 资源名称 (ARN) 指定 AWS::Lambda::CodeSigningConfig 属性,为无服务器 函数启用代码签名。

  2. 签署您的代码 – 将 sam packagesam deploy 命令与 --signing-profiles 选项结合使用。

当您部署无服务器应用程序时,Lambda 会对已启用代码签名的所有函数执行验证检查。Lambda 还会对这些函数依赖的任何层执行验证检查。有关 Lambda 的验证检查的更多信息,请参阅 https://docs.amazonaws.cn/lambda/latest/dg/configuration-codesigning.html#config-codesigning-valid 中的签名验证AWS Lambda Developer Guide。

Example

创建签名配置文件

要创建签名配置文件,请运行以下命令:

aws signer put-signing-profile --platform-id "AWSLambda-SHA384-ECDSA" --profile-name MySigningProfile

如果上一条命令成功,您将看到签名配置文件的 ARN 返回。例如:

{ "arn": "arn:aws:signer:us-east-1:111122223333:/signing-profiles/MySigningProfile", "profileVersion": "SAMPLEverx", "profileVersionArn": "arn:aws:signer:us-east-1:111122223333:/signing-profiles/MySigningProfile/SAMPLEverx" }

字段包含创建代码签名配置时要使用的 ARN。profileVersionArn

为 函数创建代码签名配置并启用代码签名

以下示例 AWS SAM 模板声明 AWS::Lambda::CodeSigningConfig 资源并为 函数启用代码签名。Lambda在此示例中,有一个可信配置文件;如果签名检查失败,则部署将被拒绝。

Resources: HelloWorld: Type: AWS::Serverless::Function Properties: CodeUri: hello_world/ Handler: app.lambda_handler Runtime: python3.7 CodeSigningConfigArn: !Ref MySignedFunctionCodeSigningConfig MySignedFunctionCodeSigningConfig: Type: AWS::Lambda::CodeSigningConfig Properties: Description: "Code Signing for MySignedLambdaFunction" AllowedPublishers: SigningProfileVersionArns: - MySigningProfile-profileVersionArn CodeSigningPolicies: UntrustedArtifactOnDeployment: "Enforce"

签署代码

您可以在打包或部署应用程序时对代码进行签名。使用 --signing-profilessam package 命令指定 sam deploy 选项,如以下示例命令所示。

在打包应用程序时对 函数代码进行签名:

sam package --signing-profile HelloWorld=MySigningProfile --s3-bucket test-bucket --output-template-file packaged.yaml

在打包应用程序时,对函数代码和函数所依赖的层进行签名:

sam package --signing-profile HelloWorld=MySigningProfile MyLayer=MySigningProfile --s3-bucket test-bucket --output-template-file packaged.yaml

对您的 函数代码和层签名,然后执行部署:

sam deploy --signing-profile HelloWorld=MySigningProfile MyLayer=MySigningProfile --s3-bucket test-bucket --template-file packaged.yaml --stack-name --region us-east-1 --capabilities CAPABILITY_IAM

使用 sam deploy --guided 提供签名配置文件

当您使用配置了代码签名的无服务器应用程序运行 sam deploy --guided 命令时,AWS SAM 会提示您提供签名配置文件以用于代码签名。有关 sam deploy --guided 提示的更多信息,请参阅 sam deploy CLI 命令参考中的 AWS SAM。