¿Cómo almacenar secretos cifrados en código para un proyecto serverless.com?

12

Con serverless.com, la forma más fácil de exponer un secreto a una función AWS Lambda es almacenarlo en el serverless.ymlarchivo (encriptado con KMS, por ejemplo).

Pero confiar secretos cifrados a Git no es lo mejor del mundo. Requiere cambios de código cuando el secreto tiene que cambiar, por un lado.

Pero solo en términos de seguridad, ¿cuáles son las mejores alternativas? por ejemplo, el secreto podría almacenarse en S3 (encriptado), con el Lambda dado acceso a esa ubicación y clave KMS, pero ¿es eso realmente mejor de alguna manera significativa?

Assaf Lavie
fuente
esta opinión fobia a la gimnasia semántica no me interesa.
Assaf Lavie

Respuestas:

7

Hay un par de elementos a considerar aquí:

  1. Es valioso tener la capacidad de mantener la configuración con una cadencia de liberación separada del código que se está configurando. Al hacerlo, se fomenta la rotación de credenciales de manera automatizada, hacerlo regularmente lo hace indoloro.

  2. Es completamente razonable desde el punto de vista de "Infraestructura como código" almacenar toda la configuración en Git, aunque probablemente en un repositorio diferente, ya que es probable que el alcance de la configuración abarque más de un servicio.

  3. Suponiendo que las dos declaraciones anteriores son relevantes para su situación, me inclinaría a cifrar los datos con KMS y almacenarlos en S3 o DynamoDB. Incluso iría tan lejos como para decir que en situaciones muy simples podría ser adecuado cifrar y almacenar los datos dentro del KMS.

Hay varias bibliotecas de código abierto que admitirán esta operación:

Richard Slater
fuente
1

Normalmente trato los secretos como datos de configuración en alcance. Como tal, no vive junto con el código, ya que son manejados por diferentes programas y procesos de lanzamiento. Un buen repositorio de git, KMS, dynamo, s3 o dentro de su sistema de gestión de configuración (chef-vault / base de datos cifrada en el mundo del chef) son buenos lugares. Básicamente, no desea tener que construir e implementar una nueva versión de su software para actualizar un secreto.

Si sus necesidades de gestión de secretos son más complejas, algo como Hasicorp Vault ( https://github.com/hashicorp/vault ) sería una buena opción.

Mate
fuente