View a markdown version of this page

Prácticas recomendadas de seguridad para Generador de imágenes - Generador de Imágenes de EC2

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Prácticas recomendadas de seguridad para Generador de imágenes

Generador de Imágenes de EC2 proporciona un número de características de seguridad que debe tener en cuenta a la hora de desarrollar e implementar sus propias políticas de seguridad. Las siguientes prácticas recomendadas son directrices generales y no constituyen una solución de seguridad completa. Puesto que es posible que estas prácticas recomendadas no sean adecuadas o suficientes para el entorno, considérelas como consideraciones útiles en lugar de como normas.

  • No utilice grupos de seguridad demasiado permisivos en las recetas de Generador de Imágenes.

  • No comparta imágenes con cuentas en las que no confíe.

  • No publique imágenes que contengan datos privados o confidenciales.

  • Aplique todos los parches de seguridad disponibles para Windows o Linux durante la creación de imágenes.

  • Aplica periódicamente actualizaciones de AMI administradas a sus recetas de macOS y genera nuevas imágenes para lanzar instancias que tengan los últimos parches de seguridad.

Le recomendamos encarecidamente que pruebe las imágenes para validar la postura de seguridad y los niveles de cumplimiento de seguridad aplicables. Soluciones como Amazon Inspector pueden ayudar a validar la postura de seguridad y conformidad de las imágenes.

IMDSv2 para canalizaciones de Generador de Imágenes

Cuando se ejecuta la canalización de Generador de Imágenes, esta envía solicitudes HTTP para lanzar instancias de EC2 que Generador de Imágenes utiliza para crear y probar su imagen. Para configurar la versión de IMDS que utiliza su canalización para las solicitudes de lanzamiento, defina el parámetro httpTokens en los ajustes de metadatos de la instancia de configuración de infraestructura de Generador de Imágenes.

nota

Se recomienda configurar todas las instancias de EC2 que Generador de Imágenes lance a partir de una compilación en proceso para que usen IMDSv2, de modo que las solicitudes de recuperación de metadatos de las instancias requieran un encabezado de token firmado.

Para obtener más información acerca de la configuración de la infraestructura de Generador de Imágenes, consulte Administre la configuración de la infraestructura de Generador de imágenes. Para obtener más información acerca de las opciones de metadatos de la instancia de EC2 para imágenes de Linux, consulte Configuración de las opciones del servicio de metadatos de instancias en la Guía del usuario de Amazon EC2. Para obtener imágenes de Windows, consulte Configuración de las opciones del servicio de metadatos de instancias en la Guía del usuario de Amazon EC2.

Limpieza posterior a la creación necesaria

Una vez que Generador de Imágenes complete todos los pasos de creación de la imagen personalizada, Generador de Imágenes prepara la instancia de creación para probarla y crear la imagen. Antes de cerrar la instancia de creación para crear la instantánea, Generador de Imágenes realiza la siguiente limpieza para garantizar la seguridad de la imagen:

Linux

La canalización de Generador de Imágenes ejecuta un script de limpieza para garantizar que la imagen final siga las mejores prácticas de seguridad y para eliminar cualquier artefacto de creación o configuración que no deba transferirse a la instantánea. Sin embargo, puede omitir secciones del script o anular por completo los datos del usuario. Por lo tanto, las imágenes producidas por las canalizaciones de Generador de Imágenes no cumplen necesariamente con ningún criterio reglamentario específico.

Cuando la canalización finaliza sus etapas de creación y prueba, Generador de Imágenes ejecuta automáticamente el siguiente script de limpieza justo antes de crear la imagen de salida.

importante

Si anula los datos de usuario en su receta, el script no se ejecutará. En ese caso, asegúrese de incluir un comando en sus datos de usuario que cree un archivo vacío llamado perform_cleanup. Generador de Imágenes detecta este archivo y ejecuta el script de limpieza antes de crear la nueva imagen.

