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.
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.
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.
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.
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.
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.
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.
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
|