Omitir el límite de variable de entorno de 4 KB de Vercel para Node.js con secretos de GitOps

[ad_1]

El límite de variable de entorno de 4 KB de Vercel proviene del uso de AWS Lambda como proveedor de infraestructura. Si bien Vercel tiene una solución documentada para eludir esta limitación, tenía la desventaja de cambios importantes en el código de la aplicación, que ya no usaba variables de entorno para los secretos y la introducción de un nuevo punto final de API.

Sin una forma rápida y fácil de implementar una alternativa que aún permita el uso de variables de entorno para secretos, existe el riesgo de que los equipos recurran a prácticas inseguras como: B. agrupar secretos sin cifrar en archivos .env.

En Doppler, podemos ayudar a los clientes que encuentran esta limitación de forma individual utilizando nuestra integración con Vercel, pero tampoco teníamos una opción predeterminada.

Por lo tanto, nos propusimos crear una solución Node.js segura y de código abierto que permita exponer secretos de cualquier tamaño como variables de entorno, compatible con cualquier plataforma sin servidor y que cualquier desarrollador o equipo pueda usar, no solo nuestros clientes.

El resultado es el paquete gitops-secrets para Node.js. En este artículo, aprenderá cómo integrar un flujo de trabajo de secretos de GitOps en sus aplicaciones de Vercel y hacer que los límites de variables de entorno sean cosa del pasado.

Índice
  1. Flujo de trabajo Vercel GitOps Secrets
  2. Comience instalando el Secretos de Gitops Paquete:npm install gitops-secretsLuego instale Vercel CLI si aún no lo ha hechonpm i -g vercelLuego vincule la base de código de la aplicación en su máquina local a su aplicación Vercel yendo a la raíz de su aplicación ejecutando:vercel link clave maestra de cifrado
  3. proveedores de secretos
  4. Proveedores de secretos Doppler
  5. Configuración de Vercel
  6. descifrado
  7. desarrollo local
  8. Desencadene implementaciones de producción en cambios secretos con webhooks Doppler

Flujo de trabajo Vercel GitOps Secrets


Un flujo de trabajo de Vercel GitOps Secrets es un proceso de tres pasos en cualquier entorno:

  1. Recuperar secretos de un administrador secreto u otra tienda secreta
  2. Agrupe secretos cifrados en la compilación
  3. Desbloquee secretos dentro del tiempo de ejecución de la aplicación.

No se requieren CLI ni herramientas externas adicionales para cifrar y descifrar secretos utilizando todas las API proporcionadas por el paquete Crypto de Node.

Eche un vistazo al repositorio Vercel GitOps Secrets Next.js si está interesado en un ejemplo de trabajo que puede implementar en Vercel de inmediato.

De lo contrario, profundicemos en la construcción de este flujo de trabajo en una aplicación existente, pero si prefiere saltar directamente a un ejemplo de trabajo, consulte vercel-gitops-secrets-nextjs.


Comience instalando el Secretos de Gitops Paquete:
npm install gitops-secrets
Luego instale Vercel CLI si aún no lo ha hecho
npm i -g vercel
Luego vincule la base de código de la aplicación en su máquina local a su aplicación Vercel yendo a la raíz de su aplicación ejecutando:
vercel link

clave maestra de cifrado


Crear un único y criptográficamente aleatorio GITOPS_SECRETS_MASTER_KEY para cada entorno en Vercel ejecutando:

node -e 'process.stdout.write(require("crypto").randomBytes(16).toString("hex"))' | vercel env add GITOPS_SECRETS_MASTER_KEY development
node -e 'process.stdout.write(require("crypto").randomBytes(16).toString("hex"))' | vercel env add GITOPS_SECRETS_MASTER_KEY preview
node -e 'process.stdout.write(require("crypto").randomBytes(16).toString("hex"))' | vercel env add GITOPS_SECRETS_MASTER_KEY production