Una vez finalizada la limpieza del archivo, Image Builder añade pasos al script para desinstalar el agente de Systems Manager y eliminar el cronie paquete. Image Builder rastrea lo que instaló durante la compilación en el directorio de trabajo del /tmp/imagebuilder_service servicio. Image Builder usa esos marcadores para decidir qué eliminar:

  • Agente de Systems Manager: el hecho de que Image Builder desinstale el agente depende de la systemsManagerAgent.uninstallAfterBuild configuración de la receta de imagen y de si Image Builder ha instalado el agente. Para obtener más información, consulte la uninstallAfterBuild configuración en. Crea una receta con imágenes con el AWS CLI

  • croniepaquete: este paso se aplica a Amazon Linux 1, Amazon Linux 2 y Amazon Linux 2023. Si Image Builder instaló un crontab durante la compilación, registra un crontab_installed marcador en el directorio de trabajo del servicio. A continuación, Image Builder elimina el cronie paquete como parte de la limpieza. Para conservar cronie la imagen final, borra el archivo de marcadores antes de que se ejecute la limpieza añadiendo el siguiente comando a un componente o a tus datos de usuario:

    rm -f /tmp/imagebuilder_service/crontab_installed
#!/bin/bash if [[ ! -f {{workingDirectory}}/perform_cleanup ]]; then echo "Skipping cleanup" exit 0 else sudo rm -f {{workingDirectory}}/perform_cleanup fi function cleanup() { FILES=("$@") for FILE in "${FILES[@]}"; do if [[ -f "$FILE" ]]; then echo "Deleting $FILE"; sudo shred -zuf $FILE; fi; if [[ -f $FILE ]]; then echo "Failed to delete '$FILE'. Failing." exit 1 fi; done }; # Clean up for cloud-init files CLOUD_INIT_FILES=( "/etc/sudoers.d/90-cloud-init-users" "/etc/locale.conf" "/var/log/cloud-init.log" "/var/log/cloud-init-output.log" ) if [[ -f {{workingDirectory}}/skip_cleanup_cloudinit_files ]]; then echo "Skipping cleanup of cloud init files" else echo "Cleaning up cloud init files" cleanup "${CLOUD_INIT_FILES[@]}" if [[ -d "/var/lib/cloud" ]]; then if [[ $( sudo find /var/lib/cloud -type f | sudo wc -l ) -gt 0 ]]; then echo "Deleting files within /var/lib/cloud/*" sudo find /var/lib/cloud -type f -exec shred -zuf {} \; fi; if [[ $( sudo ls /var/lib/cloud | sudo wc -l ) -gt 0 ]]; then echo "Deleting /var/lib/cloud/*" sudo rm -rf /var/lib/cloud/* || true fi; fi; fi; # Clean up for temporary instance files INSTANCE_FILES=( "/etc/.updated" "/etc/aliases.db" "/etc/hostname" "/var/lib/misc/postfix.aliasesdb-stamp" "/var/lib/postfix/master.lock" "/var/spool/postfix/pid/master.pid" "/var/.updated" "/var/cache/yum/x86_64/2/.gpgkeyschecked.yum" ) if [[ -f {{workingDirectory}}/skip_cleanup_instance_files ]]; then echo "Skipping cleanup of instance files" else echo "Cleaning up instance files" cleanup "${INSTANCE_FILES[@]}" fi; # Clean up for ssh files SSH_FILES=( "/etc/ssh/ssh_host_rsa_key" "/etc/ssh/ssh_host_rsa_key.pub" "/etc/ssh/ssh_host_ecdsa_key" "/etc/ssh/ssh_host_ecdsa_key.pub" "/etc/ssh/ssh_host_ed25519_key" "/etc/ssh/ssh_host_ed25519_key.pub" "/root/.ssh/authorized_keys" ) if [[ -f {{workingDirectory}}/skip_cleanup_ssh_files ]]; then echo "Skipping cleanup of ssh files" else echo "Cleaning up ssh files" cleanup "${SSH_FILES[@]}" USERS=$(ls /home/) for user in $USERS; do echo Deleting /home/"$user"/.ssh/authorized_keys; sudo find /home/"$user"/.ssh/authorized_keys -type f -exec shred -zuf {} \; done for user in $USERS; do if [[ -f /home/"$user"/.ssh/authorized_keys ]]; then echo Failed to delete /home/"$user"/.ssh/authorized_keys; exit 1 fi; done; fi; # Clean up for instance log files INSTANCE_LOG_FILES=( "/var/log/audit/audit.log" "/var/log/boot.log" "/var/log/dmesg" "/var/log/cron" ) if [[ -f {{workingDirectory}}/skip_cleanup_instance_log_files ]]; then echo "Skipping cleanup of instance log files" else echo "Cleaning up instance log files" cleanup "${INSTANCE_LOG_FILES[@]}" fi; # Clean up for TOE files if [[ -f {{workingDirectory}}/skip_cleanup_toe_files ]]; then echo "Skipping cleanup of TOE files" else echo "Cleaning TOE files" shopt -s nullglob TOE_MATCHES=({{workingDirectory}}/TOE_*) shopt -u nullglob if [[ ${#TOE_MATCHES[@]} -gt 0 ]]; then if [[ $( sudo find "${TOE_MATCHES[@]}" -type f | sudo wc -l) -gt 0 ]]; then echo "Deleting files within {{workingDirectory}}/TOE_*" sudo find "${TOE_MATCHES[@]}" -type f -exec shred -zuf {} \; fi shopt -s nullglob TOE_REMAINING=({{workingDirectory}}/TOE_*) shopt -u nullglob if [[ ${#TOE_REMAINING[@]} -gt 0 ]]; then if [[ $( sudo find "${TOE_REMAINING[@]}" -type f | sudo wc -l) -gt 0 ]]; then echo "Failed to delete {{workingDirectory}}/TOE_*" exit 1 fi echo "Deleting {{workingDirectory}}/TOE_*" sudo rm -rf "${TOE_REMAINING[@]}" fi shopt -s nullglob TOE_FINAL=({{workingDirectory}}/TOE_*) shopt -u nullglob if [[ ${#TOE_FINAL[@]} -gt 0 ]]; then echo "Failed to delete {{workingDirectory}}/TOE_*" exit 1 fi fi fi # Clean up for ssm log files if [[ -f {{workingDirectory}}/skip_cleanup_ssm_log_files ]]; then echo "Skipping cleanup of ssm log files" else echo "Cleaning up ssm log files" if [[ -d "/var/log/amazon/ssm" ]]; then if [[ $( sudo find /var/log/amazon/ssm -type f | sudo wc -l) -gt 0 ]]; then echo "Deleting files within /var/log/amazon/ssm/*" sudo find /var/log/amazon/ssm -type f -exec shred -zuf {} \; fi if [[ $( sudo find /var/log/amazon/ssm -type f | sudo wc -l) -gt 0 ]]; then echo "Failed to delete /var/log/amazon/ssm" exit 1 fi echo "Deleting /var/log/amazon/ssm/*" sudo rm -rf /var/log/amazon/ssm if [[ -d "/var/log/amazon/ssm" ]]; then echo "Failed to delete /var/log/amazon/ssm" exit 1 fi fi fi shopt -s nullglob SA_MATCHES=(/var/log/sa/sa*) shopt -u nullglob if [[ ${#SA_MATCHES[@]} -gt 0 ]]; then echo "Deleting /var/log/sa/sa*" sudo shred -zuf "${SA_MATCHES[@]}" shopt -s nullglob SA_REMAINING=(/var/log/sa/sa*) shopt -u nullglob if [[ ${#SA_REMAINING[@]} -gt 0 ]]; then echo "Failed to delete /var/log/sa/sa*" exit 1 fi fi shopt -s nullglob DHCLIENT_MATCHES=(/var/lib/dhclient/dhclient*.lease) shopt -u nullglob if [[ ${#DHCLIENT_MATCHES[@]} -gt 0 ]]; then echo "Deleting /var/lib/dhclient/dhclient*.lease" sudo shred -zuf "${DHCLIENT_MATCHES[@]}" shopt -s nullglob DHCLIENT_REMAINING=(/var/lib/dhclient/dhclient*.lease) shopt -u nullglob if [[ ${#DHCLIENT_REMAINING[@]} -gt 0 ]]; then echo "Failed to delete /var/lib/dhclient/dhclient*.lease" exit 1 fi fi if [[ $( sudo find /var/tmp -type f | sudo wc -l) -gt 0 ]]; then echo "Deleting files within /var/tmp/*" sudo find /var/tmp -type f -exec shred -zuf {} \; fi if [[ $( sudo find /var/tmp -type f | sudo wc -l) -gt 0 ]]; then echo "Failed to delete /var/tmp" exit 1 fi if [[ $( sudo ls /var/tmp | sudo wc -l ) -gt 0 ]]; then echo "Deleting /var/tmp/*" sudo rm -rf /var/tmp/* fi if [[ -f "/var/lib/systemd/random-seed" ]]; then echo "Deleting /var/lib/systemd/random-seed" sudo shred -zuf /var/lib/systemd/random-seed sudo rm -f /var/lib/systemd/random-seed fi # Shredding is not guaranteed to work well on rolling logs if [[ -f "/var/lib/rsyslog/imjournal.state" ]]; then echo "Deleting /var/lib/rsyslog/imjournal.state" sudo shred -zuf /var/lib/rsyslog/imjournal.state sudo rm -f /var/lib/rsyslog/imjournal.state fi if [[ -d "/var/log/journal" ]] && [[ $( sudo ls /var/log/journal/ | sudo wc -l ) -gt 0 ]]; then echo "Deleting /var/log/journal/*" sudo find /var/log/journal/ -type f -exec shred -zuf {} \; sudo rm -rf /var/log/journal/* fi if [[ -f "/etc/machine-id" ]]; then echo "Truncating /etc/machine-id" sudo truncate -s 0 /etc/machine-id fi if [[ -f "/var/lib/dbus/machine-id" ]]; then echo "Truncating /var/lib/dbus/machine-id" sudo truncate -s 0 /var/lib/dbus/machine-id fi sudo touch /etc/machine-id # Flush all pending writes to disk before instance shutdown and snapshot sync echo "Sanitize OK" ############################################################################### # Image Builder appends the following steps to the clean up script to uninstall # the Systems Manager (SSM) agent and, on Amazon Linux 1, Amazon Linux 2, and # Amazon Linux 2023, to remove the cronie package when Image Builder installed a # crontab during the build. Image Builder uses the /tmp/imagebuilder_service # working directory to track what it installed. ############################################################################### SERVICE_ROOT_WORKING_DIR="/tmp/imagebuilder_service" # SSM_UNINSTALL_CONDITION reflects the systemsManagerAgent.uninstallAfterBuild # recipe setting and how the SSM agent was installed: # SSM_INSTALLED_BY_CUSTOMER - always uninstall the SSM agent # SSM_INSTALLED_BY_IMAGE_BUILDER - uninstall only if Image Builder installed it # (any other value) - leave the SSM agent in the final image SSM_UNINSTALL_CONDITION="<uninstallAfterBuild condition>" function error_exit { echo "$1" 1>&2 exit 1 } function ssm_exists() { eval "$1" > /dev/null 2>&1 echo $? } function cleanup_image() { rm -rf "${SERVICE_ROOT_WORKING_DIR}" } function uninstall_ssm_agent() { uninstall_package="$1" uninstall_all="" uninstall_success="false" if [ "${uninstall_package}" == "" ]; then uninstall_all="true" fi yum="sudo yum search amazon-ssm-agent | grep amazon-ssm-agent" snap="sudo snap list amazon-ssm-agent" rpm="sudo rpm -qa amazon-ssm-agent | grep amazon-ssm-agent" dpkg="sudo dpkg --get-selections | grep amazon-ssm-agent" pkg="su -m root -c \"pkg info -l amazon-ssm-agent | grep amazon-ssm-agent\"" if [[ ("${uninstall_all}" == "true" || "${uninstall_package}" == "snap") && $(ssm_exists "${snap}") -eq 0 ]]; then echo "Package found in Snap.... Uninstalling" (sleep 30 ; sudo snap remove amazon-ssm-agent) &>/dev/null & uninstall_success="true" fi if [[ ("${uninstall_all}" == "true" || "${uninstall_package}" == "yum") && $(ssm_exists "${yum}") -eq 0 ]]; then echo "Package found in Yum.... Uninstalling" (sleep 30 ; sudo yum remove -y amazon-ssm-agent) &>/dev/null & uninstall_success="true" fi if [[ ("${uninstall_all}" == "true" || "${uninstall_package}" == "rpm") && $(ssm_exists "${rpm}") -eq 0 ]]; then echo "Package found in Rpm.... Uninstalling" (sleep 30 ; sudo rpm -e amazon-ssm-agent) &>/dev/null & uninstall_success="true" fi if [[ ("${uninstall_all}" == "true" || "${uninstall_package}" == "dpkg") && $(ssm_exists "${dpkg}") -eq 0 ]]; then echo "Package found in Dpkg.... Uninstalling" (sleep 30 ; sudo dpkg -r --force-all amazon-ssm-agent) &>/dev/null & uninstall_success="true" fi if [[ ("${uninstall_all}" == "true" || "${uninstall_package}" == "pkg") && $(ssm_exists "${pkg}") -eq 0 ]]; then echo "Package found in FreeBSD.... Uninstalling" (sleep 30 ; su -m root -c "pkg remove -y amazon-ssm-agent") &> /dev/null & uninstall_success="true" fi if [ "${uninstall_success}" == "false" ] ; then error_exit "Unable to uninstall an SSM agent" fi } # Amazon Linux releases where Image Builder installs cronie to provide a crontab: # Amazon Linux AMI (AL1), AL2, and AL2023. function is_cronie_supported_amazon_linux() { if [ "$(get_os_type)" != "amzn" ]; then return 1 fi case "$(get_os_version)" in 2|2023) return 0 ;; # AL1 releases use date-based versions from 2010 through 2018. 201[0-8].[0-9][0-9]) return 0 ;; *) return 1 ;; esac } function uninstall_crontab() { if is_cronie_supported_amazon_linux ; then echo "Uninstalling cronie package" sudo yum remove -y cronie fi } function get_os_type() { FILE=/etc/os-release if [ -e $FILE ]; then . $FILE echo $ID else echo "" fi } function get_os_version() { FILE=/etc/os-release if [ -e $FILE ]; then . $FILE echo $VERSION_ID else echo "" fi } if [ "${SSM_UNINSTALL_CONDITION}" == "SSM_INSTALLED_BY_CUSTOMER" ] ; then echo "Uninstall after build set to true. Uninstalling SSM agent." uninstall_ssm_agent elif [ "${SSM_UNINSTALL_CONDITION}" == "SSM_INSTALLED_BY_IMAGE_BUILDER" ] ; then echo "Checking if the SSM agent was installed by Image Builder" if [[ -f ${SERVICE_ROOT_WORKING_DIR}/ssm_installed ]] ; then package_manager="$(cat ${SERVICE_ROOT_WORKING_DIR}/ssm_installed)" echo "Uninstalling the SSM agent installed by Image Builder using ${package_manager}" uninstall_ssm_agent "${package_manager}" fi else echo "Uninstall after build set to false. Skipping SSM agent uninstall." fi # When Image Builder installs a crontab during the build (on Amazon Linux 1, # Amazon Linux 2, or Amazon Linux 2023), it records a crontab_installed marker # and removes the cronie package here. To keep cronie in your final image, # delete the marker before clean up runs: # rm -f /tmp/imagebuilder_service/crontab_installed if [[ -f ${SERVICE_ROOT_WORKING_DIR}/crontab_installed ]] ; then echo "Uninstalling crontab installed by Image Builder" uninstall_crontab fi cleanup_image
Windows

