Configure a assinatura de código para seu AWS SAM aplicativo - AWS Serverless Application Model

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Configure a assinatura de código para seu AWS SAM aplicativo

Para garantir que somente código confiável seja implantado, você pode usar AWS SAM para habilitar a assinatura de código com seus aplicativos sem servidor. Assinar seu código ajuda a garantir que o código não tenha sido alterado desde a assinatura e que somente pacotes de código assinados de editores confiáveis sejam executados em suas funções do Lambda. Isso ajuda a liberar as organizações da carga de criar componentes de gatekeeper em seus pipelines de implantação.

Para obter mais informações sobre assinatura de código, consulte Como configurar a assinatura de código para funções Lambda no Guia AWS Lambda do desenvolvedor.

Antes de configurar a assinatura de código para seu aplicativo sem servidor, você deve criar um perfil de assinatura usando o AWS Signer. Você usa esse perfil de assinatura para as seguintes tarefas:

  1. Criação de uma configuração de assinatura de código — Declare um AWS::Lambda::CodeSigningConfigrecurso para especificar os perfis de assinatura de editores confiáveis e definir a ação política para verificações de validação. Você pode declarar esse objeto no mesmo AWS SAM modelo da sua função sem servidor, em um AWS SAM modelo diferente ou em um modelo. AWS CloudFormation Em seguida, você habilita a assinatura de código para uma função sem servidor especificando a propriedade CodeSigningConfigArn da função com o nome de recurso da Amazon (ARN) de um recursoAWS::Lambda::CodeSigningConfig.

  2. Assinando seu código — Use o comando sam package ou sam deploy com a opção --signing-profiles.

nota

Para assinar com sucesso seu código com os comandos sam package ou sam deploy, o versionamento deve estar habilitado para o bucket do Amazon S3 que você usa com esses comandos. Se você estiver usando o Amazon S3 Bucket AWS SAM criado para você, o controle de versão será ativado automaticamente. Para obter mais informações sobre o versionamento de buckets do Amazon S3 e instruções para habilitar o versionamento em um bucket do Amazon S3 fornecido por você, consulte Uso do versionamento em buckets do Amazon S3 no Guia do usuário do Amazon Simple Storage Service.

Quando você implanta um aplicativo sem servidor, o Lambda executa verificações de validação em todas as funções para as quais você habilitou a assinatura de código. O Lambda também realiza verificações de validação em todas as camadas das quais essas funções dependem. Para obter mais informações sobre as verificações de validação do Lambda, consulte Validação de assinatura no Guia do AWS Lambda desenvolvedor.

Exemplo

Criar um perfil de assinatura

Para criar um perfil de assinatura, execute o seguinte comando:

aws signer put-signing-profile --platform-id "AWSLambda-SHA384-ECDSA" --profile-name MySigningProfile

Se o comando anterior é bem-sucedido, o ARN do perfil de assinatura é retornado. Por exemplo: .

{ "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" }

O profileVersionArn campo contém o ARN a ser usado ao criar a configuração de assinatura de código.

Criar uma configuração de assinatura de código e habilitar a assinatura de código para uma função

O AWS SAM modelo de exemplo a seguir declara um AWS::Lambda::CodeSigningConfigrecurso e permite a assinatura de código para uma função Lambda. Neste exemplo, há um perfil confiável e as implantações são rejeitadas se as verificações de assinatura falharem.

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"

Assinando seu código

Você pode assinar seu código ao empacotar ou implantar seu aplicativo. Especifique a opção --signing-profiles com o comando sam package ou sam deploy, conforme mostrado nos seguintes exemplos de comandos.

Assinando seu código de função ao empacotar seu aplicativo:

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

Assinar seu código de função e uma camada da qual sua função depende ao empacotar seu aplicativo:

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

Assinando seu código de função e uma camada e, em seguida, executando uma implantação:

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
nota

Para assinar com sucesso seu código com os comandos sam package ou sam deploy, o versionamento deve estar habilitado para o bucket do Amazon S3 que você usa com esses comandos. Se você estiver usando o Amazon S3 Bucket AWS SAM criado para você, o controle de versão será ativado automaticamente. Para obter mais informações sobre o versionamento de buckets do Amazon S3 e instruções para habilitar o versionamento em um bucket do Amazon S3 fornecido por você, consulte Uso do versionamento em buckets do Amazon S3 no Guia do usuário do Amazon Simple Storage Service.

Fornecendo perfis de assinatura com sam deploy --guided

Quando você executa o sam deploy --guided comando com um aplicativo sem servidor configurado com assinatura de código, AWS SAM solicita que você forneça o perfil de assinatura a ser usado na assinatura de código. Para obter mais informações sobre prompts sam deploy --guided, consulte sam deploy na Referência de comandos de AWS SAMCLI.