Alternativamente, puede crear cualquier GITOPS_SECRETS_MASTER_KEY Variable del tablero de Vercel.

proveedores de secretos


Un proveedor de secretos es responsable de recuperar sus secretos de un administrador de secretos o un servidor de almacenamiento cifrado en formato JSON. En la mayoría de los casos, debería ser tan simple como una única función asíncrona que recupera secretos mediante un SDK o una API HTTP.

Consulte el proveedor de Doppler incorporado para ver un ejemplo real, pero un proveedor válido podría ser tan simple como cifrar una carga JSON de una variable de entorno inyectada desde un secreto de GitHub:

const secrets = require("gitops-secrets");

const payload = JSON.parse(process.env.GITHUB_JSON_SECRET)
secrets.build(payload, { path: "lib/secrets.js" }); 

Proveedores de secretos Doppler


Para que pueda unirse, usamos Doppler como proveedor de secretos, pero los pasos son similares para cualquier otro administrador de secretos.

Cree su cuenta Doppler instalando la aplicación Doppler desde el mercado de Vercel o utilizando la página de inicio de sesión de Doppler.

En su computadora local, instale Doppler CLI y luego autentíquese ejecutando:

doppler login

Vaya a la raíz de la carpeta de su aplicación Vercel y cree un proyecto Doppler con el mismo nombre ejecutando:

PROJECT"${PWD##*/}"
doppler projects create $PROJECT

Configurar para que sea el entorno predeterminado Development:

doppler setup ---project $PROJECT --config dev

Luego cambie el nombre predeterminado de Doppler puesta en escena entorno a avance por consistencia con Vercel:

doppler environments rename --project $PROJECT stg --name Preview --slug prev -y

A continuación, puede importar sus secretos a Doppler a través del tablero o cargarlos a través de la CLI si están en formato ENV, JSON o YAML:

doppler import --config dev dev-secrets.json
doppler import --config prev prev-secrets.json
doppler import --config prd prod-secrets.json

Cuando sus secretos se importan a Doppler, cada entorno de Vercel requiere un token de servicio de Doppler llamado "DOPPLER_TOKEN" que otorga al proveedor de Doppler acceso de solo lectura a los secretos de un único entorno.

Podemos automatizar esto usando Doppler y Vercel CLI:

echo -n "$(doppler configs tokens create vercel-gitops --config dev --plain)" | vercel env add DOPPLER_TOKEN development
echo -n "$(doppler configs tokens create vercel-gitops --config prev --plain)" | vercel env add DOPPLER_TOKEN preview
echo -n "$(doppler configs tokens create vercel-gitops --config prd --plain)" | vercel env add DOPPLER_TOKEN production

Alternativamente, puede usar el panel de control de Doppler y Vercel para crear manualmente el token de servicio para cada entorno.


Necesita un nuevo script para agrupar los secretos cifrados en su compilación, que se puede generar en uno de dos formatos:

Dado que la API del sistema de archivos de Vercel está más orientada a proporcionar recursos estáticos que a leerlos, seleccionar el archivo JS es la forma mejor y más fácil de comenzar.

Colocamos el guión en un bin directorio y guarde el archivo JS generado en un lib Directorio o similar para proporcionar una ubicación a la que se pueda acceder mediante cualquier código en su aplicación.

Crear el bin/encrypt-secrets.js Archivo:

const secrets = require("gitops-secrets");

función asíncrona main() {
const payload = esperar a secrets.providers.doppler.fetch();
secrets.build(carga útil, { ruta: "lib/secrets.js" });
}

principalmente();

lo creado lib/secrets.js luego se importa a su aplicación como cualquier otro archivo JS y lo cubriremos con más detalle en el descifrado Sección.

Ahora agrega un encrypt-secrets guión tuyo package.json:

"scripts": {
...
"encrypt-secrets": "node ./bin/encrypt-secrets.js"
}