Una vez que la canalización de Generador de imágenes personalice las imágenes de Windows, ejecuta el servicio Sysprep de Microsoft. Estas acciones siguen las prácticas AWS recomendadas para endurecer y limpiar la imagen.

macOS

La canalización de Generador de Imágenes ejecuta un script de limpieza para garantizar que la imagen final siga las mejores prácticas de seguridad y para eliminar cualquier artefacto de creación o configuración que no deba transferirse a la instantánea. Sin embargo, puede omitir secciones del script o anular por completo los datos del usuario. Por lo tanto, las imágenes producidas por las canalizaciones de Generador de Imágenes no cumplen necesariamente con ningún criterio reglamentario específico.

Cuando la canalización finaliza sus etapas de creación y prueba, Generador de Imágenes ejecuta automáticamente el siguiente script de limpieza justo antes de crear la imagen de salida.

importante

Si anula los datos de usuario en su receta, el script no se ejecutará. En ese caso, asegúrese de incluir un comando en sus datos de usuario que cree un archivo vacío llamado perform_cleanup. Generador de Imágenes detecta este archivo y ejecuta el script de limpieza antes de crear la nueva imagen.

#!/bin/bash if [[ ! -f {{workingDirectory}}/perform_cleanup ]]; then echo "Skipping cleanup" exit 0 else sudo rm -f {{workingDirectory}}/perform_cleanup fi function cleanup() { FILES=("$@") for FILE in "${FILES[@]}"; do if [[ -f "$FILE" ]]; then echo "Deleting $FILE"; sudo rm -f $FILE; fi; if [[ -f $FILE ]]; then echo "Failed to delete '$FILE'. Failing." exit 1 fi; done }; # Reset EC2 macOS Init instance history so the image behaves as a first boot if [[ -f {{workingDirectory}}/skip_cleanup_ec2_macos_init_files ]]; then echo "Skipping cleanup of ec2-macos-init instance history" else echo "Cleaning up ec2-macos-init instance history" if [[ -x /usr/local/bin/ec2-macos-init ]]; then sudo /usr/local/bin/ec2-macos-init clean -all fi fi # Clean up for temporary instance files INSTANCE_FILES=( "/Library/Preferences/SystemConfiguration/NetworkInterfaces.plist" ) if [[ -f {{workingDirectory}}/skip_cleanup_instance_files ]]; then echo "Skipping cleanup of instance files" else echo "Cleaning up instance files" cleanup "${INSTANCE_FILES[@]}" fi; # Clean up for ssh files SSH_FILES=( "/etc/ssh/ssh_host_rsa_key" "/etc/ssh/ssh_host_rsa_key.pub" "/etc/ssh/ssh_host_ecdsa_key" "/etc/ssh/ssh_host_ecdsa_key.pub" "/etc/ssh/ssh_host_ed25519_key" "/etc/ssh/ssh_host_ed25519_key.pub" "/var/root/.ssh/authorized_keys" ) if [[ -f {{workingDirectory}}/skip_cleanup_ssh_files ]]; then echo "Skipping cleanup of ssh files" else echo "Cleaning up ssh files" cleanup "${SSH_FILES[@]}" USERS=$(ls /Users/) for user in $USERS; do if [[ -f /Users/"$user"/.ssh/authorized_keys ]]; then echo Deleting /Users/"$user"/.ssh/authorized_keys; sudo rm -f /Users/"$user"/.ssh/authorized_keys; fi; done for user in $USERS; do if [[ -f /Users/"$user"/.ssh/authorized_keys ]]; then echo Failed to delete /Users/"$user"/.ssh/authorized_keys; exit 1 fi; done; fi; # Clean up for instance log files INSTANCE_LOG_FILES=( "/var/log/amazon/ec2/ec2-macos-init.log" "/var/log/amazon/ec2/ena-ethernet.log" "/var/log/amazon/ec2/system-monitoring.log" ) if [[ -f {{workingDirectory}}/skip_cleanup_instance_log_files ]]; then echo "Skipping cleanup of instance log files" else echo "Cleaning up instance log files" cleanup "${INSTANCE_LOG_FILES[@]}" fi; # Clean up for TOE files if [[ -f {{workingDirectory}}/skip_cleanup_toe_files ]]; then echo "Skipping cleanup of TOE files" else echo "Cleaning TOE files" shopt -s nullglob TOE_MATCHES=({{workingDirectory}}/TOE_*) shopt -u nullglob if [[ ${#TOE_MATCHES[@]} -gt 0 ]]; then if [[ $( sudo find "${TOE_MATCHES[@]}" -type f | sudo wc -l) -gt 0 ]]; then echo "Deleting files within {{workingDirectory}}/TOE_*" sudo find "${TOE_MATCHES[@]}" -type f -exec rm -f {} \; fi shopt -s nullglob TOE_REMAINING=({{workingDirectory}}/TOE_*) shopt -u nullglob if [[ ${#TOE_REMAINING[@]} -gt 0 ]]; then if [[ $( sudo find "${TOE_REMAINING[@]}" -type f | sudo wc -l) -gt 0 ]]; then echo "Failed to delete {{workingDirectory}}/TOE_*" exit 1 fi echo "Deleting {{workingDirectory}}/TOE_*" sudo rm -rf "${TOE_REMAINING[@]}" fi shopt -s nullglob TOE_FINAL=({{workingDirectory}}/TOE_*) shopt -u nullglob if [[ ${#TOE_FINAL[@]} -gt 0 ]]; then echo "Failed to delete {{workingDirectory}}/TOE_*" exit 1 fi fi fi # Clean up for ssm log files if [[ -f {{workingDirectory}}/skip_cleanup_ssm_log_files ]]; then echo "Skipping cleanup of ssm log files" else echo "Cleaning up ssm log files" if [[ -d "/var/log/amazon/ssm" ]]; then if [[ $( sudo find /var/log/amazon/ssm -type f | sudo wc -l) -gt 0 ]]; then echo "Deleting files within /var/log/amazon/ssm/*" sudo find /var/log/amazon/ssm -type f -exec rm -f {} \; fi if [[ $( sudo find /var/log/amazon/ssm -type f | sudo wc -l) -gt 0 ]]; then echo "Failed to delete /var/log/amazon/ssm" exit 1 fi echo "Deleting /var/log/amazon/ssm/*" sudo rm -rf /var/log/amazon/ssm if [[ -d "/var/log/amazon/ssm" ]]; then echo "Failed to delete /var/log/amazon/ssm" exit 1 fi fi fi # Clean up for DHCP lease files shopt -s nullglob DHCP_LEASE_MATCHES=(/var/db/dhcpclient/leases/*) shopt -u nullglob if [[ ${#DHCP_LEASE_MATCHES[@]} -gt 0 ]]; then echo "Deleting /var/db/dhcpclient/leases/*" sudo rm -f "${DHCP_LEASE_MATCHES[@]}" shopt -s nullglob DHCP_LEASE_REMAINING=(/var/db/dhcpclient/leases/*) shopt -u nullglob if [[ ${#DHCP_LEASE_REMAINING[@]} -gt 0 ]]; then echo "Failed to delete /var/db/dhcpclient/leases/*" exit 1 fi fi if [[ $( sudo find /var/tmp -type f | sudo wc -l) -gt 0 ]]; then echo "Deleting files within /var/tmp/*" sudo find /var/tmp -type f -exec rm -f {} \; fi if [[ $( sudo find /var/tmp -type f | sudo wc -l) -gt 0 ]]; then echo "Failed to delete /var/tmp" exit 1 fi if [[ $( sudo ls /var/tmp | sudo wc -l ) -gt 0 ]]; then echo "Deleting /var/tmp/*" sudo rm -rf /var/tmp/* fi # Flush all pending writes to disk before instance shutdown and snapshot sync

