

# Cifrado de los datos de ejecución duradera de AWS Lambda
<a name="durable-encryption"></a>

Con las [funciones duraderas de AWS Lambda](durable-functions.md), puede crear aplicaciones resilientes de varios pasos que se ejecutan durante un máximo de un año y utilizan puntos de comprobación para recuperar cada ejecución tras un error mediante la reproducción del trabajo completado.

Lambda siempre cifra en reposo los datos de ejecución duradera. También es posible configurar en la función una clave de AWS KMS propia administrada por el cliente para controlar la rotación, disponer de visibilidad para las auditorías o cumplir los requisitos de conformidad. Con una clave administrada por el cliente, solo las entidades principales autorizadas pueden leer los datos de ejecución.

## Funcionamiento del cifrado
<a name="durable-encryption-how-it-works"></a>

Una ejecución duradera de Lambda utiliza durante toda su duración la misma clave de KMS con la que se inició. El cambio o la eliminación de la clave de la función solo afecta a las ejecuciones que se inicien después del cambio. Consulte [Cuando la clave administrada por el cliente no está disponible](#durable-encryption-key-unavailable) para obtener información sobre el comportamiento de una ejecución duradera cuando su clave no está disponible.

Las claves administradas por el cliente ocasionan cargos de AWS KMS estándar. Para obtener más información sobre precios, consulta [precios de AWS Key Management Service](https://aws.amazon.com/kms/pricing/).

## Qué se cifra
<a name="durable-encryption-what-is-encrypted"></a>

Cuando se configura una clave administrada por el cliente en una función duradera, Lambda utiliza esa clave para cifrar en reposo los siguientes datos de la ejecución duradera:
+ La carga útil de entrada que se proporciona con cada solicitud `Invoke`.
+ Los datos de los puntos de comprobación que conserva la API `CheckpointDurableExecution`, incluidos los resultados y errores de los pasos, así como las entradas de invocación procesadas.
+ Los resultados y errores de la ejecución.
+ Los resultados y errores de devolución de llamada que se envían mediante `SendDurableExecutionCallbackSuccess` y `SendDurableExecutionCallbackFailure`.

**Las claves de nivel de función y de ejecución duradera son independientes**  
El `KMSKeyArn` de nivel de función que cifra las [variables de entorno](configuration-envvars-encryption.md), los [paquetes de implementación .zip](encrypt-zip-package.md) y las instantáneas de[ SnapStart](snapstart-security.md) es independiente de la `KMSKeyArn` de`DurableConfig` que cifra los datos de ejecución duradera. Configurar una no configura la otra. Puede usar la misma clave de KMS para ambas o claves de KMS diferentes.

## Configuración del cifrado con una clave administrada por el cliente
<a name="durable-encryption-setup"></a>

La configuración del cifrado con una clave administrada por el cliente para una función duradera consta de tres pasos. Realice los siguientes pasos en el orden indicado.

### Crear una clave administrada por el cliente
<a name="durable-encryption-create-key"></a>

Las funciones duraderas admiten claves de KMS de cifrado simétrico en la misma región de AWS que la función. No se admiten claves entre regiones. Para crear una clave simétrica administrada por el cliente, siga los pasos de [creación de claves de KMS de cifrado simétrico](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk) que se indican en la *Guía para desarrolladores de AWS Key Management Service*.

### Permisos
<a name="durable-encryption-permissions"></a>

Los permisos AWS KMS se conceden mediante la política de claves de KMS.

La configuración de una clave administrada por el cliente requiere permisos AWS KMS para la entidad principal que crea o actualiza la función. La invocación de una función duradera no requiere que el autor de la llamada tenga permisos AWS KMS. Lambda realiza el cifrado mediante su entidad principal de servicio.

#### Política de claves
<a name="durable-encryption-key-policy"></a>

Las [políticas de clave](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html) controlan el acceso a la clave administrada por el cliente. Cada clave administrada por el cliente debe tener exclusivamente una política de clave. En una política de claves, `Resource: "*"` hace referencia únicamente a la clave de KMS a la que está asociada la política, no a todas las claves de KMS de la cuenta.

La política de claves de una función duradera concede a cada entidad principal únicamente las acciones AWS KMS que necesita, con un ámbito limitado por el servicio y el ARN de la función. En las siguientes secciones se describen las declaraciones, las condiciones y un ejemplo completo.

**Declaraciones de política obligatorias**  
La política concede las siguientes capacidades:
+ **Habilitación de permisos de usuario de IAM** Concede al usuario raíz de la cuenta acceso incondicional para administrar la clave. Esta declaración no usa condiciones porque limitar su ámbito impediría rotar, actualizar o eliminar la clave.
+ **Permitir que Lambda use esta clave para las funciones duraderas**. Concede a la entidad principal de servicio de Lambda los permisos `kms:GenerateDataKey` y `kms:Decrypt`.
+ **Permitir que el rol de ejecución de la función descifre los datos de ejecución duradera**. Concede al rol de ejecución el permiso `kms:Decrypt` para leer el estado y hacer avanzar la ejecución.
+ **Permitir que el autor de la función describa esta clave**. Concede el permiso `kms:DescribeKey` para que Lambda pueda validar que la clave sea simétrica y esté habilitada durante `CreateFunction` o `UpdateFunctionConfiguration`.
+ **Permitir que el autor de la función valide esta clave para una función específica**. Concede los permisos `kms:GenerateDataKey` y `kms:Decrypt` para que Lambda pueda validar los permisos y el acceso a la clave con el contexto de cifrado de la función durante `CreateFunction` o `UpdateFunctionConfiguration`. Esto confirma que la política de claves acepta llamadas para esta función específica antes de crearla o actualizarla.
+ **Permitir operadores de ejecución duradera**. Concede a los operadores el permiso `kms:Decrypt` para las llamadas a `GetDurableExecution` y `GetDurableExecutionHistory` con `IncludeExecutionData=true`, `GetDurableExecutionState` y `StopDurableExecution`, así como para las API de devolución de llamada.

Como práctica recomendada, use entidades principales diferentes para el rol de ejecución, el autor de la función y el operador de ejecución duradera, de modo que cada identidad disponga únicamente de las capacidades que necesita.

**Condiciones de política recomendadas**  
La política usa las siguientes condiciones para limitar el ámbito del acceso:
+ [https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-via-service](https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-via-service) restringe el uso de la clave a las solicitudes que se enrutan mediante Lambda. La aplicación de esta condición a las declaraciones del rol de ejecución, del autor de la función y del operador impide que usen la clave directamente mediante AWS KMS.
+ [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) y [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) protegen contra el [problema del delegado confundido entre servicios](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html). Lambda reenvía estos valores cuando llama a AWS KMS con sus propias credenciales de servicio. Esta condición se aplica únicamente a la declaración de la entidad principal de servicio de Lambda. Las declaraciones del rol de ejecución, del autor de la función y del operador llaman a AWS KMS con las credenciales de sesión de acceso reenviado del autor de la llamada, que no incluyen estos encabezados.
+ [https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-encryption-context](https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-encryption-context) limita el ámbito de la clave a una función específica. Lambda agrega este valor al contexto de cifrado en cada llamada a AWS KMS relacionada con los datos de ejecución duradera.

En el siguiente ejemplo se combinan las declaraciones y condiciones anteriores.

**Example Política de claves para funciones duraderas**  

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Enable IAM User Permissions",
            "Effect": "Allow",
            "Principal": { "AWS": "arn:aws:iam::111122223333:root" },
            "Action": "kms:*",
            "Resource": "*"
        },
        {
            "Sid": "Allow Lambda to use this key for durable functions",
            "Effect": "Allow",
            "Principal": { "Service": "lambda.amazonaws.com" },
            "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "111122223333",
                    "aws:SourceArn": "arn:aws:lambda:us-east-1:111122223333:function:myDurableFunction",
                    "kms:EncryptionContext:aws:lambda:FunctionArn": "arn:aws:lambda:us-east-1:111122223333:function:myDurableFunction"
                }
            }
        },
        {
            "Sid": "Allow the function execution role to decrypt durable execution data",
            "Effect": "Allow",
            "Principal": { "AWS": "arn:aws:iam::111122223333:role/myDurableFunctionRole" },
            "Action": "kms:Decrypt",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "kms:ViaService": "lambda.us-east-1.amazonaws.com",
                    "kms:EncryptionContext:aws:lambda:FunctionArn": "arn:aws:lambda:us-east-1:111122223333:function:myDurableFunction"
                }
            }
        },
        {
            "Sid": "Allow the function author to describe this key",
            "Effect": "Allow",
            "Principal": { "AWS": "arn:aws:iam::111122223333:role/FunctionAuthor" },
            "Action": "kms:DescribeKey",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "kms:ViaService": "lambda.us-east-1.amazonaws.com"
                }
            }
        },
        {
            "Sid": "Allow the function author to validate this key for a specific function",
            "Effect": "Allow",
            "Principal": { "AWS": "arn:aws:iam::111122223333:role/FunctionAuthor" },
            "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "kms:ViaService": "lambda.us-east-1.amazonaws.com",
                    "kms:EncryptionContext:aws:lambda:FunctionArn": "arn:aws:lambda:us-east-1:111122223333:function:myDurableFunction"
                }
            }
        },
        {
            "Sid": "Allow durable execution operators",
            "Effect": "Allow",
            "Principal": { "AWS": "arn:aws:iam::111122223333:role/DurableExecutionOperator" },
            "Action": "kms:Decrypt",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "kms:ViaService": "lambda.us-east-1.amazonaws.com",
                    "kms:EncryptionContext:aws:lambda:FunctionArn": "arn:aws:lambda:us-east-1:111122223333:function:myDurableFunction"
                }
            }
        }
    ]
}
```

Para obtener más información sobre las políticas de claves de AWS KMS, consulte [Cómo cambiar una política de claves](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying.html#key-policy-modifying-how-to) en la *Guía para desarrolladores de AWS Key Management Service*.

### Configuración de una clave administrada por el cliente en una función duradera
<a name="durable-encryption-configure"></a>

La clave administrada por el cliente para los datos de ejecución duradera se configura mediante el campo `KMSKeyArn` del objeto `DurableConfig`. Establezca la clave al crear la función mediante [CreateFunction](https://docs.aws.amazon.com/lambda/latest/api/API_CreateFunction.html). Para actualizarla en una función duradera existente, use [UpdateFunctionConfiguration](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionConfiguration.html).

------
#### [ Lambda console ]

**Configuración de una clave administrada por el cliente en una función duradera existente**

1. Abra la página de [Funciones](https://console.aws.amazon.com/lambda/home#/functions) en la consola de Lambda.

1. Seleccione una función duradera.

1. Seleccione **Configuración** y, a continuación, **Ejecución duradera** en la barra de navegación izquierda.

1. Elija **Edit (Edición de)**.

1. En **Cifrado**, seleccione **Usar una clave administrada por el cliente** y, a continuación, seleccione una clave de KMS de la lista.

1. Seleccione **Save**.

------
#### [ AWS CLI ]

**Configuración de una clave administrada por el cliente al crear una función**

En el siguiente ejemplo de [create-function](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/create-function.html), la opción `--durable-config` especifica el ARN de la clave administrada por el cliente, junto con el tiempo de espera de la ejecución duradera y el periodo de retención.

```
aws lambda create-function \
  --function-name myDurableFunction \
  --runtime nodejs24.x \
  --handler index.handler \
  --role arn:aws:iam::111122223333:role/myDurableFunctionRole \
  --zip-file fileb://{{function.zip}} \
  --durable-config '{"KMSKeyArn":"{{arn:aws:kms:us-east-1:111122223333:key/key-id}}","ExecutionTimeout":3600,"RetentionPeriodInDays":30}'
