Crittografia dei pacchetti di implementazione .zip per Lambda
Lambda fornisce sempre la crittografia lato server dei dati a riposo per i pacchetti di implementazione .zip e i dettagli di configurazione delle funzioni con una AWS KMS key. Per impostazione predefinita, Lambda utilizza un Chiave di proprietà di AWS. Se questo comportamento predefinito si adatta al flusso di lavoro, non è necessario impostare altro. AWS non effettua alcun addebito per l'uso di questa chiave.
Se preferisci, in alternativa puoi fornire una chiave gestita dal cliente AWS KMS. È possibile eseguire questa operazione per avere il controllo sulla rotazione della chiave KMS o per soddisfare i requisiti dell'organizzazione per la gestione delle chiavi KMS. Quando si utilizza una chiave gestita dal cliente, solo gli utenti del tuo account con accesso alla chiave KMS possono visualizzare o gestire il codice o la configurazione della funzione.
Le chiavi gestite dal cliente sono soggette a costi AWS KMS standard. Per ulteriori informazioni, consultare Prezzi di AWS Key Management Service.
Creazione di una chiave gestita dal cliente
Puoi creare una chiave simmetrica gestita dal cliente Console di gestione AWS o le API AWS KMS.
Per creare una chiave simmetrica gestita dal cliente
Segui le fasi descritte in Creazione delle chiavi KMS per la crittografia simmetrica nella Guida per gli sviluppatori di AWS Key Management Service.
Autorizzazioni
Policy della chiave
Le policy della chiave controllano l'accesso alla chiave gestita dal cliente. Ogni chiave gestita dal cliente deve avere esattamente una policy della chiave, che contiene istruzioni che determinano chi può usare la chiave e come la possono usare. Per ulteriori informazioni, consulta Come modificare una policy delle chiavi nella Guida per gli sviluppatori di AWS Key Management Service.
Quando si utilizza una chiave gestita dal cliente per crittografare un pacchetto di implementazione .zip, Lambda non aggiunge alcuna concessione alla chiave. Invece, la tua policy della chiave AWS KMS deve consentire a Lambda di chiamare le seguenti operazioni API AWS KMS per tuo conto:
Il seguente esempio di policy della chiave consente a tutte le funzioni Lambda nell'account 111122223333 di richiamare le operazioni AWS KMS richieste per la chiave gestita dal cliente specificata:
Esempio AWS KMSPolicy delle chiavi
- JSON
-
-
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": [
"kms:GenerateDataKey",
"kms:Decrypt"
],
"Resource": "arn:aws:kms:us-east-1:111122223333:key/key-id",
"Condition": {
"StringLike": {
"kms:EncryptionContext:aws:lambda:FunctionArn": "arn:aws:lambda:us-east-1:111122223333:function:*"
}
}
}
]
}
Per informazioni sulla Risoluzione dei problemi delle chiavi di accesso consulta la Guida per gli sviluppatori di AWS Key Management Service.
Autorizzazioni dell’entità principale
Quando si utilizza una chiave gestita dal cliente per crittografare un pacchetto di implementazione .zip, solo i principali che hanno accesso a quella chiave possono accedere al pacchetto di implementazione .zip. Ad esempio, i principali che non hanno accesso alla chiave gestita dal cliente non possono scaricare il pacchetto .zip utilizzando l'URL S3 predefinito incluso nella risposta GetFunction. AccessDeniedException viene restituito nella sessione Code della risposta.
Esempio AWS KMS AccessDeniedException
{
"Code": {
"RepositoryType": "S3",
"Error": {
"ErrorCode": "AccessDeniedException",
"Message": "KMS access is denied. Check your KMS permissions. KMS Exception: AccessDeniedException KMS Message: User: arn:aws:sts::111122223333:assumed-role/LambdaTestRole/session is not authorized to perform: kms:Decrypt on resource: arn:aws:kms:us-east-1:111122223333:key/key-id with an explicit deny in a resource-based policy"
},
"SourceKMSKeyArn": "arn:aws:kms:us-east-1:111122223333:key/key-id"
},
...
Per ulteriori informazioni sulle autorizzazioni per le chiavi AWS KMS, consulta Autenticazione e controllo degli accessi per AWS KMS.
Utilizzo di una chiave gestita dal cliente per il pacchetto di implementazione .zip
Utilizza i seguenti parametri API per configurare le chiavi gestite dal cliente per i pacchetti di implementazione .zip:
Quando SourceKMSKeyArn e KMSKeyArn sono specificati entrambi, Lambda utilizza la chiave KMSKeyArn per crittografare la versione decompressa del pacchetto utilizzata da Lambda per richiamare la funzione. Quando SourceKMSKeyArn è specificato ma KMSKeyArn non lo è, Lambda utilizza una Chiave gestita da AWS per crittografare la versione decompressa del pacchetto.
- Lambda console
-
Per aggiungere la crittografia della chiave gestita dal cliente durante la creazione di una funzione
Aprire la pagina Funzioni della console Lambda.
-
Scegli Crea funzione.
-
Scegliere Author from scratch (Crea da zero) o Container image (Immagine di container).
-
In Basic information (Informazioni di base) eseguire queste operazioni:
-
In Function name (Nome funzione), immettere il nome della funzione.
-
Per Runtime, scegliere la versione della lingua da utilizzare per la funzione.
-
Espandi Impostazioni avanzate, quindi seleziona Abilita la crittografia con una chiave gestita dal cliente AWS KMS.
-
Scegli una chiave gestita dal cliente.
-
Scegli Crea funzione.
Per rimuovere la crittografia con la chiave gestita dal cliente o per utilizzare una chiave diversa, è necessario caricare nuovamente il pacchetto di implementazione .zip.
Per aggiungere la crittografia con la chiave gestita dal cliente a una funzione esistente
Aprire la pagina Functions (Funzioni) della console Lambda.
-
Scegliere il nome della funzione.
-
Nel riquadro Origine del codice, scegli Carica da.
-
Scegli il file .zip o la posizione di Amazon S3.
-
Carica il file o inserisci la posizione Amazon S3.
-
Scegli Abilita la crittografia con una chiave gestita dal cliente AWS KMS.
-
Scegli una chiave gestita dal cliente.
-
Selezionare Salva.
- AWS CLI
-
Per aggiungere la crittografia della chiave gestita dal cliente durante la creazione di una funzione
Nel seguente esempio create-function:
-
--zip-file: specifica il percorso locale del pacchetto di implementazione .zip.
-
--source-kms-key-arn: specifica la chiave gestita dal cliente per crittografare la versione compressa del pacchetto di implementazione.
-
--kms-key-arn: specifica la chiave gestita dal cliente per crittografare le variabili d'ambiente e la versione compressa del pacchetto di implementazione.
aws lambda create-function \
--function-name myFunction \
--runtime nodejs22.x \
--handler index.handler \
--role arn:aws:iam::111122223333:role/service-role/my-lambda-role \
--zip-file fileb://myFunction.zip \
--source-kms-key-arn arn:aws:kms:us-east-1:111122223333:key/key-id \
--kms-key-arn arn:aws:kms:us-east-1:111122223333:key/key2-id
Nel seguente esempio create-function:
-
--code: specifica la posizione del file .zip in un bucket Amazon S3. È necessario utilizzare il parametro S3ObjectVersion solo per gli oggetti con controllo delle versioni.
-
--source-kms-key-arn: specifica la chiave gestita dal cliente per crittografare la versione compressa del pacchetto di implementazione.
-
--kms-key-arn: specifica la chiave gestita dal cliente per crittografare le variabili d'ambiente e la versione compressa del pacchetto di implementazione.
aws lambda create-function \
--function-name myFunction \
--runtime nodejs22.x --handler index.handler \
--role arn:aws:iam::111122223333:role/service-role/my-lambda-role \
--code S3Bucket=amzn-s3-demo-bucket,S3Key=myFileName.zip,S3ObjectVersion=myObjectVersion \
--source-kms-key-arn arn:aws:kms:us-east-1:111122223333:key/key-id \
--kms-key-arn arn:aws:kms:us-east-1:111122223333:key/key2-id
Per aggiungere la crittografia con la chiave gestita dal cliente a una funzione esistente
Nel seguente esempio di update-function-code:
-
--zip-file: specifica il percorso locale del pacchetto di implementazione .zip.
-
--source-kms-key-arn: specifica la chiave gestita dal cliente per crittografare la versione compressa del pacchetto di implementazione. Lambda utilizza una chiave di proprietà di AWS per crittografare il pacchetto decompresso per le invocazioni delle funzioni. Se desideri utilizzare una chiave gestita dal cliente per crittografare la versione decompressa del pacchetto, esegui il comando update-function-configuration con l'opzione --kms-key-arn.
aws lambda update-function-code \
--function-name myFunction \
--zip-file fileb://myFunction.zip \
--source-kms-key-arn arn:aws:kms:us-east-1:111122223333:key/key-id
Nel seguente esempio di update-function-code:
-
--s3-bucket: specifica la posizione del file .zip in un bucket Amazon S3.
-
--s3-key: specifica la chiave Amazon S3 del pacchetto di implementazione.
-
--s3-object-version: per gli oggetti con versione, la versione dell'oggetto del pacchetto di implementazione da utilizzare.
-
--source-kms-key-arn: specifica la chiave gestita dal cliente per crittografare la versione compressa del pacchetto di implementazione. Lambda utilizza una chiave di proprietà di AWS per crittografare il pacchetto decompresso per le invocazioni delle funzioni. Se desideri utilizzare una chiave gestita dal cliente per crittografare la versione decompressa del pacchetto, esegui il comando update-function-configuration con l'opzione --kms-key-arn.
aws lambda update-function-code \
--function-name myFunction \
--s3-bucket amzn-s3-demo-bucket \
--s3-key myFileName.zip \
--s3-object-version myObject Version
--source-kms-key-arn arn:aws:kms:us-east-1:111122223333:key/key-id
Per rimuovere la crittografia con la chiave gestita dal cliente da una funzione esistente
Nel seguente esempio di update-function-code, --zip-file specifica il percorso locale del pacchetto di implementazione .zip. Quando esegui questo comando senza l'opzione --source-kms-key-arn, per crittografare la versione compressa del pacchetto di implementazione Lambda utilizza una chiave di proprietà di AWS.
aws lambda update-function-code \
--function-name myFunction \
--zip-file fileb://myFunction.zip