本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
为 AWS SAM 应用程序配置代码签名
您可以使用 AWS SAM 启用无服务器应用程序的代码签名,以帮助确保仅部署受信任的代码。有关代码签名功能的更多信息,请参阅 中的Lambda为 函数配置代码签名。AWS Lambda Developer Guide
您必须先使用 AWS Signer 创建签名配置文件,然后才能为无服务器应用程序配置代码签名。您使用此签名配置文件执行以下任务:
-
创建代码签名配置 – 声明
AWS::Lambda::CodeSigningConfig
资源,以指定可信发布者的签名配置文件以及设置验证检查策略操作。您可以在与无服务器函数相同的 AWS SAM 模板中、在不同的 AWS SAM 模板中或在 AWS CloudFormation 模板中声明此对象。然后,您可以通过使用CodeSigningConfigArn
资源的 Amazon 资源名称 (ARN) 指定AWS::Lambda::CodeSigningConfig
属性,为无服务器 函数启用代码签名。 -
签署您的代码 – 将
sam package
或sam 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-profiles
或 sam package
命令指定 sam deploy
选项,如以下示例命令所示。
在打包应用程序时对 函数代码进行签名:
sam package --signing-profile
HelloWorld=MySigningProfile
--s3-buckettest-bucket
--output-template-file packaged.yaml
在打包应用程序时,对函数代码和函数所依赖的层进行签名:
sam package --signing-profile
HelloWorld=MySigningProfile MyLayer=MySigningProfile
--s3-buckettest-bucket
--output-template-file packaged.yaml
对您的 函数代码和层签名,然后执行部署:
sam deploy --signing-profile
HelloWorld=MySigningProfile MyLayer=MySigningProfile
--s3-buckettest-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。