```

**Configuración de una clave administrada por el cliente en una función duradera existente**

Use el comando [update-function-configuration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/update-function-configuration.html). Incluya todos los campos de `DurableConfig` que desee conservar, ya que `--durable-config` sustituye todo el objeto.

```
aws lambda update-function-configuration \
  --function-name myDurableFunction \
  --durable-config '{"KMSKeyArn":"{{arn:aws:kms:us-east-1:111122223333:key/key-id}}","ExecutionTimeout":3600,"RetentionPeriodInDays":30}'
```

**Eliminación de la clave administrada por el cliente de una función duradera**

Omita `KMSKeyArn` de `--durable-config`. Las ejecuciones existentes siguen usando la clave administrada por el cliente con la que se iniciaron. Las ejecuciones nuevas usan en su lugar el cifrado predeterminado.

```
aws lambda update-function-configuration \
  --function-name myDurableFunction \
  --durable-config '{"ExecutionTimeout":3600,"RetentionPeriodInDays":30}'
```

------
#### [ AWS CloudFormation ]

En un recurso de `AWS::Lambda::Function`, establezca la propiedad `KMSKeyArn` de `DurableConfig`:

```
Resources:
  MyDurableFunction:
    Type: AWS::Lambda::Function
    Properties:
      FunctionName: myDurableFunction
      Runtime: nodejs24.x
      Handler: index.handler
      Role: !GetAtt MyDurableFunctionRole.Arn
      Code:
        ZipFile: |
          // Your durable function code
      DurableConfig:
        KMSKeyArn: "arn:aws:kms:us-east-1:111122223333:key/key-id"
        ExecutionTimeout: 3600
        RetentionPeriodInDays: 30