Puedes probar esto rápidamente encrypt-secrets script localmente con un desechable DOPLER_TOKEN y GITOPS_SECRETS_MASTER_KEY variables de entorno ejecutando:

GITOPS_SECRETS_MASTER_KEY="$(node -e 'process.stdout.write(require("crypto").randomBytes(16).toString("hex"))')" \
DOPPLER_TOKEN="$(doppler configs tokens create temp --max-age 1m --plain)" \
npm run encrypt-secrets

Configuración de Vercel


Por lo tanto, actualice la configuración de su proyecto Vercel en el tablero npm run encrypt-secrets se ejecuta antes y además de los comandos de compilación y desarrollo existentes:

Esto permite que su flujo de secretos de GitOps funcione localmente también.

descifrado


Ahora que todas las piezas están en su lugar, pasemos a descifrar y acceder a Secrets en tiempo de ejecución.

El descifrado funciona porque elGITOPS_SECRETS_MASTER_KEY La variable de entorno utilizada durante el proceso de compilación también existe y es la misma en tiempo de ejecución.

Debido a que el descifrado se basa en variables de entorno, se evita que los secretos se expongan accidentalmente en el código front-end, ya que solo se puede acceder a las variables de entorno en los puntos finales de la API. getServerSideProps y getStaticProps.

El archivo JS generado en lib/secrets.js contiene no solo el texto cifrado encriptado, sino también métodos convenientes para acceder a valores secretos.

Los siguientes ejemplos utilizan la sintaxis de CommonJS, pero los módulos ES también son totalmente compatibles, ya que el módulo se genera en el formato de módulo utilizado por su aplicación.

Para acceder a los secretos que podría utilizar populateEnv para emular cómo Vercel inyecta secretos como variables de entorno:

const { loadSecrets } = require("../lib/secrets.js")
loadSecrets().populateEnv();

process.env.API_KEY 

O simplemente acceda directamente:

const { loadSecrets } = require("../lib/secrets.js")
const secrets = loadSecrets();


secrets. API_KEY

Funciona igual de bien en cualquier parte de su aplicación de Vercel, incluso dentro de las páginas servidas. loadSecrets significa dentro getServerSideProps o getStaticProps Características:

const { loadSecrets } = require('../lib/secrets')

export async function getServerSideProps() {
const secrets = loadSecrets()
}

desarrollo local


Un flujo de trabajo de GitOps Secrets solo tendrá éxito si la experiencia de desarrollo no se ve afectada.

Y gracias a Vercel CLI, todo lo que necesita hacer para ejecutar localmente es:

vercel dev

Desencadene implementaciones de producción en cambios secretos con webhooks Doppler


Configura Doppler para desencadenar una redistribución de producción en Vercel cuando los secretos cambian en el entorno de producción mediante webhooks.

En el tablero de Vercel, cree un webhook de implementación de producción navegando a ajustes > Gitluego haga clic crear gancho Botón.

Copie la URL del webhook, luego abra su proyecto en el panel de control de Doppler y haga clic en webhooks del menú de la izquierda. presione el + Agregar pegue la URL del webhook y después de crear el webhook verifique el PRD casilla de verificación

Para probar, simplemente cambie un secreto en el Doppler producción entorno y debe observar cómo se ejecuta una implementación de producción en Vercel.


¡Buen trabajo!

Ahora sabe cómo eludir el límite de variable de entorno de 4 KB de Vercel mediante un flujo de trabajo de GitOps Secrets.

Eche un vistazo al repositorio Vercel GitOps Secrets Next.js para ver una muestra completamente funcional que puede implementar en Vercel.

los Secretos de Gitops ¡El paquete se encuentra actualmente en versión preliminar para desarrolladores y nos encantaría saber qué piensas!

Únase a nosotros en nuestro foro de la comunidad Doppler, encuéntrenos en Gorjeoy cree un problema en el repositorio de código abierto para errores o solicitudes de funciones.

¡Gracias por leer!



[ad_2]

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir