Después de crear una AMI con empaquetador basado en la AMI de Amazon Linux, si lanzo una instancia de esa AMI y ssh, veo el par de claves del empaquetador temporal en el archivo ~/.ssh/authorized_keys
, que es un agujero de seguridad. Esperaba que ese archivo se eliminara antes de que se guardara la AMI.
Pude solucionar esto eliminando explícitamente ~/.ssh/authorized_keys
en la plantilla del empaquetador (detalles a continuación)
Versión del empaquetador
Packer v0.10.0
Plataforma de host
Versión de CentOS Linux 7.2.1511 (Core)
Salida del registro de depuración de PACKER_LOG=1 packer build template.json
.
Aquí está la salida del empaquetador:
https://gist.github.com/tleyden/4cc13b530f08bcaef04f5233bf43daee
Lo siento, no hice PACKER_LOG = 1, pero puedo volver a ejecutarlo si es necesario
La _plantilla de ejemplo más simple y los scripts_ necesarios para reproducir el error
Texto:
Usando el complemento Jenkins Packer y pasando variables al empaquetador a través de:
-var 'source_ami=${source_ami}' -var 'ssh_username=${ssh_username}' -var 'couchbase_server_package_name=${couchbase_server_package_name}' -var 'couchbase_server_package_url=${couchbase_server_package_url}' -var 'couchbase_sync_gateway_package_base_url=${couchbase_sync_gateway_package_base_url}' -var 'couchbase_sync_gateway_package=${couchbase_sync_gateway_package}' -var 'couchbase_server_version=${couchbase_server_version}' -var 'couchbase_sync_gateway_version=${couchbase_sync_gateway_version}' -var 'couchbase_server_edition=${couchbase_server_edition}' -var 'sync_gateway_edition=${sync_gateway_edition}'
Solución alterna
Agregué el siguiente aprovisionador a la plantilla del empaquetador:
{
"type": "shell",
"inline": [
"rm /home/ec2-user/.ssh/authorized_keys"
]
}
y después de lanzar la AMI, solo contenía la clave elegida en el asistente de "instancia de lanzamiento" de AWS, y no el par de claves temporal del empaquetador.
Gracias por tomarse el tiempo para informar esto.
Así es como funciona AWS o, más específicamente, cómo funciona cloud-init. Lo que describe como una solución alternativa es en realidad lo que debe hacer.
Lamento revivir un hilo muerto, sin embargo, como lo encontré y luego encontré más información de Amazon, pensé en contribuir aquí para otros:
https://aws.amazon.com/articles/how-to-share-and-use-public-amis-in-a-secure-manner/
En resumen, recomiendan ejecutar lo siguiente como root para eliminar todos los archivos autorizados_keys:
find / -name "authorized_keys" -exec rm -f {} \;
Precaución: El comando en la página vinculada usa una combinación de guiones normales (-) y algo más que devolverá errores. Escribir el comando manualmente o copiar el que está directamente arriba debería funcionar.
Voy a bloquear este problema porque ha estado cerrado durante _30 días_ ⏳. Esto ayuda a nuestros mantenedores a encontrar y concentrarse en los problemas activos.
Si ha encontrado un problema que parece similar a este, abra un nuevo problema y complete la plantilla de problema para que podamos capturar todos los detalles necesarios para investigar más a fondo.
Comentario más útil
Gracias por tomarse el tiempo para informar esto.
Así es como funciona AWS o, más específicamente, cómo funciona cloud-init. Lo que describe como una solución alternativa es en realidad lo que debe hacer.