Anule el script de limpieza de Linux.

Generador de Imágenes crea imágenes que son seguras de forma predeterminada y siguen nuestras prácticas recomendadas de seguridad. Sin embargo, algunos casos de uso más avanzados pueden requerir que omita una o más secciones del script de limpieza integrado. Si necesita omitir parte de la limpieza, le recomendamos encarecidamente que pruebe la AMI de salida para garantizar la seguridad de su imagen.

importante

Si se omiten secciones del script de limpieza, es posible que información confidencial, como los detalles de la cuenta del propietario o las claves SSH, se incluya en la imagen final y, en cualquier instancia que se lance desde esa imagen. También es posible que tenga problemas con el lanzamiento en distintas zonas de disponibilidad, regiones o cuentas.

En la siguiente tabla se describen las secciones del script de limpieza, los archivos que se eliminan en esa sección y los nombres de archivo que puede utilizar para marcar una sección que Generador de Imágenes debe omitir. Para omitir una sección específica del script de limpieza, puede utilizar el módulo de acción del componente CreateFile o un comando de los datos de usuario (si es incorrecto) para crear un archivo vacío con el nombre especificado en la columna Omitir el nombre del archivo de la sección.

nota

Los archivos que cree para omitir una sección del script de limpieza no deben incluir una extensión del archivo. Por ejemplo, si desea omitir la sección CLOUD_INIT_FILES del script, pero crea un archivo denominado skip_cleanup_cloudinit_files.txt, Generador de Imágenes no reconocerá el archivo omitido.

