Estoy implementando un nodo AWS Lambda con Serverless . Debido a los requisitos internos de la institución en la que se ejecutará este código, necesito aprobar certificados adicionales. La única solución que he podido encontrar es pasar NODE_EXTRA_CA_CERTS como argumento CLI. Usar variables ambientales típicas (definidas, por ejemplo, en dotenv ) no funciona porque para ese punto en Node ya se han configurado los certificados.
Mis certificados adicionales están en MyCerts.pem en la raíz del proyecto, y la función de Lambda que intento ejecutar se llama function1 . Ejecutar Lambda localmente con NODE_EXTRA_CA_CERTS=./MyCerts.pem npx serverless invoke local -f function1 -l funciona correctamente. Sin embargo, una vez que implemento en AWS usando npx serverless deploy -v , no puedo encontrar una manera de incluir correctamente estos certificados adicionales, incluso invocando desde la CLI usando NODE_EXTRA_CA_CERTS=./MyCerts.pem npx serverless invoke -f function1 -l .
He intentado todo lo que puedo pensar y estoy perdido. ¿Alguien puede ayudar?
Creo que esto definitivamente debería ser posible en AWS Lambda.
Hay un ejemplo en dev.to [1] que es similar a su caso de uso. Sin embargo, están utilizando .NET Core y AWS SAM, pero debería ser fácil adaptar la solución a serverless y Node.js.
Básicamente, necesitas dos pasos:
[1] https://dev.to/leading-edje/aws-lambda-layer-for-private-certificates-465j
[2] https://www.serverless.com/plugins/serverless-layers
[3] https://www.serverless.com/blog/publish-aws-lambda-layers-serverless-framework
[4] https://www.sinservidor.com/blog/sinservidor-v1.2.0
No creo que NODE_EXTRA_CA_CERTS funcione en Lambda. Intenté configurarlo como una variable de entorno en un archivo ficticio que no existe. No generó una advertencia como se indica en la documentación , por lo que asumo que se ignoró.
Se emitirá un mensaje (una vez) con process.emitWarning() si el archivo falta o tiene un formato incorrecto, pero de lo contrario se ignorarán los errores.
Supongo que es por esta advertencia:
Esta variable de entorno se ignora cuando el nodo se ejecuta como setuid root o tiene capacidades de archivo de Linux configuradas.
Aquí hay otra pregunta que confirma que no funciona.
Pude hacer que Node.js prestara atención a NODE_EXTRA_CA_CERTS iniciando otro proceso de node desde la función Lambda. Ese segundo proceso me dio la advertencia que estaba buscando:
Warning: Ignoring extra certs from `hello.pem`, load failed: error:02001002:system library:fopen:No such file or directoryEstoy seguro de que hay muchas desventajas para iniciar un proceso secundario para manejar la solicitud (la simultaneidad sería mi principal preocupación), pero es una solución que puede probar.
const ca_env = Object.assign({NODE_EXTRA_CA_CERTS: "hello.pem"}, process.env);; require("child_process").execSync('node -e "console.log(\'hello\')"', {env: ca_env});También me encontré con este problema y tomando las entradas de Martin Loper, había establecido la variable de entorno NODE_EXTRA_CA_CERTS con el prefijo /var/task/ y luego la ruta dentro de mi base de código lambda donde se encuentra realmente el certificado. por ejemplo, me gustaría /var/task/certs/myCustomCA.pem si tuviera una carpeta de certs en mi lambda con myCustomCA.pem .