Configurar AWS Signer en lambda con terraform

olcortesb

olcortesb

Posted on March 18, 2024

Configurar AWS Signer en lambda con terraform

Son amplias las funcionalidades que ofrece AWS para mantener nuestro código de manera segura y protegida, AWS signer es un servicio que permite firmar el código de algunos servicios de AWS entre los que se encuentra AWS Lambda.

Existe una amplia variedad de herramientas de infraestructura como código (IaC) para gestionar nuestra infraestructura, terraform es una de las herramientas ms difundidas para gestionar infraestructura.

A continuacin veremos como configurar AWS signer con terraform para firmar el código de una lambda y veremos su funcionamiento asegurando nuestro código.

Repositorio:

Todo el código está en el siguiente repositorio que pueden descargar y seguir para desplegar la POC en su entorno de prueba:

https://github.com/olcortesb/terraform-lambda-signer/tree/main

Configurar terraform:

La versión de terraform que utilizaremos es la 1.5.5

terrafom --version
# is 1.7.5. You can update by downloading from 
# https://www.terraform.io/downloads.html
Enter fullscreen mode Exit fullscreen mode

Configuramos el bucket de s3 que hemos creado para esta prueba, en el archivo preferences.tf el parámetro backend.bucket

 // file terraform-lambda-signer/preferences.tf
 terraform {
    required_version = ">=1.5.0"
    required_providers {
        aws = {
        source  = "hashicorp/aws"
        version = ">= 4.9"
        }
    }
    backend "s3" {
        key    = "terraform.tfstate"
        bucket = "terraform-lambda-signer" // change the name of bucket
        region = "us-east-1"
        }
  }
Enter fullscreen mode Exit fullscreen mode

Configurar AWS CLI

Necesitamos tener configurada una cuenta de AWS, aquí un pequeño gist de como se configura Link

Configurando AWS signer

Para configurar AWS signer necesitamos

Definir el signing_profile:

 AWSIoTDeviceManagement-SHA256-ECDSA
 AWSLambda-SHA384-ECDSA
 AmazonFreeRTOS-TI-CC3220SF
 AmazonFreeRTOS-Default
Enter fullscreen mode Exit fullscreen mode

Elegimos la que corresponde a Lambda y creamos el recurso:

 // File lambda.tf
 resource "aws_signer_signing_profile" "tfsigner" {
   name_prefix = "tfsigner"
   platform_id = "AWSLambda-SHA384-ECDSA"
 }
Enter fullscreen mode Exit fullscreen mode

Configurar el signing_job:

Para definir el signig job necesitamos el origen del bucket y el objeto s3 y agregarle un destino donde tendremos el código firmado.

 // File lambda.tf
 resource "aws_signer_signing_job" "this" {
   profile_name = aws_signer_signing_profile.tfsigner.name

   source {
     s3 {
       bucket  = aws_s3_bucket.lambda_code_bucket.id
       key     = aws_s3_object.lambda_code.id
       version = aws_s3_object.lambda_code.version_id
     }
   }

   destination {
     s3 {
       bucket = aws_s3_bucket.lambda_code_bucket.id
       prefix = "signed/"
     }
   }

   ignore_signing_job_failure = true
 }
Enter fullscreen mode Exit fullscreen mode

Definir la configuración del signer para Lambda:

 // File lambda.tf
 resource "aws_lambda_code_signing_config" "tfsigner_code" {
   allowed_publishers {
     signing_profile_version_arns = [aws_signer_signing_profile.tfsigner.version_arn]
   }
   policies {
     untrusted_artifact_on_deployment = "Enforce"
   }
 }
Enter fullscreen mode Exit fullscreen mode

Agregar al resource de lambda la configuración del signer

 // file lambda.tf
 // Lambda
 resource "aws_lambda_function" "lambda" {
     // ...
     // Signer
     code_signing_config_arn = aws_lambda_code_signing_config.tfsigner_code.arn
     // S3 for signer configurations
     s3_bucket = aws_signer_signing_job.this.signed_object[0].s3[0].bucket
     s3_key    = aws_signer_signing_job.this.signed_object[0].s3[0].key
     // ...
 }
Enter fullscreen mode Exit fullscreen mode

Conclusiones

Con AWS signer tenemos la posibilidad de garantizar la integridad del código de nuestra lambda, teniendo un lugar único donde definir el entorno de firma como sus roles y propiedades que no abordamos en esta POC, pero que se pueden configurar.

El código queda completamente trazado y la integridad del mismo permite tener un control sobre los cambios que se realizan sobre l.

La configuración desde terraform es simple y puede automatizarse de manera eficiente para los distintos entornos de desarrollo que tengamos

Respecto al coste, AWS Signer no tiene cargo adicionar como se puede revisar en la documentación oficial Link

Referencias

💖 💪 🙅 🚩
olcortesb
olcortesb

Posted on March 18, 2024

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related