Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Bewährte Sicherheitsmethoden für Image Builder
EC2Image Builder bietet eine Reihe von Sicherheitsfunktionen, die Sie bei der Entwicklung und Implementierung Ihrer eigenen Sicherheitsrichtlinien berücksichtigen sollten. Die folgenden bewährten Methoden sind allgemeine Richtlinien und keine vollständige Sicherheitslösung. Da diese bewährten Methoden für Ihre Umgebung möglicherweise nicht angemessen oder ausreichend sind, sollten Sie sie als hilfreiche Überlegungen und nicht als bindend ansehen.
-
Verwenden Sie in Image Builder Builder-Rezepten keine übermäßig freizügigen Sicherheitsgruppen.
-
Teilen Sie keine Bilder mit Konten, denen Sie nicht vertrauen.
-
Veröffentlichen Sie keine Bilder, die private oder sensible Daten enthalten.
-
Wenden Sie während der Image-Erstellung alle verfügbaren Windows- oder Linux-Sicherheitspatches an.
Wir empfehlen Ihnen dringend, Ihre Images zu testen, um den Sicherheitsstatus und die geltenden Sicherheitsstandards zu überprüfen. Lösungen wie Amazon Inspector können dabei helfen, den Sicherheits- und Compliance-Status von Bildern zu überprüfen.
IMDSv2für Image Builder Builder-Pipelines
Wenn Ihre Image Builder-Pipeline ausgeführt wird, sendet sie HTTP Anfragen zum Starten von EC2 Instanzen, die Image Builder zum Erstellen und Testen Ihres Images verwendet. Um die Version zu konfigurierenIMDS, die Ihre Pipeline für die Startanfragen verwendet, legen Sie den httpTokens
Parameter in den Metadateneinstellungen Ihrer Image Builder Builder-Infrastrukturkonfigurationsinstanz fest.
Es wird empfohlen, alle EC2 Instanzen, die Image Builder von einem Pipeline-Build aus startet, IMDSv2 so zu konfigurieren, dass für Anfragen zum Abrufen von Instanz-Metadaten ein signierter Token-Header erforderlich ist.
Weitere Informationen zur Image Builder Builder-Infrastrukturkonfiguration finden Sie unterImage Builder Builder-Infrastrukturkonfiguration verwalten. Weitere Informationen zu EC2 Instance-Metadaten-Optionen für Linux-Images finden Sie unter Konfiguration der Instance-Metadatenoptionen im EC2 Amazon-Benutzerhandbuch. Informationen zu Windows-Images finden Sie unter Konfiguration der Instance-Metadatenoptionen im EC2 Amazon-Benutzerhandbuch.
Bereinigung nach dem Build erforderlich
Nachdem Image Builder alle Build-Schritte für Ihr benutzerdefiniertes Image abgeschlossen hat, bereitet Image Builder die Build-Instanz für Tests und Image-Erstellung vor. Bevor Sie die Build-Instanz herunterfahren, um den Snapshot zu erstellen, führt Image Builder die folgende Bereinigung durch, um die Sicherheit Ihres Images zu gewährleisten:
- Linux
-
Die Image Builder Builder-Pipeline führt ein Bereinigungsskript aus, um sicherzustellen, dass das endgültige Image den bewährten Sicherheitsmethoden entspricht, und um alle Build-Artefakte oder Einstellungen zu entfernen, die nicht in Ihren Snapshot übertragen werden sollten. Sie können jedoch Abschnitte des Skripts überspringen oder die Benutzerdaten vollständig überschreiben. Daher entsprechen die von Image Builder Builder-Pipelines erstellten Bilder nicht unbedingt bestimmten regulatorischen Kriterien.
Wenn die Pipeline ihre Build- und Testphasen abgeschlossen hat, führt Image Builder automatisch das folgende Bereinigungsskript aus, kurz bevor das Ausgabe-Image erstellt wird.
Wenn Sie Benutzerdaten in Ihrem Rezept überschreiben, wird das Skript nicht ausgeführt. Stellen Sie in diesem Fall sicher, dass Sie einen Befehl in Ihre Benutzerdaten aufnehmen, der eine leere Datei mit dem Namen erstelltperform_cleanup
. Image Builder erkennt diese Datei und führt das Bereinigungsskript aus, bevor das neue Image erstellt wird.
#!/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
-
Nachdem die Image Builder Builder-Pipeline Windows-Abbilder angepasst hat, wird das Microsoft Sysprep-Hilfsprogramm ausgeführt. Diese Aktionen folgen den AWS bewährten Methoden zum Härten und Reinigen des Images.
Überschreiben Sie das Linux-Bereinigungsskript
Image Builder erstellt Bilder, die standardmäßig sicher sind und unseren bewährten Sicherheitsmethoden entsprechen. In einigen fortgeschritteneren Anwendungsfällen müssen Sie jedoch möglicherweise einen oder mehrere Abschnitte des integrierten Bereinigungsskripts überspringen. Wenn Sie einen Teil der Bereinigung überspringen müssen, empfehlen wir Ihnen dringend, Ihre Ausgabe AMI zu testen, um die Sicherheit Ihres Images zu gewährleisten.
Das Überspringen von Abschnitten im Bereinigungsskript kann dazu führen, dass vertrauliche Informationen wie Kontodetails oder SSH Schlüssel des Besitzers in das endgültige Image aufgenommen und in jedem Fall von diesem Image aus gestartet werden. Möglicherweise treten auch Probleme beim Starten in verschiedenen Availability Zones, Regionen oder Konten auf.
In der folgenden Tabelle werden die Abschnitte des Bereinigungsskripts, die Dateien, die in diesem Abschnitt gelöscht werden, und die Dateinamen beschrieben, mit denen Sie einen Abschnitt kennzeichnen können, den Image Builder überspringen soll. Um einen bestimmten Abschnitt des Bereinigungsskripts zu überspringen, können Sie das Aktionsmodul der CreateFile Komponente oder einen Befehl in Ihren Benutzerdaten (falls überschrieben) verwenden, um eine leere Datei mit dem Namen zu erstellen, der in der Spalte Dateiname des Übersprungsabschnitts angegeben ist.
Die Dateien, die Sie erstellen, um einen Abschnitt des Bereinigungsskripts zu überspringen, sollten keine Dateierweiterung enthalten. Wenn Sie beispielsweise den CLOUD_INIT_FILES
Abschnitt des Skripts überspringen möchten, aber eine Datei mit dem Namen erstellenskip_cleanup_cloudinit_files.txt
, erkennt Image Builder die übersprungene Datei nicht.
Eingabe
Abschnitt aufräumen |
Dateien wurden entfernt |
Dateiname des Abschnitts überspringen |
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
|