```

------

**importante**  
Cada ejecución duradera utiliza la clave administrada por el cliente que estaba configurada en la función cuando se inició. El cambio o la eliminación de la clave solo afecta a las ejecuciones que se inicien después del cambio. Las ejecuciones en curso continúan usando la clave con la que se iniciaron hasta que se completen o produzcan un error.

## Lectura de los datos de ejecución duradera
<a name="durable-encryption-reading-data"></a>

Dos API de lectura devuelven datos de ejecución duradera:
+ `GetDurableExecution` devuelve el estado actual de una ejecución individual, incluida su carga útil de entrada, los datos del punto de comprobación más reciente y la información sobre el resultado o el error.
+ `GetDurableExecutionHistory` devuelve la lista ordenada de eventos emitidos por la ejecución, que muestra las entradas y los resultados de los puntos de comprobación, las entradas y los resultados de las invocaciones encadenadas, y el resultado final.

Ambas API aceptan un parámetro de solicitud `IncludeExecutionData`. Cuando `IncludeExecutionData` es `true`, Lambda usa las credenciales del autor de la llamada para llamar a `kms:Decrypt` en la clave administrada por el cliente. A continuación, Lambda devuelve en la respuesta los datos de ejecución descifrados. La identidad del autor de la llamada debe tener el permiso `kms:Decrypt` en la clave administrada por el cliente.

Cuando `IncludeExecutionData` es `false`, Lambda no llama a AWS KMS ni descifra los datos de ejecución, y la respuesta establece `ExecutionDataIncluded` en `false`. La respuesta sigue incluyendo `DurableConfig`, que contiene el ARN de la clave administrada por el cliente que utilizó la ejecución. El valor predeterminado de `IncludeExecutionData` es `false`, por lo que los autores de llamadas que solo necesitan metadatos no requieren permisos AWS KMS.

**Ejemplo: respuesta de `GetDurableExecution` con `IncludeExecutionData=false`**

```
{
    "DurableExecutionArn": "arn:aws:lambda:us-east-1:111122223333:function:myDurableFunction:execution:exec-abc123",
    "DurableExecutionName": "exec-abc123",
    "FunctionArn": "arn:aws:lambda:us-east-1:111122223333:function:myDurableFunction",
    "StartTimestamp": 1733256000,
    "Status": "RUNNING",
    "ExecutionDataIncluded": false,
    "DurableConfig": {
        "ExecutionTimeout": 3600,
        "KMSKeyArn": "arn:aws:kms:us-east-1:111122223333:key/key-id",
        "RetentionPeriodInDays": 30
    }
}
```

## Invocaciones encadenadas
<a name="durable-encryption-chained-invokes"></a>

Cuando una función duradera usa una invocación encadenada para llamar a otra función duradera, Lambda considera la ejecución secundaria como una ejecución duradera independiente: tiene su propio ID de ejecución, su propia secuencia de puntos de comprobación y su propia clave administrada por el cliente. La configuración de la clave administrada por el cliente de la ejecución principal no afecta a los datos de la ejecución secundaria, y la configuración de la clave administrada por el cliente de la ejecución secundaria no afecta a los datos de la ejecución principal.

**Permisos**  
La entidad principal de servicio de Lambda debe tener los permisos `kms:GenerateDataKey` y `kms:Decrypt` en la clave administrada por el cliente de la función secundaria. Si las funciones principal y secundaria usan claves administradas por el cliente diferentes, debe conceder por separado a la entidad principal de servicio acceso a cada clave. El rol de ejecución de la función principal no necesita permisos en la clave administrada por el cliente de la función secundaria.

**Identificación de la clave que cifró cada ejecución**  
Tanto `GetDurableExecution` como `ListDurableExecutionsByFunction` devuelven el ARN de la clave administrada por el cliente que cifró cada ejecución. Use estas API para confirmar qué clave estaba vigente cuando se inició una ejecución principal o secundaria.

## Almacenamiento en caché de claves de datos
<a name="durable-encryption-data-key-caching"></a>

Para reducir el volumen de llamadas a AWS KMS y mejorar la disponibilidad durante las interrupciones del servicio, Lambda almacena en caché durante un máximo de 15 minutos una clave de datos generada a partir de la clave administrada por el cliente. Mientras la caché permanece activa, Lambda reutiliza la misma clave de datos en las operaciones de una ejecución y entre las ejecuciones iniciadas durante el intervalo de caché.

**Coste**  
El costo de AWS KMS por ejecución se mantiene bajo, ya que Lambda llama a `GenerateDataKey` como máximo una vez por intervalo de caché, no una vez por cada punto de comprobación. Con tasas de solicitudes elevadas, el costo por ejecución disminuye aún más porque un mayor número de ejecuciones comparte cada clave de datos almacenada en caché. Se le cobran las llamadas AWS KMS que Lambda realiza efectivamente, no cada punto de comprobación ni cada lectura.

**Estabilidad estática**  
Las claves de datos permanecen almacenadas en caché durante un máximo de 15 minutos. Los cambios en la clave surten efecto en la siguiente actualización de la caché. Durante interrupciones prolongadas del servicio, Lambda continúa respondiendo desde la caché, lo que permite que las ejecuciones en curso sigan en funcionamiento.

**CloudTrail**  
Debido al almacenamiento en caché de las claves de datos, en CloudTrail se muestran menos eventos `GenerateDataKey` que ejecuciones o puntos de comprobación. Consulte [Supervisión de las claves de KMS para funciones duraderas](#durable-encryption-monitoring) para ver ejemplos de eventos.

## Cuando la clave administrada por el cliente no está disponible
<a name="durable-encryption-key-unavailable"></a>

Si la clave administrada por el cliente con la que se inició una ejecución está desactivada, está programada para su eliminación o se ha revocado el acceso mediante la política de claves, la ejecución no puede continuar. En el siguiente punto de comprobación, Lambda marca la ejecución como fallida con un error AWS KMS que no admite reintentos. Restablecer el acceso a la clave no reanuda automáticamente la ejecución. Debe iniciar una nueva ejecución.

Las API que leen o escriben cargas útiles también fallan cuando la clave no está disponible. Pueden devolver una de las siguientes excepciones:
+ `KMSAccessDeniedException`: Lambda no pudo descifrar los datos de ejecución duradera porque se denegó el acceso a la clave de KMS.
+ `KMSDisabledException`: Lambda no pudo descifrar los datos de ejecución duradera porque la clave de KMS está desactivada.
+ `KMSInvalidStateException`: Lambda no pudo descifrar los datos de ejecución duradera porque el estado de la clave de KMS no es válido para `Decrypt`.
+ `KMSNotFoundException`: Lambda no pudo descifrar los datos de ejecución duradera porque no se encontró la clave de KMS.

Al restablecer el acceso a la clave de KMS, estas API de lectura vuelven a funcionar para las ejecuciones que ya fallaron. Las ejecuciones fallidas permanecen en ese estado. Debe iniciar una nueva ejecución.

Para consultar los metadatos de una ejecución mientras la clave de KMS no está disponible, llame a `GetDurableExecution` con `IncludeExecutionData=false`. Esta operación devuelve el estado de la ejecución, las marcas de tiempo y `DurableConfig`, incluido el ARN de la clave de KMS, sin llamar a AWS KMS.

Como Lambda almacena en caché las claves de datos, la desactivación de una clave no surte efecto de inmediato. Para obtener más información, consulte [Almacenamiento en caché de claves de datos](#durable-encryption-data-key-caching).

**importante**  
La eliminación de una clave de KMS de la que aún dependen ejecuciones en curso o retenidas destruye de forma permanente esas ejecuciones y su historial.

## Supervisión de las claves de KMS para funciones duraderas
<a name="durable-encryption-monitoring"></a>

Cuando se usa una clave administrada por el cliente con una función duradera, se puede utilizar [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html) para realizar un seguimiento de las llamadas a AWS KMS que Lambda efectúa en su nombre. Para obtener orientación general sobre la búsqueda de eventos AWS KMS, consulte [Búsqueda de actividad de la API de AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/logging-using-cloudtrail.html#searching-kms-ct).

Para confirmar que Lambda usa la clave según lo previsto, busque los siguientes campos en cada evento:
+ `eventName`: uno de `GenerateDataKey`, `Decrypt` o `DescribeKey`
+ `eventSource`: `kms.amazonaws.com`
+ `userIdentity.invokedBy`: `lambda.amazonaws.com`
+ `requestParameters.encryptionContext.aws:lambda:FunctionArn`: el ARN de la función duradera

Los siguientes ejemplos corresponden a eventos de CloudTrail generados por una llamada a `CreateFunction` o `UpdateFunctionConfiguration` que configura una clave administrada por el cliente en una función duradera. Lambda realiza tres llamadas a AWS KMS para validar la clave: una llamada real a `DescribeKey` y dos llamadas de prueba, una a `GenerateDataKey` y otra a `Decrypt`.

------
#### [ GenerateDataKey ]

Cuando se modifica o establece el valor de `KMSKeyArn` en `DurableConfig`, Lambda realiza una llamada de prueba a Tag3 con la clave administrada por el cliente para validar que la política de claves permita a Lambda derivar claves de datos para el contexto de cifrado de esta función. La llamada de prueba no realiza ninguna operación criptográfica, pero registra un evento completo de CloudTrail. El siguiente evento de ejemplo registra la operación `GenerateDataKey` de la llamada de prueba:

```
{
    "eventVersion": "1.11",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROA123456789EXAMPLE:example",
        "arn": "arn:aws:sts::111122223333:assumed-role/FunctionAuthor/example",
        "accountId": "111122223333",
        "accessKeyId": "ASIA123456789EXAMPLE",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AROA123456789EXAMPLE",
                "arn": "arn:aws:iam::111122223333:role/FunctionAuthor",
                "accountId": "111122223333",
                "userName": "FunctionAuthor"
            },
            "attributes": {
                "creationDate": "2026-01-15T16:54:42Z",
                "mfaAuthenticated": "false"
            }
        },
        "invokedBy": "lambda.amazonaws.com"
    },
    "eventTime": "2026-01-15T16:55:00Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "GenerateDataKey",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "lambda.amazonaws.com",
    "userAgent": "lambda.amazonaws.com",
    "errorCode": "DryRunOperationException",
    "errorMessage": "The request would have succeeded, but the DryRun option is set.",
    "requestParameters": {
        "encryptionContext": {
            "aws:lambda:FunctionArn": "arn:aws:lambda:us-east-1:111122223333:function:myDurableFunction"
        },
        "dryRun": true,
        "keyId": "arn:aws:kms:us-east-1:111122223333:key/key-id",
        "keySpec": "AES_256"
    },
    "responseElements": null,
    "additionalEventData": {
        "keyMaterialId": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0EXAMPLE"
    },
    "requestID": "a1b2c3d4-5678-90ab-cdef-EXAMPLEaaaaa",
    "eventID": "a1b2c3d4-5678-90ab-cdef-EXAMPLEbbbbb",
    "readOnly": true,
    "resources": [
        {
            "accountId": "111122223333",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-east-1:111122223333:key/key-id"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111122223333",
    "eventCategory": "Management"
}
```

------
#### [ Decrypt ]

Cuando se modifica o establece el valor de `KMSKeyArn` en `DurableConfig`, Lambda también realiza una llamada de prueba a `Decrypt` con la clave administrada por el cliente para validar que la política de claves permite a Lambda descifrar datos para el contexto de cifrado de esta función. La llamada de prueba usa `IGNORE_CIPHERTEXT`, por lo que no se requiere texto cifrado real. El siguiente evento de ejemplo registra la operación `Decrypt` de la llamada de prueba:

```
{
    "eventVersion": "1.11",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROA123456789EXAMPLE:example",
        "arn": "arn:aws:sts::111122223333:assumed-role/FunctionAuthor/example",
        "accountId": "111122223333",
        "accessKeyId": "ASIA123456789EXAMPLE",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AROA123456789EXAMPLE",
                "arn": "arn:aws:iam::111122223333:role/FunctionAuthor",
                "accountId": "111122223333",
                "userName": "FunctionAuthor"
            },
            "attributes": {
                "creationDate": "2026-01-15T16:54:42Z",
                "mfaAuthenticated": "false"
            }
        },
        "invokedBy": "lambda.amazonaws.com"
    },
    "eventTime": "2026-01-15T16:55:00Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "Decrypt",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "lambda.amazonaws.com",
    "userAgent": "lambda.amazonaws.com",
    "errorCode": "DryRunOperationException",
    "errorMessage": "The request would have succeeded, but the DryRun option is set.",
    "requestParameters": {
        "encryptionContext": {
            "aws:lambda:FunctionArn": "arn:aws:lambda:us-east-1:111122223333:function:myDurableFunction"
        },
        "dryRun": true,
        "keyId": "arn:aws:kms:us-east-1:111122223333:key/key-id",
        "dryRunModifiers": ["IGNORE_CIPHERTEXT"],
        "encryptionAlgorithm": "SYMMETRIC_DEFAULT"
    },
    "responseElements": null,
    "additionalEventData": {
        "keyMaterialId": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0EXAMPLE"
    },
    "requestID": "a1b2c3d4-5678-90ab-cdef-EXAMPLEaaaaa",
    "eventID": "a1b2c3d4-5678-90ab-cdef-EXAMPLEbbbbb",
    "readOnly": true,
    "resources": [
        {
            "accountId": "111122223333",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-east-1:111122223333:key/key-id"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111122223333",
    "eventCategory": "Management"
}
```

------
#### [ DescribeKey ]

Cuando se modifica o establece el valor de `KMSKeyArn` en `DurableConfig`, Lambda llama a `DescribeKey` para confirmar que la clave es simétrica y está habilitada antes de aceptar el cambio. A diferencia de las comprobaciones de `GenerateDataKey` y `Decrypt`, esta es una llamada real, no una llamada de prueba. El siguiente evento de ejemplo registra la operación `DescribeKey`:

```
{
    "eventVersion": "1.11",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROA123456789EXAMPLE:example",
        "arn": "arn:aws:sts::111122223333:assumed-role/FunctionAuthor/example",
        "accountId": "111122223333",
        "accessKeyId": "ASIA123456789EXAMPLE",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AROA123456789EXAMPLE",
                "arn": "arn:aws:iam::111122223333:role/FunctionAuthor",
                "accountId": "111122223333",
                "userName": "FunctionAuthor"
            },
            "attributes": {
                "creationDate": "2026-01-15T16:54:42Z",
                "mfaAuthenticated": "false"
            }
        },
        "invokedBy": "lambda.amazonaws.com"
    },
    "eventTime": "2026-01-15T16:55:00Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "DescribeKey",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "lambda.amazonaws.com",
    "userAgent": "lambda.amazonaws.com",
    "requestParameters": {
        "keyId": "arn:aws:kms:us-east-1:111122223333:key/key-id"
    },
    "responseElements": null,
    "requestID": "a1b2c3d4-5678-90ab-cdef-EXAMPLEaaaaa",
    "eventID": "a1b2c3d4-5678-90ab-cdef-EXAMPLEbbbbb",
    "readOnly": true,
    "resources": [
        {
            "accountId": "111122223333",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-east-1:111122223333:key/key-id"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111122223333",
    "eventCategory": "Management"
}
```

------

## Temas relacionados con el cifrado
<a name="durable-encryption-related"></a>
+ [Cifrado de datos en reposo para Lambda](security-encryption-at-rest.md)
+ [Asegurar las variables de entorno Lambda](configuration-envvars-encryption.md)
+ [Cifrado de los paquetes de implementación .zip de Lambda](encrypt-zip-package.md)
+ [Modelo de seguridad para Lambda SnapStart](snapstart-security.md)
+ [Configuración de las funciones duraderas de Lambda](durable-configuration.md)