Input

Sección de limpieza

Archivos eliminados

Omita el nombre del archivo de la sección.

CLOUD_INIT_FILES

/etc/sudoers.d/90-cloud-init-users

/etc/locale.conf

/var/log/cloud-init.log

/var/log/cloud-init-output.log

Todos los archivos en /var/lib/cloud/

skip_cleanup_cloudinit_files

INSTANCE_FILES

/etc/.updated

/etc/aliases.db

/etc/hostname

/var/lib/misc/postfix.aliasesdb-stamp

/var/lib/postfix/master.lock

/var/spool/postfix/pid/master.pid

/var/.updated

/var/cache/yum/x86_64/2/.gpgkeyschecked.yum

skip_cleanup_instance_files

SSH_FILES

/etc/ssh/ssh_host_rsa_key

/etc/ssh/ssh_host_rsa_key.pub

/etc/ssh/ssh_host_ecdsa_key

/etc/ssh/ssh_host_ecdsa_key.pub

/etc/ssh/ssh_host_ed25519_key

/etc/ssh/ssh_host_ed25519_key.pub

/root/.ssh/authorized_keys

/home/<all users>/.ssh/authorized_keys

skip_cleanup_ssh_files

INSTANCE_LOG_FILES

/var/log/audit/audit.log

/var/log/boot.log

