Mis EDB están separados por:
Cargamos todas las claves con un sufijo especial en cada nueva instancia de EC2 a medida que lo iniciamos y luego eliminamos todas las claves que no han sido utilizadas por ninguna de las recetas en la lista de ejecución al final de la primera vez que el chef-cliente ejecuta (que será justo cuando comienza la instancia).
Todos los archivos se cargan como propietario y grupo "root" y solo con permisos de lectura.
Cada receta que utiliza un EDB genera el nombre EDB y el nombre del archivo de clave en el tiempo de ejecución de la receta concatenando 'edb_' + el entorno de nodos + nombre específico de receta / elemento + '.key' y luego busca la clave con este nombre . (Si no existe, esto arroja una excepción por defecto).
Por lo tanto, para nuestro servidor couchdb, que ejecuta un rol llamado 'couch', para obtener las credenciales que estamos usando para los usuarios administradores en el entorno de desarrollo, la receta busca una clave llamada 'edb_dev_couch.key'
Luego busca en una bolsa de datos llamada 'edb_dev' un elemento llamado 'couch_credentials'.
Para administrar claves, actualmente estoy usando el enfoque simple de:
- cargue todas las claves EDB a través del script de arranque y agregue '_x' a los nombres de las claves
- Haga que cada receta que utiliza un EDB busque en el directorio de claves la clave que necesita.
- Si la clave existe con un sufijo '_x', cambie el nombre de la clave para eliminar el sufijo '_x'.
- agregue una receta al final de cada run_list que elimine todas las claves con un sufijo '_x'
Afortunadamente, esto limita el tiempo que las claves fuera del alcance de un solo nodo son susceptibles hasta que la máquina haya sido arrancada y haya tenido la primera ejecución de chef_client.
Esta es nuestra primera ronda de prueba de cómo proteger las claves, pero hasta ahora satisface nuestras necesidades actuales, ya que evita que un servidor de desarrollo rooteado pueda acceder de inmediato a cualquier otra credencial de servidor almacenada en un EDB.
Para mantener una receta al final de cada lista de ejecución, utilizo un trabajo de ejecución de cuchillo que se asegura de que esta receta delete_keys sea exactamente la última receta en cada nodo.