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 más difundidas para gestionar infraestructura.
A continuación 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
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"
}
}
Tener configurado AWS CLI
Tener configurada 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
:Agregamos un nuevo
resource
definiendo el tipo de plataforma, las opciones disponibles hasta hoy son:AWSIoTDeviceManagement-SHA256-ECDSA AWSLambda-SHA384-ECDSA AmazonFreeRTOS-TI-CC3220SF AmazonFreeRTOS-Default
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" }
Configurar el
signing_job
:Para definir el
signig job
necesitamos el origen delbucket
y el objetos3
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 }
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" } }
Agregar al
resource
de lambda la configuración delsigner
// 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 // ... }
Para verificar que el código ha sido firmado podemos revisar la consola, no nos permitirá acceder al código independiente si el tamaño del
.zip
lo permite o no. Aparecer un mensaje indicando que este código no puede ser editado de manera directa.
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