Administrar keys secretas

Tengo una aplicación que almacena keys secretas de AWS en un repository privado en Github.

Fue recomendado porque si una de nuestras computadoras "explota", no tendremos acceso a las keys.

En lugar de almacenar en Github, podríamos pasar nuestras computadoras para compartir la key secreta, o enviarlas a través de la compañía privada.

Todas estas parecen malas forms de administrar keys.

¿Existe un buen repository / bóveda o método que sea mejor para almacenar y compartir keys secretas con los miembros del equipo?

Evite almacenar cnetworkingenciales con código, se vuelven bastante vulnerables y las consecuencias pueden ser irreversibles. Sería mucho mejor usar Roles IAM para otorgar acceso y usar keys solo para el desarrollo, preferiblemente una diferente por desarrollador para que puedan rotarse según sea necesario.

Consulte el documento técnico de AWS Security Best Practices para get más detalles.

Podría usar 1Password for Teams que le permite compartir secretos en bóvedas cifradas y protegidas por contraseña.

Como nota al margen, el riesgo de excluir a un usuario de AWS de su count si una computadora explota es muy bajo. En cualquier caso, el propietario de la count puede regenerar un nuevo set de keys AWS para cualquier usuario de IAM en la count. Siempre que el propietario de la count se pueda conectar a la count de AWS, estará a salvo.

Las keys, como muchos secretos, no deben compartirse siempre que sea posible.

En el caso de los usuarios de AWS:

  1. Cada usuario (empleado, compañero de equipo, etc.) debe tener su propio usuario de IAM creado para ellos.
  2. Cada usuario de IAM tendría su propio set de keys de acceso / secretos generados y disponibles solo para ese usuario.

Hay muchos beneficios para este sistema:

  1. Como las llaves no se comparten, es más difícil que se filtren accidentalmente,
  2. Como las keys no se comparten, si están comprometidas, solo ese usuario se ve afectado; ningún otro compañero de equipo se ve afectado.
  3. A cada usuario de IAM se le pueden otorgar permissions diferentes según sus propios requisitos.
  4. Con CloudTrail, puede auditar lo que hace cada usuario en la count de AWS.

Y evite save algo como esto en el control de fuente (git o cualquier otro).

La regla número uno de la administración de keys es minimizar el número de ubicaciones donde se almacena la key. Por lo tanto, para algo como las keys AWS, los desarrolladores deben tener sus propias keys almacenadas en sus máquinas. Para las keys que necesita un server de aplicaciones, esas keys solo deben almacenarse en el server de la aplicación.

Fue recomendado porque si una de nuestras computadoras "explota", no tendremos acceso a las keys.

La mejor manera de resolver este problema es simplemente rotar las teclas. Idealmente, siempre debe estar en un lugar donde pueda generar rápida o fácilmente nuevas keys si es necesario, como en el caso de un evento de security. Si hay alguna llave maestra que está totalmente jodida si la pierde, guárdela en una aplicación de almacenamiento seguro como 1Password, donde su bóveda está encriptada con una contraseña adicional.

En lugar de almacenar en Github, podríamos pasar nuestras computadoras para compartir la key secreta, o enviarlas a través de la compañía privada.

Todas estas parecen malas forms de administrar keys.

Como regla general, nunca almacene keys AWS (ni ninguna otra key o contraseña confidencial) en Github o en la empresa Slack. Cualquier cosa que comparta en holgura vive para siempre en los loggings, por lo que si la holgura de su empresa se ve comprometida, o si Slack se ve comprometida, lo que ha sucedido varias veces, cualquier cosa que se encuentre en sus loggings estará disponible para posibles atacantes.

¿Existe un buen repository / bóveda o método que sea mejor para almacenar y compartir keys secretas con los miembros del equipo?

Para almacenar keys (almacenamiento a largo ploop) use algo como 1 Contraseña. Para compartir keys (almacenamiento a corto ploop) use algo como ShareSecret (descargo de responsabilidad, soy el fundador de ShareSecret).