DEV Community

Eduardo Santos
Eduardo Santos

Posted on

Consumiendo Certificados de Secrets Manager en Ambientes Serverless

Alguna vez has tenido la necesidad de utilizar certificados dentro de tu Lambda para poder autenticar peticiones que realizas a servidores o consumo de servicios externos?

Como desarrolladores cada día nos enfrentamos a diferentes retos que nos motivan a mejorar nuestra arquitectura o procesos internos para aplicar mejores practicas. Trabajar con certificados es uno de esos retos que podemos enfrentar en el día a día , y estos a su vez con los diferentes retos de seguridad, algunos prefieren incluir los certificados como archivos en el despliegue de la Lambda que es una opción valida pero que en el caso que el certificado venza o se desactive por lo solicitud del cliente o el proveedor del certificado, esto requerirá desplegar de nuevo todas las lambdas o funciones que utilicen dicho certificado.

Para hacer frente al escenario anterior, podemos utilizar un servicio de AWS Secrets Manager nos permite almacenar nuestros secretos (incluyendo certificados) en la nube de AWS y ser consumidos por los servicios como ser Lambdas, Glue, etc.

Ventajas:
Rotación de certificados de forma centralizada.
Replican de certificados en diferentes regiones.
Desacoplamiento de nuestros secretos con nuestras funciones.
Posibilidad de crear nuevos servicios que consuman los certificados.

Escenario:
Debes de conectarte a una API de tercero que requiere que se autentique el usuario con certificados como PFX, CRT y KEY. Los certificados son asignados a un empleado que puede ser rotado dentro de la empresa, por lo cual, los certificados pueden cambiar sin haber expirado. Antes que se expiren los certificados el ente emisor emitirá los nuevos certificados para que el equipo de ingeniería realice los cambios necesarios en sus sistemas.

Solución 1
Adjuntar los certificados en cada una de las diferentes Lambdas.
Pros:
Los certificados no pueden ser accedidos, desde fuera de las Lambdas que los contienen.

Contras:
Al cambiar el certificado sera necesario volver a desplegar todas las funciones donde se requiera el uso de los certificados. Asimismo, cada nuevo servicio requerirá que se adjunte los certificados cuando sean necesarios.

Solución 2
Almacenar los certificados en Secrets Manager y consumirlos en las Lambdas que lo requieran.
Pros:
Cifrado de los certificados en reposo
Rotación de certificados sin necesidad de afectar las funciones que lo necesitan.
Los certificados podrán ser almacenados de forma temporal en la memoria efímera de nuestra lambda, reduciendo la necesidad de extraerlos constantemente de Secrets Manager.

Contras:
Si no se tiene una política de usuarios bien definida donde se limiten los accesos completos a los diferentes servicios, cualquier usuario con acceso a la consola de AWS podría obtener los certificados.

Por las ventajas que ofrece la segunda opción obtendremos por desarrollarla, nuestra arquitectura quedaría de la siguiente forma:

Image description

Podrás encontrar el repositorio del código a la solución 2 en el siguiente enlace https://github.com/edsantoshn/aws-secrets-manager

Top comments (0)