本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
为您的 AWS SAM 应用程序设置代码签名
为确保仅部署可信代码,您可以使用 AWS SAM 对无服务器应用程序启用代码签名。对代码进行签名有助于确保代码在签名后未被更改,并且只有来自可信发布者的签名代码包才能在您的 Lambda 函数中运行。这有助于组织摆脱在部署管线中构建网关守卫组件的负担。
有关代码签名的更多信息,请参阅《AWS Lambda 开发人员指南》中的配置 Lambda 函数的代码签名。
在为无服务器应用程序配置代码签名之前,必须使用 S AWS igner 创建签名配置文件。您可以将此签名配置文件用于以下任务:
-
创建代码签名配置 – 声明
AWS::Lambda::CodeSigningConfig
资源以指定可信发布者的签名配置文件并设置验证检查的策略操作。您可以在与无服务器函数相同的 AWS SAM 模板中声明此对象,也可以在不同的模板中声明此对象,也可以在 AWS SAM 模板中声明此对象 AWS CloudFormation 。然后,您可以使用资源的 Amazon 资源名称 (ARN) 指定该函数的CodeSigningConfigArn
属性,从而为无服务器函数启用代码签名。AWS::Lambda::CodeSigningConfig
-
签署代码 – 使用带
--signing-profiles
选项的sam package
或sam deploy
命令。
注意
要使用 sam package
或 sam
deploy
命令成功签署您的代码,必须为这些命令中使用的 Amazon S3 存储桶启用版本控制。如果您使用的是为您 AWS SAM 创建的 Amazon S3 存储桶,则会自动启用版本控制。有关 Amazon S3 存储桶版本控制的更多信息以及在您提供的 Amazon S3 存储桶上启用版本控制的说明,请参阅《Amazon Simple Storage Service 用户指南》中的在 Amazon S3 存储桶中使用版本控制。
部署无服务器应用程序时,Lambda 会对您启用代码签名的所有函数执行验证检查。Lambda 还会对这些函数所依赖的任何层执行验证检查。有关 Lambda 验证检查的更多信息,请参阅《AWS 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要使用的。
创建代码签名配置并为函数启用代码签名
以下示例 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"
签署代码
您可以在打包或部署应用程序时签署代码。使用 sam package
或 sam deploy
命令指定 --signing-profiles
选项,如以下示例命令所示。
在打包应用程序时对函数代码进行签名:
sam package --signing-profiles
HelloWorld=MySigningProfile
--s3-bucketamzn-s3-demo-bucket
--output-template-file packaged.yaml
在打包应用程序时,对函数代码和函数所依赖的层进行签名:
sam package --signing-profiles
HelloWorld=MySigningProfile MyLayer=MySigningProfile
--s3-bucketamzn-s3-demo-bucket
--output-template-file packaged.yaml
对函数代码和层进行签名,然后执行部署:
sam deploy --signing-profiles
HelloWorld=MySigningProfile MyLayer=MySigningProfile
--s3-bucketamzn-s3-demo-bucket
--template-file packaged.yaml --stack-name --region us-east-1 --capabilities CAPABILITY_IAM
注意
要使用 sam package
或 sam
deploy
命令成功签署您的代码,必须为这些命令中使用的 Amazon S3 存储桶启用版本控制。如果您使用的是为您 AWS SAM 创建的 Amazon S3 存储桶,则会自动启用版本控制。有关 Amazon S3 存储桶版本控制的更多信息以及在您提供的 Amazon S3 存储桶上启用版本控制的说明,请参阅《Amazon Simple Storage Service 用户指南》中的在 Amazon S3 存储桶中使用版本控制。
通过 sam deploy --guided
提供签名配置文件
当您使用配置了代码签名的无服务器应用程序运行该sam deploy --guided
命令时, AWS SAM 会提示您提供用于代码签名的签名配置文件。有关sam deploy --guided
提示的更多信息,请参阅sam deploy中的 AWS SAM CLI 命令参考。