本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
为Amazon SAM应用程序配置代码签名
您可以使用Amazon SAM来启用无服务器应用程序的代码签名,以帮助确保仅部署可信代码。有关代码签名功能的更多信息,请参阅Amazon Lambda开发者指南中的为 Lambda 函数配置代码签名。
为无服务器应用程序配置代码签名之前,必须使用Amazon Signer 创建签名配置文件。您可以使用此签名配置文件执行以下任务:
-
创建代码签名配置-声明
AWS::Lambda::CodeSigningConfig
资源以指定可信发布者的签名配置文件并设置验证检查的策略操作。您可以在与您的无服务器函数相同的Amazon SAM模板中、不同的Amazon SAM模板中或在模板中声明此对象。Amazon CloudFormation然后,您可以使用资源的亚马逊资源名称 (ARN) 指定函数的CodeSigningConfigArn
属性,为无服务器函数启用代码签名。AWS::Lambda::CodeSigningConfig
-
对@@ 代码进行签名-使用带
--signing-profiles
选项的sam package
或sam deploy
命令。
注意
要使用sam package
或sam
deploy
命令成功签署您的代码,必须为使用这些命令的 Amazon S3 存储桶启用版本控制。如果您使用的是为您Amazon SAM创建的 Amazon S3 存储桶,则会自动启用版本控制。有关 Amazon S3 存储桶版本控制的更多信息以及在您提供的 Amazon S3 存储桶上启用版本控制的说明,请参阅《亚马逊简单存储服务用户指南》中的 Amazon S3 存储桶中使用版本控制。
当您部署无服务器应用程序时,Lambda 会对您启用代码签名的所有函数执行验证检查。Lambda 还会对这些函数所依赖的任何层执行验证检查。有关 Lambda 验证检查的更多信息,请参阅Amazon Lambda开发者指南中的签名验证。
示例
创建签名配置文件
要创建签名配置文件,运行以下命令:
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" }
该profileVersionArn
字段包含创建代码签名配置时要使用的 ARN。
创建代码签名配置并为函数启用代码签名
以下示例Amazon 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"
为你的代码签名
您可以在打包或部署应用程序时对代码进行签名。使用sam package
或sam deploy
命令指定--signing-profiles
选项,如以下示例命令所示。
打包应用程序时对函数代码进行签名:
sam package --signing-profiles
HelloWorld=MySigningProfile
--s3-buckettest-bucket
--output-template-file packaged.yaml
在打包应用程序时,对函数代码和函数所依赖的层进行签名:
sam package --signing-profiles
HelloWorld=MySigningProfile MyLayer=MySigningProfile
--s3-buckettest-bucket
--output-template-file packaged.yaml
对函数代码和层进行签名,然后执行部署:
sam deploy --signing-profiles
HelloWorld=MySigningProfile MyLayer=MySigningProfile
--s3-buckettest-bucket
--template-file packaged.yaml --stack-name --region us-east-1 --capabilities CAPABILITY_IAM
注意
要使用sam package
或sam
deploy
命令成功签署您的代码,必须为使用这些命令的 Amazon S3 存储桶启用版本控制。如果您使用的是为您Amazon SAM创建的 Amazon S3 存储桶,则会自动启用版本控制。有关 Amazon S3 存储桶版本控制的更多信息以及在您提供的 Amazon S3 存储桶上启用版本控制的说明,请参阅《亚马逊简单存储服务用户指南》中的 Amazon S3 存储桶中使用版本控制。
使用以下方式提供签名配置文件sam deploy --guided
当您使用配置了代码签名的无服务器应用程序运行sam deploy --guided
命令时,Amazon SAM会提示您提供用于代码签名的签名配置文件。有关sam deploy --guided
提示的更多信息,请参阅Amazon SAM CLI 命令参考sam deploy中的。