

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à.

# Funzioni di rotazione Lambda
<a name="rotate-secrets_lambda-functions"></a>

In[Rotazione tramite funzione Lambda](rotate-secrets_lambda.md), una AWS Lambda funzione ruota il segreto. Gestione dei segreti AWS utilizza [etichette temporanee](whats-in-a-secret.md) per identificare le versioni segrete durante la rotazione.

Se Gestione dei segreti AWS non fornisce un [modello di funzione di rotazione](reference_available-rotation-templates.md) per il tipo segreto, puoi creare una funzione di rotazione personalizzata. Segui queste linee guida quando scrivi la tua funzione di rotazione:

**Le migliori pratiche per le funzioni di rotazione personalizzate**
+ Usa il [modello di rotazione generico](reference_available-rotation-templates.md#OTHER_rotation_templates) come punto di partenza.
+ Fai attenzione con le istruzioni di debug o di registrazione. Possono scrivere informazioni su Amazon CloudWatch Logs. Assicurati che i log non contengano informazioni sensibili.

  Per esempi di istruzioni di registro, consulta il codice [Gestione dei segreti AWS modelli di funzioni di rotazione](reference_available-rotation-templates.md) sorgente.
+ Per motivi di sicurezza, consente Gestione dei segreti AWS solo a una funzione di rotazione Lambda di ruotare direttamente il segreto. La funzione di rotazione non può chiamare un'altra funzione Lambda per ruotare il segreto.
+ Per indicazioni sul debug, consulta [Testing and debugging serverless applications](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-test-and-debug.html).
+ Se utilizzi binari e librerie esterne, ad esempio per connetterti a una risorsa, sei responsabile dell'applicazione di patch e del loro aggiornamento.
+ Package della funzione di rotazione e di tutte le dipendenze in un file ZIP, ad esempio*my-function.zip*.

**avvertimento**  
L'impostazione del parametro di concorrenza assegnato su un valore inferiore a 10 può causare una limitazione a causa di thread di esecuzione insufficienti per la funzione Lambda. Per ulteriori informazioni, consulta [Understanding Reserved Concurrency e Provisioned Concurrency](https://docs.aws.amazon.com/lambda/latest/dg/lambda-concurrency.html#reserved-and-provisioned) nella Developer Guide. AWS Lambda AWS Lambda 

## Quattro fasi in una funzione di rotazione
<a name="rotate-secrets_lambda-functions-code"></a>

**Topics**
+ [`createSecret`: crea una nuova versione del segreto](#w2aac21c11c29c11b5)
+ [**setSecret**: modifica le credenziali nel database o nel servizio](#w2aac21c11c29c11b7)
+ [**testSecret**: prova la nuova versione segreta](#w2aac21c11c29c11b9)
+ [**finishSecret**: Termina la rotazione](#w2aac21c11c29c11c11)

### `createSecret`: crea una nuova versione del segreto
<a name="w2aac21c11c29c11b5"></a>

Il metodo verifica `createSecret` innanzitutto se esiste un segreto chiamando [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager.html#SecretsManager.Client.get_secret_value](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager.html#SecretsManager.Client.get_secret_value)con il pass-in`ClientRequestToken`. Se non c'è alcun segreto, crea un nuovo segreto con [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager.html#SecretsManager.Client.create_secret](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager.html#SecretsManager.Client.create_secret)e il token come. `VersionId` Quindi genera un nuovo valore segreto con [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager.html#SecretsManager.Client.get_random_password](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager.html#SecretsManager.Client.get_random_password). Successivamente chiama [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager.html#SecretsManager.Client.put_secret_value](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager.html#SecretsManager.Client.put_secret_value)per memorizzarlo con l'etichetta `AWSPENDING` di staging. La memorizzazione del nuovo valore del segreto in `AWSPENDING` aiuta a garantire l'idempotenza. Se per un motivo qualsiasi la rotazione non viene eseguita, puoi fare riferimento a quel valore del segreto nelle chiamate successive. Consulta [Come posso rendere idempotente la mia funzione Lambda](https://aws.amazon.com/premiumsupport/knowledge-center/lambda-function-idempotent/).

**Suggerimenti per scrivere una funzione di rotazione personalizzata**
+ Assicurati che il nuovo valore segreto includa solo caratteri validi per il database o il servizio. Escludi i caratteri utilizzando il parametro `ExcludeCharacters`. 
+ Mentre testate la vostra funzione, utilizzate le fasi AWS CLI per vedere la versione: chiamate [https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/describe-secret.html](https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/describe-secret.html)e guardate`VersionIdsToStages`.
+ Per Amazon RDS MySQL, nella rotazione alternata degli utenti, Secrets Manager crea un utente clonato con un nome non più lungo di 16 caratteri. Puoi modificare la funzione di rotazione per consentire nomi utente più lunghi. La versione 5.7 e successive di MySQL supportano nomi utente fino a 32 caratteri, tuttavia Secrets Manager aggiunge "\$1clone" (sei caratteri) alla fine del nome utente, quindi è necessario mantenere il nome utente a un massimo di 26 caratteri.

### **setSecret**: modifica le credenziali nel database o nel servizio
<a name="w2aac21c11c29c11b7"></a>

Il metodo `setSecret` modifica la credenziale nel database o nel servizio in modo che corrisponda al nuovo valore segreto nella `AWSPENDING` versione del segreto. 

**Suggerimenti per scrivere una funzione di rotazione personalizzata**
+ Se passate istruzioni a un servizio che interpreta le istruzioni, ad esempio un database, utilizzate la parametrizzazione delle query. *Per ulteriori informazioni, vedere [Query Parameterization Cheat Sheet sul](https://cheatsheetseries.owasp.org/cheatsheets/Query_Parameterization_Cheat_Sheet.html) sito Web OWASP.*
+ La funzione di rotazione è un "privileged deputy" che ha l'autorizzazione ad accedere e modificare le credenziali del cliente sia nel segreto di Gestione dei segreti che nella risorsa di destinazione. Per evitare un potenziale [attacco confused deputy](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html), devi assicurarti che un utente malintenzionato non possa utilizzare la funzione per accedere ad altre risorse. Prima di aggiornare le credenziali:
  + Verifica che la credenziale nella versione `AWSCURRENT` del segreto sia valida. Se la credenziale `AWSCURRENT` non è valida, abbandona il tentativo di rotazione.
  + Verifica che i valori dei segreti `AWSCURRENT` e `AWSPENDING` si riferiscano alla stessa risorsa. Per il nome utente e la password, verifica che i nomi utente `AWSCURRENT` e `AWSPENDING` siano uguali. 
  + Verifica che la risorsa del servizio di destinazione sia la stessa. Per un database, verifica che i nomi degli host `AWSCURRENT` e `AWSPENDING` siano uguali.
+ In rari casi, potresti voler personalizzare una funzione di rotazione esistente per un database. Ad esempio, con la rotazione alternata degli utenti, Secrets Manager crea l'utente clonato copiando [i parametri di configurazione di runtime](https://www.postgresql.org/docs/8.0/runtime-config.html) del primo utente. Se desideri includere più attributi o modificare quelli concessi all'utente clonato, devi aggiornare il codice nella funzione `set_secret`. 

### **testSecret**: prova la nuova versione segreta
<a name="w2aac21c11c29c11b9"></a>

Successivamente, la funzione di rotazione Lambda esegue il test della versione `AWSPENDING` del segreto utilizzando questa versione per accedere al database o al servizio. Le funzioni di rotazione basate su [Modelli di funzione di rotazione](reference_available-rotation-templates.md) verificano il nuovo segreto utilizzando un accesso in lettura. 

### **finishSecret**: Termina la rotazione
<a name="w2aac21c11c29c11c11"></a>

Infine, la funzione di rotazione Lambda sposta l'etichetta `AWSCURRENT` dalla precedente versione segreta a questa versione, che rimuove anche l'etichetta `AWSPENDING` nella stessa chiamata API. Secrets Manager aggiunge l'etichetta di gestione temporanea `AWSPREVIOUS` alla versione precedente, in modo da conservare l'ultima versione nota del segreto. 

Il metodo **finish\$1secret** consente [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager.html#SecretsManager.Client.update_secret_version_stage](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager.html#SecretsManager.Client.update_secret_version_stage)di spostare l'etichetta di staging `AWSCURRENT` dalla versione segreta precedente alla nuova versione segreta. Gestione dei segreti aggiunge automaticamente l'etichetta di gestione temporanea `AWSPREVIOUS` alla versione precedente, in modo da conservare l'ultima versione nota del segreto. 

**Suggerimenti per scrivere una funzione di rotazione personalizzata**
+ Non rimuovere `AWSPENDING` prima di questo punto e non rimuoverlo utilizzando una chiamata API separata, poiché ciò può indicare a Secrets Manager che la rotazione non è stata completata correttamente. Secrets Manager aggiunge l'etichetta di gestione temporanea `AWSPREVIOUS` alla versione precedente, in modo da conservare l'ultima versione nota del segreto. 

Quando la rotazione ha esito positivo, l'etichetta di gestione temporanea `AWSPENDING` potrebbe essere collegata alla stessa versione come la versione `AWSCURRENT`, oppure potrebbe non essere collegata a nessuna versione. Se l'etichetta di gestione temporanea `AWSPENDING` è presente ma non è collegata alla stessa versione come `AWSCURRENT`, qualsiasi successiva chiamata di rotazione presuppone che una precedente richiesta di rotazione sia ancora in corso e viene segnalato un errore. Quando la rotazione non ha esito positivo, l'etichetta di gestione temporanea `AWSPENDING` potrebbe essere collegata a una versione di un segreto vuota. Per ulteriori informazioni, consulta [Risoluzione dei problemi della rotazione](troubleshoot_rotation.md).