Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

1.2K
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!