/var/log/dmesg

/var/log/cron

skip_cleanup_instance_log_files

TOE_FILES

{{workingDirectory}}/TOE_*

skip_cleanup_toe_files

SSM_LOG_FILES

/var/log/amazon/ssm/*

skip_cleanup_ssm_log_files

Limpia los pasos que siempre funcionan

Las secciones de la tabla anterior son las únicas partes del script de limpieza que puede omitir. Una vez que el script procesa esas secciones, también elimina los siguientes elementos y no puede omitir estos pasos:

  • /var/log/sa/sa*

  • /var/lib/dhclient/dhclient*.lease

  • Todos los archivos de /var/tmp/

  • /var/lib/systemd/random-seed

  • /var/lib/rsyslog/imjournal.state

  • Todos los archivos en /var/log/journal/

El script también trunca los archivos /etc/machine-id de identificación de la máquina y. /var/lib/dbus/machine-id Esto garantiza que cada instancia lanzada desde la imagen genere un ID de máquina único.

Anula el script de limpieza de macOS

Generador de Imágenes crea imágenes que son seguras de forma predeterminada y siguen nuestras prácticas recomendadas de seguridad. Sin embargo, algunos casos de uso más avanzados pueden requerir que omita una o más secciones del script de limpieza integrado. Si necesita omitir parte de la limpieza, le recomendamos encarecidamente que pruebe la AMI de salida para garantizar la seguridad de su imagen.

importante

Si se omiten secciones del script de limpieza, es posible que información confidencial, como los detalles de la cuenta del propietario o las claves SSH, se incluya en la imagen final y, en cualquier instancia que se lance desde esa imagen. También es posible que tenga problemas con el lanzamiento en distintas zonas de disponibilidad, regiones o cuentas.

En la siguiente tabla se describen las secciones del script de limpieza, los archivos que se eliminan en esa sección y los nombres de archivo que puede utilizar para marcar una sección que Generador de Imágenes debe omitir. Para omitir una sección específica del script de limpieza, puede utilizar el módulo de acción del componente CreateFile o un comando de los datos de usuario (si es incorrecto) para crear un archivo vacío con el nombre especificado en la columna Omitir el nombre del archivo de la sección.

nota

Los archivos que cree para omitir una sección del script de limpieza no deben incluir una extensión del archivo. Por ejemplo, si desea omitir la sección INSTANCE_FILES del script, pero crea un archivo denominado skip_cleanup_instance_files.txt, Generador de Imágenes no reconocerá el archivo omitido.

Input

Sección de limpieza

Archivos eliminados

Omita el nombre del archivo de la sección.

EC2_MACOS_INIT_FILES

Se ejecuta ec2-macos-init clean -all para restablecer el historial de instancias EC2 de macOS Init para que la imagen se comporte como el primer arranque.

skip_cleanup_ec2_macos_init_files

INSTANCE_FILES

/Library/Preferences/SystemConfiguration/NetworkInterfaces.plist

skip_cleanup_instance_files

SSH_FILES

/etc/ssh/ssh_host_rsa_key

/etc/ssh/ssh_host_rsa_key.pub

/etc/ssh/ssh_host_ecdsa_key

/etc/ssh/ssh_host_ecdsa_key.pub

/etc/ssh/ssh_host_ed25519_key

/etc/ssh/ssh_host_ed25519_key.pub

/var/root/.ssh/authorized_keys

/Users/<all users>/.ssh/authorized_keys

skip_cleanup_ssh_files

INSTANCE_LOG_FILES

/var/log/amazon/ec2/ec2-macos-init.log

/var/log/amazon/ec2/ena-ethernet.log

/var/log/amazon/ec2/system-monitoring.log

skip_cleanup_instance_log_files

TOE_FILES

{{workingDirectory}}/TOE_*

skip_cleanup_toe_files

SSM_LOG_FILES

/var/log/amazon/ssm/*

skip_cleanup_ssm_log_files