Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

1.2K
Vistas
AWS Elastic Beanstalk y Secret Manager

¿Alguien sabe si es posible pasar un valor secreto como variable de entorno en beanstalk elástico? Obviamente, la alternativa es usar el SDK en nuestro código base, pero primero quiero explorar el enfoque de la variable de entorno.

Saludos Damián

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Según la respuesta de @Ali, no está integrado en este punto. Sin embargo, es relativamente fácil usar.ebextensions y AWS cli. Aquí hay un ejemplo que extrae un secreto a un archivo, de acuerdo con una variable de entorno MY_ENV. Luego, este valor podría establecerse en una variable de entorno, pero tenga en cuenta que las variables de entorno son específicas del shell. Necesitaría pasarlos a cualquier cosa que esté lanzando.

 10-extract-htpasswd: env: MY_ENV: "Fn::GetOptionSetting": Namespace: "aws:elasticbeanstalk:application:environment" OptionName: MY_ENV command: | aws secretsmanager get-secret-value --secret-id myproj/$MY_ENV/htpasswd --region=us-east-1 --query=SecretString --output text > /etc/nginx/.htpasswd chmod o-rwx /etc/nginx/.htpasswd chgrp nginx /etc/nginx/.htpasswd

Esto también requiere otorgar permisos de IAM para los secretos a la función de servicio de EB. es decir, una política como:

 { "Version": "2012-10-17", "Statement": [ { "Sid": "xxxxxxxxxx", "Effect": "Allow", "Action": "secretsmanager:GetSecretValue", "Resource": "arn:aws:secretsmanager:us-east-1:xxxxxxxxxxxx:secret:myproj*" } ] }
over 4 years ago · Santiago Trujillo Denunciar

0

Desafortunadamente, EB no admite secretos en este momento, esto podría agregarse más adelante. Puede usarlos en sus variables de entorno como sugiere la documentación, pero aparecerán en texto sin formato en la consola. Otro enfoque, y en mi opinión mejor, sería usar ebextensions y usar los comandos de AWS CLI para obtener secretos del administrador de secretos , que necesita alguna configuración (por ejemplo, tener AWS CLI instalado y tener sus secretos almacenados en SM). Puede configurarlas como variables de entorno en la misma configuración de eb. ¡Espero que esto ayude!

over 4 years ago · Santiago Trujillo Denunciar

0

Como mencionan las respuestas anteriores, todavía no hay una solución integrada si desea hacer esto en Elastic Beanstalk. Sin embargo, una solución alternativa es usar "gancho de plataforma". Desafortunadamente, está mal documentado en este punto.

Para almacenar su secreto, la mejor solución es crear un secreto personalizado en AWS-Secret-Manager . En el administrador de secretos, puede crear un nuevo secreto haciendo clic en "Almacenar un nuevo secreto", luego seleccionando "Otro tipo de secreto" e ingresando su clave/valor secreto (ver captura de pantalla ). En el siguiente paso, debe proporcionar un Nombre secreto (por ejemplo, "su_nombre_secreto") y puede dejar todo lo demás en su configuración predeterminada.

Luego, debe permitir que Elastic Beanstalk obtenga este secreto. Puede hacerlo creando una nueva política de IAM, por ejemplo, con este contenido:

 { "Version": "2012-10-17", "Statement": [ { "Sid": "Getsecretvalue", "Effect": "Allow", "Action": [ "secretsmanager:GetResourcePolicy", "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret", "secretsmanager:ListSecretVersionIds" ], "Resource": "your-secret-arn" } ]}

Debe reemplazar "your-secret-arn" con su ARN secreto que puede obtener en la interfaz AWS-secret-manager. Luego, debe agregar la política que creó a los roles de EB (debe ser "aws-elasticbeanstalk-ec2-role" o "aws-elasticbeanstalk-service-role").

Finalmente, debe agregar un archivo de enlace en su aplicación. Desde la raíz de la ubicación de su aplicación debe ser ".platform/hooks/prebuild/your_hook.sh". El contenido de su archivo puede ser algo como esto:

 #!/bin/sh export your_secret_key=$(aws secretsmanager get-secret-value --secret-id your-secret-name --region us-east-1 | jq -r '.SecretString' | jq -r '. your_secret_key') touch .env { printf "SECRET_KEY=%s\n" "$your_secret_key" # printf whatever other variable you want to pass } > .env

Obviamente, debe reemplazar "su_nombre_secreto" y la otra variable por sus propios valores y establecer la región en la región donde se almacena su secreto (si no es us-east-1). Y no olvides hacerlo ejecutable ("chmod +x your_hook.sh").

Esto supone que su aplicación puede cargar su env desde un archivo .env (que funciona bien con docker/docker-compose por ejemplo).

Otra opción es almacenar la variable en un archivo de configuración ".ebextensions", pero lamentablemente no parece funcionar con la nueva plataforma Amazon Linux 2. Además, no debe almacenar información confidencial, como credenciales, directamente en la compilación de su aplicación. Cualquier persona con acceso de lectura de Elastic Beanstalk puede acceder a las compilaciones de la aplicación y también se almacenan sin cifrar en S3.

Con el enfoque de enlace, el secreto solo se almacena localmente en sus instancias EC2 subyacentes de Elastic Beanstalk, y puede (¡debe!) restringir el acceso SSH directo a ellas.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda