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
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"
}
}
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
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 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
}
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 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
// ...
}
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
Top comments (0)