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à.
Gestire l'unicità con Lambda SnapStart
Quando le chiamate aumentano su una SnapStart funzione, Lambda utilizza una singola istantanea inizializzata per riprendere più ambienti di esecuzione. Se il codice di inizializzazione genera contenuti unici inclusi nello snapshot, il contenuto potrebbe non essere più unico quando viene riutilizzato in più ambienti di esecuzione. Per mantenere l'unicità durante l'utilizzo SnapStart, è necessario generare contenuti unici dopo l'inizializzazione. Ciò include ID univoci, segreti univoci ed entropia utilizzata per generare pseudocasualità.
Di seguito sono riportate le best practice che consentono di mantenere l'unicità nel codice. Per le funzioni Java, Lambda fornisce anche uno strumento di SnapStart scansione open source per aiutare a verificare la presenza di codice che presuppone l'unicità. Se durante la fase di inizializzazione vengono generati dati univoci, è possibile utilizzare un hook di runtime per ripristinare l'unicità. Con gli hook di runtime, puoi eseguire codice specifico immediatamente prima che Lambda esegua uno snapshot o subito dopo che Lambda riprende una funzione da uno snapshot.
Evitare lo stato di salvataggio che dipende dall'unicità durante l'inizializzazione
Durante la fase di inizializzazione di Event Function, evita di memorizzare nella cache dati destinati a essere unici, come la generazione di un ID univoco per la registrazione o l'impostazione di seed per funzioni casuali. Ti consigliamo invece di generare dati univoci o impostare seed per le funzioni casuali all'interno dell'handler delle funzioni o di utilizzare un hook di runtime.
Gli esempi seguenti mostrano come generare un UUID nel gestore Event Function.
Utilizza generatori di numeri pseudocasuali crittograficamente sicuri (CSPRNG)
Quando SnapStart è abilitata, Lambda scatta un'istantanea dell'ambiente di esecuzione della funzione, inclusa tutta la memoria dell'applicazione e del sistema. Ciò significa che lo stato interno di ogni generatore di numeri casuali (RNG) viene mantenuto esattamente com'era al momento dell'istantanea, insieme a tutti i byte casuali che l'applicazione o le sue dipendenze hanno già generato e archiviato nei buffer di memoria.
Quando Lambda ripristina un ambiente di esecuzione da un'istantanea, resemina il generatore di numeri casuali del kernel da e con nuova entropia. /dev/random /dev/urandom Il software che legge numeri casuali direttamente da questi dispositivi mantiene la casualità con. SnapStart
Se l'applicazione dipende dalla casualità, si consiglia di utilizzare generatori di numeri casuali crittograficamente sicuri (CSPRNG). Oltre all'OpenSSL fornito da AL, i runtime gestiti Lambda che supportano SnapStart (Java versione 11+, Python versione 3.12+ e .NET versione 8+) includono i seguenti CSPRNG integrati:
-
Java:
java.security.SecureRandom -
Python:
random.SystemRandom -
.NET:
System.Security.Cryptography.RandomNumberGenerator
Nota
Per il runtime Go Lambda non sono necessarie modifiche se le funzioni utilizzano la libreria standardcrypto/rand, che è compatibile con snapstart per impostazione predefinita.
Quando impacchettate una funzione come immagine contenitore, l'immagine di base determina l'unicità e la compatibilità con: SnapStart
-
Un'immagine di base Lambda per un runtime gestito (Java versione 11+, Python versione 3.12+ e .NET versione 8+), compatibile con quanto descritto sopra. SnapStart
-
L'immagine di base.al2023 fornita: compatibile se il runtime del linguaggio di programmazione ottiene entropia da
/dev/urandomo se la build di OpenSSL (/dev/randomopenssl-snapsafe-libs) è elencata nell'elenco SnapStart-compatible dei pacchetti di Amazon Linux 2023. Se il tuo runtime si basa su altre fonti di entropia, segui i passaggi descritti nella sezione «La tua immagine di base» di seguito. -
La tua immagine di base: verifica le tue librerie crittografiche e usa un hook di runtime post-ripristino per eliminare qualsiasi stato del generatore di numeri casuali (RNG) memorizzato nella cache o i byte casuali memorizzati nel buffer, assicurandoti che la libreria legga nuova entropia dal sistema dopo il ripristino. Ad esempio, le funzioni Rust che utilizzano devono essere richiamate dopo il ripristino.
rand::rngs::ThreadRngreseed()Ti consigliamo di creare utilizzando un'immagine base Lambda ogni volta che è possibile. In particolare, se l'immagine di base include la propria versione di OpenSSL o un fork OpenSSL (come BoringSSL o LibreSSL), passa all'immagine di base.al2023 fornita, che include una build di OpenSSL (openssl-snapsafe-libs) o usa libcrypto (-LC). SnapStart-compatible AWSAWS
Versioni minime di libreria supportate
AWS Le librerie di crittografia mantengono automaticamente la casualità a SnapStart partire dalle versioni minime specificate nella tabella seguente. Se utilizzi queste librerie con le funzioni degli eventi Lambda, assicurati di utilizzare le seguenti versioni minime o versioni successive:
| Libreria | Versione minima supportata (x86) | Versione minima supportata (ARM) |
|---|---|---|
| AWS libcrypto (-LC)AWS |
1.16.0 |
1.30.0 |
| AWS libcrypto FIPS |
2.0.13 |
2.0.13 |
Se impacchetti le librerie crittografiche precedenti con le tue Lambda Event Functions come dipendenze transitive tramite le seguenti librerie, assicurati di utilizzare le seguenti versioni minime o versioni successive:
| Libreria | Versione minima supportata (x86) | Versione minima supportata (ARM) |
|---|---|---|
| AWS SDK for Java 2.x |
2.23.20 |
2,26,12 |
| AWS Common Runtime per Java |
0.29.8 |
0,29,25 |
| Fornitore di servizi di crittografia Amazon Corretto |
2.4.1 |
2.4.1 |
| FIPS Fornitore di servizi di crittografia Amazon Corretto |
2.4.1 |
2.4.1 |
Gli esempi seguenti mostrano come utilizzare i CSPRNG per garantire sequenze numeriche univoche anche quando la funzione viene ripristinata da uno snapshot.
SnapStart strumento di scansione (solo Java)
Lambda fornisce uno strumento di scansione che aiuta a verificare la presenza di codice che presuppone l'unicità. Lo strumento di SnapStart scansione è un SpotBugs