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.
Umgang mit Einzigartigkeit mit Lambda SnapStart
Wenn Aufrufe für eine SnapStart Funktion hochskaliert werden, verwendet Lambda einen einzelnen initialisierten Snapshot, um mehrere Ausführungsumgebungen wieder aufzunehmen. Wenn Ihr Initialisierungscode eindeutigen Inhalt generiert, der im Snapshot enthalten ist, ist der Inhalt möglicherweise nicht eindeutig, wenn er in Ausführungsumgebungen wiederverwendet wird. Um die Eindeutigkeit bei der Verwendung zu wahren SnapStart, müssen Sie nach der Initialisierung eindeutige Inhalte generieren. Dazu gehören eindeutige IDs, eindeutige Geheimnisse und Entropie, die zum Generieren von Pseudozufälligkeiten verwendet wird.
Im Folgenden finden Sie einige bewährte Methoden für die Aufrechterhaltung der Eindeutigkeit Ihres Codes. Für Java-Funktionen bietet Lambda auch ein SnapStart Open-Source-Scan-Tool, mit dem Sie nach Code suchen können, der Eindeutigkeit voraussetzt. Wenn Sie während der Initialisierungsphase eindeutige Daten generieren, können Sie eine Laufzeit-Hook verwenden, um die Eindeutigkeit wiederherzustellen. Mit Laufzeit-Hooks können Sie bestimmten Code ausführen, unmittelbar bevor Lambda einen Snapshot aufnimmt oder unmittelbar nachdem Lambda eine Funktion aus einem Snapshot fortsetzt.
Vermeiden des Speicherns eines Zustands, der von der Eindeutigkeit während der Initialisierung abhängt
Vermeiden Sie während der Initialisierungsphase Ihrer Funktion das Zwischenspeichern von Daten, die eindeutig sein sollen, z. B. das Generieren einer eindeutigen ID für die Protokollierung oder das Setzen von Seeds für Zufallsfunktionen. Stattdessen empfehlen wir Ihnen, eindeutige Daten zu generieren oder Seeds für Zufallsfunktionen in Ihrem Funktionshandler festzulegen – oder einen Laufzeit-Hook zu verwenden.
Die folgenden Beispiele zeigen, wie eine UUID im Funktionshandler erzeugt werden kann.
Kryptografisch sichere Pseudozufallszahlengeneratoren (CSPRNGs) verwenden
Wenn diese Option aktiviert SnapStart ist, erstellt Lambda einen Snapshot der Ausführungsumgebung Ihrer Funktion, einschließlich des gesamten Anwendungs- und Systemspeichers. Das bedeutet, dass der interne Zustand jedes Zufallszahlengenerators (RNG) genau so erhalten bleibt, wie er zum Zeitpunkt des Snapshots war, zusammen mit allen zufälligen Bytes, die Ihre Anwendung oder ihre Abhängigkeiten bereits generiert und in Speicherpuffern gespeichert haben.
Wenn Lambda eine Ausführungsumgebung anhand eines Snapshots wiederherstellt, wird der Kernel-Zufallszahlengenerator von /dev/random und /dev/urandom mit neuer Entropie neu gestartet. Software, die Zufallszahlen direkt von diesen Geräten liest, behält die Zufälligkeit bei. SnapStart
Wenn Ihre Anwendung von Zufälligkeit abhängt, empfehlen wir Ihnen, kryptographisch sichere Zufallszahlengeneratoren (CSPRNGs) zu verwenden. Zusätzlich zu dem von AL bereitgestellten OpenSSL enthalten die von Lambda verwalteten Runtimes, die Unterstützung bieten SnapStart (Java-Version 11+, Python-Version 3.12+ und .NET-Version 8+), die folgenden integrierten CSPRNGs:
-
Java:
java.security.SecureRandom -
Python:
random.SystemRandom -
.NET:
System.Security.Cryptography.RandomNumberGenerator
Anmerkung
Für die Go Lambda-Laufzeit sind keine Änderungen erforderlich, wenn Ihre Funktionen die Standardbibliothek verwenden, die standardmäßig Snapstart-kompatibel ist. crypto/rand
Wenn Sie Ihre Funktion als Container-Image verpacken, bestimmt Ihr Basis-Image die Kompatibilität mit: SnapStart
-
Ein Lambda-Basisimage für eine verwaltete Laufzeit (Java-Version 11+, Python-Version 3.12+ und.NET-Version 8+) — kompatibel mit wie oben beschrieben. SnapStart
-
Das bereitgestellte.al2023-Basisimage — Kompatibel, wenn Ihre Programmiersprachen-Runtime Entropie von oder dem SnapStart-compatible Build von OpenSSL (openssl-snapsafe-libs) erhält
/dev/random/dev/urandom, das in der Amazon Linux 2023-Paketliste aufgeführt ist. https://docs.aws.amazon.com/linux/al2023/release-notes/all-packages.html Wenn Ihre Laufzeit von anderen Entropiequellen abhängig ist, folgen Sie den Schritten, die im Abschnitt „Ihr eigenes Basis-Image“ unten beschrieben sind. -
Ihr eigenes Basis-Image — Prüfen Sie Ihre kryptografischen Bibliotheken und verwenden Sie nach der Wiederherstellung einen Runtime-Hook, um alle zwischengespeicherten Zufallszahlengeneratoren (RNG) oder gepufferte Zufallsbytes zu verwerfen, um sicherzustellen, dass die Bibliothek nach der Wiederherstellung neue Entropie aus dem System liest. Rust-Funktionen, die Sie verwenden, müssen beispielsweise nach der Wiederherstellung aufgerufen werden.
rand::rngs::ThreadRngreseed()Wir empfehlen, dass Sie nach Möglichkeit mit einem Lambda-Basisimage erstellen. Insbesondere, wenn Ihr Basis-Image eine eigene Version von OpenSSL oder einen OpenSSL-Fork (wie BoringSSL oder LibreSSL) enthält, wechseln Sie entweder zum bereitgestellten.al2023-Basisimage, das einen SnapStart-compatible Build von OpenSSL (openssl-snapsafe-libs) enthält, oder verwenden Sie libcrypto (-LC). AWSAWS
Unterstützte Mindestversionen der Bibliothek
AWS Kryptografiebibliotheken behalten automatisch die Zufälligkeit bei, wobei sie mit den in der folgenden Tabelle angegebenen Mindestversionen SnapStart beginnen. Wenn Sie diese Bibliotheken mit Ihren Lambda-Funktionen verwenden, stellen Sie sicher, dass Sie die folgenden Mindestversionen oder neuere Versionen verwenden:
| Bibliothek | Unterstützte Mindestversion (x86) | Unterstützte Mindestversion (ARM) |
|---|---|---|
| AWS libcrypto (-LC)AWS |
1.16.0 |
1.30.0 |
| AWS libcrypto FIPS |
2.0.13 |
2.0.13 |
Wenn Sie die vorangehenden kryptografischen Bibliotheken mit Ihren Lambda-Funktionen als transitive Abhängigkeiten über die folgenden Bibliotheken paketieren, stellen Sie sicher, dass Sie die folgenden Mindestversionen oder neuere Versionen verwenden:
| Bibliothek | Unterstützte Mindestversion (x86) | Unterstützte Mindestversion (ARM) |
|---|---|---|
| AWS SDK for Java 2.x |
2.23.20 |
2,26,12 |
| AWS Gemeinsame Laufzeit für Java |
0.29.8 |
0,29,25 |
| Kryptoanbieter Amazon Corretto |
2.4.1 |
2.4.1 |
| Amazon Corretto Kryptoanbieter FIPS |
2.4.1 |
2.4.1 |
Die folgenden Beispiele zeigen, wie CSPRNGs verwendet werden können, um eindeutige Zahlenfolgen zu garantieren, selbst wenn die Funktion aus einem Snapshot wiederhergestellt wird.
SnapStart Scan-Tool (nur Java)
Lambda bietet ein Scan-Tool für Java an, um nach Code zu suchen, der Eindeutigkeit voraussetzt. Das SnapStart Scan-Tool ist ein SpotBugs
Weitere Informationen zum Umgang mit Eindeutigkeit finden Sie im Compute-Blog unter Schneller starten mit SnapStart. AWS Lambda SnapStart