為您的應用程式設定 AWS SAM 程式碼簽章 - AWS Serverless Application Model

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

為您的應用程式設定 AWS SAM 程式碼簽章

若要確保只部署受信任的程式碼,您可以使用 AWS SAM 來啟用無伺服器應用程式的程式碼簽章。簽署您的程式碼有助於確保程式碼自簽署後未遭到變更,而且只有來自受信任發行者的已簽署程式碼套件才會在 Lambda 函數中執行 這有助於讓組織免於在其部署管線中建置閘道管理員元件的負擔。

如需程式碼簽章的詳細資訊,請參AWS Lambda 開發人員指南中的設定 Lambda 函數的程式碼簽章

您必須先使用 AWS Signer 建立簽署設定檔,才能為無伺服器應用程式設定程式碼簽章。您可以使用此簽署設定檔執行下列工作:

  1. 建立程式碼簽章配置 — 宣告AWS::Lambda::CodeSigningConfig資源以指定受信任的發行者的簽署設定檔,並設定驗證檢查的原則動作。您可以在與無伺服器函數相同的 AWS SAM 範本、不同的範本或 AWS SAM 範本中宣告此物件 AWS CloudFormation 。然後,透過使用資源的 Amazon 資源名稱 (ARN) 指定函數的CodeSigningConfigArn屬性,以啟用無伺服器函數的程式碼簽章。AWS::Lambda::CodeSigningConfig

  2. 簽署程式碼 — 使用sam packagesam deploy指令搭配選--signing-profiles項。

注意

若要使用sam packagesam deploy命令成功簽署程式碼,必須為您搭配這些命令使用的 Amazon S3 儲存貯體啟用版本控制。如果您使用的是為您 AWS SAM 建立的 Amazon S3 儲存貯體,則會自動啟用版本控制。如需有關 Amazon S3 儲存貯體版本控制的詳細資訊,以及在您提供的 Amazon S3 儲存貯體上啟用版本控制的指示,請參閱 Amazon 簡單儲存服務使用者指南中的在 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-bucket test-bucket --output-template-file packaged.yaml

在打包應用程序時,簽名函數代碼和函數所依賴的層:

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

簽署您的函數代碼和層,然後執行部署:

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

若要使用sam packagesam deploy命令成功簽署程式碼,必須為您搭配這些命令使用的 Amazon S3 儲存貯體啟用版本控制。如果您使用的是為您 AWS SAM 建立的 Amazon S3 儲存貯體,則會自動啟用版本控制。如需有關 Amazon S3 儲存貯體版本控制的詳細資訊,以及在您提供的 Amazon S3 儲存貯體上啟用版本控制的指示,請參閱 Amazon 簡單儲存服務使用者指南中的在 Amazon S3 儲存貯體中使用版本控制。

提供簽署設定檔 sam deploy --guided

當您使用已設定程式碼簽章的無伺服器應用程式執行sam deploy --guided命令時, AWS SAM 會提示您提供用於程式碼簽章的簽署設定檔。若要取得有關sam deploy --guided提示的更多資訊,請參閱指 AWS SAMCLI令參考sam deploy中的。