Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Procedure consigliate di sicurezza per Image Builder
EC2Image Builder offre una serie di funzionalità di sicurezza da prendere in considerazione durante lo sviluppo e l'implementazione delle proprie politiche di sicurezza. Le seguenti best practice sono linee guida generali e non rappresentano una soluzione di sicurezza completa. Poiché queste best practice potrebbero non essere appropriate o sufficienti per l'ambiente, gestiscile come considerazioni utili anziché prescrizioni.
-
Non utilizzare gruppi di sicurezza eccessivamente permissivi nelle ricette di Image Builder.
-
Non condividete immagini con account di cui non vi fidate.
-
Non rendere pubbliche le immagini che contengono dati privati o sensibili.
-
Applica tutte le patch di sicurezza disponibili per Windows o Linux durante la creazione delle immagini.
Ti consigliamo vivamente di testare le immagini per convalidare il livello di sicurezza e i livelli di conformità di sicurezza applicabili. Soluzioni come Amazon Inspector possono aiutare a convalidare il livello di sicurezza e conformità delle immagini.
IMDSv2per le pipeline di Image Builder
Quando viene eseguita la pipeline di Image Builder, invia HTTP richieste alle EC2 istanze di avvio utilizzate da Image Builder per creare e testare l'immagine. Per configurare la versione utilizzata dalla pipeline per IMDS le richieste di avvio, imposta il httpTokens
parametro nelle impostazioni dei metadati dell'istanza di configurazione dell'infrastruttura Image Builder.
Si consiglia di configurare tutte le EC2 istanze che Image Builder avvia da una build di pipeline da IMDSv2 utilizzare in modo che le richieste di recupero dei metadati dell'istanza richiedano un'intestazione token firmata.
Per ulteriori informazioni sulla configurazione dell'infrastruttura Image Builder, vedere. Gestione della configurazione dell'infrastruttura Image Builder Per ulteriori informazioni sulle opzioni dei metadati delle EC2 istanze per le immagini Linux, consulta Configurare le opzioni dei metadati dell'istanza nella Amazon EC2 User Guide. Per le immagini Windows, consulta Configurare le opzioni dei metadati dell'istanza nella Amazon EC2 User Guide.
Pulizia post-compilazione richiesta
Dopo che Image Builder ha completato tutti i passaggi di creazione dell'immagine personalizzata, Image Builder prepara l'istanza di compilazione per il test e la creazione di immagini. Prima di chiudere l'istanza di compilazione per creare l'istantanea, Image Builder esegue la seguente pulizia per garantire la sicurezza dell'immagine:
- Linux
-
La pipeline Image Builder esegue uno script di pulizia per garantire che l'immagine finale segua le migliori pratiche di sicurezza e per rimuovere eventuali artefatti o impostazioni di build che non devono essere trasferiti all'istantanea. Tuttavia, è possibile saltare sezioni dello script o sovrascrivere completamente i dati dell'utente. Pertanto, le immagini prodotte dalle pipeline di Image Builder non sono necessariamente conformi a criteri normativi specifici.
Quando la pipeline completa le fasi di compilazione e test, Image Builder esegue automaticamente il seguente script di pulizia appena prima di creare l'immagine di output.
Se sovrascrivi i dati utente nella tua ricetta, lo script non viene eseguito. In tal caso, assicurati di includere nei dati utente un comando che crei un file vuoto denominatoperform_cleanup
. Image Builder rileva questo file ed esegue lo script di pulizia prima di creare la nuova immagine.
#!/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 [[ $( 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;
# 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"
if [[ $( sudo find {{workingDirectory}}/TOE_* -type f | sudo wc -l) -gt 0 ]]; then
echo "Deleting files within {{workingDirectory}}/TOE_*"
sudo find {{workingDirectory}}/TOE_* -type f -exec shred -zuf {} \;
fi
if [[ $( sudo find {{workingDirectory}}/TOE_* -type f | sudo wc -l) -gt 0 ]]; then
echo "Failed to delete {{workingDirectory}}/TOE_*"
exit 1
fi
if [[ $( sudo find {{workingDirectory}}/TOE_* -type d | sudo wc -l) -gt 0 ]]; then
echo "Deleting {{workingDirectory}}/TOE_*"
sudo rm -rf {{workingDirectory}}/TOE_*
fi
if [[ $( sudo find {{workingDirectory}}/TOE_* -type d | sudo wc -l) -gt 0 ]]; then
echo "Failed to delete {{workingDirectory}}/TOE_*"
exit 1
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 [[ $( 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
if [[ -d "/var/log/amazon/ssm" ]]; then
echo "Deleting /var/log/amazon/ssm/*"
sudo rm -rf /var/log/amazon/ssm
fi
if [[ -d "/var/log/amazon/ssm" ]]; then
echo "Failed to delete /var/log/amazon/ssm"
exit 1
fi
fi
if [[ $( sudo find /var/log/sa/sa* -type f | sudo wc -l ) -gt 0 ]]; then
echo "Deleting /var/log/sa/sa*"
sudo shred -zuf /var/log/sa/sa*
fi
if [[ $( sudo find /var/log/sa/sa* -type f | sudo wc -l ) -gt 0 ]]; then
echo "Failed to delete /var/log/sa/sa*"
exit 1
fi
if [[ $( sudo find /var/lib/dhclient/dhclient*.lease -type f | sudo wc -l ) -gt 0 ]]; then
echo "Deleting /var/lib/dhclient/dhclient*.lease"
sudo shred -zuf /var/lib/dhclient/dhclient*.lease
fi
if [[ $( sudo find /var/lib/dhclient/dhclient*.lease -type f | sudo wc -l ) -gt 0 ]]; then
echo "Failed to delete /var/lib/dhclient/dhclient*.lease"
exit 1
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
# 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 [[ $( 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
sudo touch /etc/machine-id
- Windows
-
Dopo che la pipeline Image Builder ha personalizzato le immagini di Windows, esegue l'utilità Microsoft Sysprep. Queste azioni seguono le AWS migliori pratiche per il rafforzamento e la pulizia dell'immagine.
Sostituisci lo script di pulizia di Linux
Image Builder crea immagini che sono sicure per impostazione predefinita e seguono le nostre best practice di sicurezza. Tuttavia, alcuni casi d'uso più avanzati potrebbero richiedere di saltare una o più sezioni dello script di pulizia integrato. Se hai bisogno di saltare alcune operazioni di pulizia, ti consigliamo vivamente di testare l'output AMI per garantire la sicurezza dell'immagine.
Se si saltano le sezioni dello script di pulizia, nell'immagine finale possono essere incluse informazioni riservate, come i dettagli dell'account del proprietario o SSH le chiavi, e in ogni caso avviate da quell'immagine. Potrebbero inoltre verificarsi problemi con l'avvio in zone di disponibilità, regioni o account diversi.
La tabella seguente descrive le sezioni dello script di pulizia, i file che vengono eliminati in quella sezione e i nomi di file che è possibile utilizzare per contrassegnare una sezione che Image Builder deve ignorare. Per saltare una sezione specifica dello script di pulizia, è possibile utilizzare il modulo di azione del CreateFile componente o un comando nei dati utente (se sovrascritto) per creare un file vuoto con il nome specificato nella colonna Ignora il nome del file della sezione.
I file creati per ignorare una sezione dello script di pulizia non devono includere un'estensione di file. Ad esempio, se si desidera saltare la CLOUD_INIT_FILES
sezione dello script, ma si crea un file denominatoskip_cleanup_cloudinit_files.txt
, Image Builder non riconoscerà il file skip.
Input
Sezione di pulizia |
File rimossi |
Ignora il nome del file della sezione |
CLOUD_INIT_FILES
|
/etc/sudoers.d/90-cloud-init-users
/etc/locale.conf
/var/log/cloud-init.log
/var/log/cloud-init-output.log
|
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
|