本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
為您的應用程式設定 AWS SAM 程式碼簽章
若要確保只部署受信任的程式碼,您可以使用 AWS SAM 來啟用無伺服器應用程式的程式碼簽章。簽署您的程式碼有助於確保程式碼自簽署後未遭到變更,而且只有來自受信任發行者的已簽署程式碼套件才會在 Lambda 函數中執行 這有助於讓組織免於在其部署管線中建置閘道管理員元件的負擔。
如需程式碼簽章的詳細資訊,請參閱AWS Lambda 開發人員指南中的設定 Lambda 函數的程式碼簽章。
您必須先使用 AWS Signer 建立簽署設定檔,才能為無伺服器應用程式設定程式碼簽章。您可以使用此簽署設定檔執行下列工作:
-
建立程式碼簽章配置 — 宣告
AWS::Lambda::CodeSigningConfig
資源以指定受信任的發行者的簽署設定檔,並設定驗證檢查的原則動作。您可以在與無伺服器函數相同的 AWS SAM 範本、不同的範本或 AWS SAM 範本中宣告此物件 AWS CloudFormation 。然後,透過使用資源的 Amazon 資源名稱 (ARN) 指定函數的CodeSigningConfigArn
屬性,以啟用無伺服器函數的程式碼簽章。AWS::Lambda::CodeSigningConfig
-
簽署程式碼 — 使用
sam package
或sam deploy
指令搭配選--signing-profiles
項。
注意
若要使用sam package
或sam
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-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 儲存貯體啟用版本控制。如果您使用的是為您 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中的。