

# Almacenamiento efímero de tareas de Fargate para Amazon ECS
<a name="fargate-task-storage"></a>

Cuando se aprovisiona, cada tarea de Amazon ECS alojada en contenedores Linux en AWS Fargate recibe el siguiente almacenamiento efímero para montajes de enlace. Esto se puede montar y compartir entre contenedores que utilizan los parámetros `volumes`, `mountPoints` y `volumesFrom` de la definición de tareas. Este parámetro no es compatible con contenedores de Windows en AWS Fargate.

## Versiones de plataforma de contenedores Fargate Linux
<a name="fargate-task-storage-linux-pv"></a>

### Versión 1.4.0 o posteriores
<a name="fargate-task-storage-pv14"></a>

De forma predeterminada, las tareas de Amazon ECS alojadas en Fargate que utilizan la versión `1.4.0` de la plataforma o una posterior reciben un mínimo de 20 GiB de almacenamiento efímero. La cantidad total de almacenamiento efímero se puede aumentar hasta un máximo de 200 GiB. Para hacerlo, especifique el parámetro `ephemeralStorage` en la definición de tareas.

La imagen del contenedor comprimida y sin comprimir extraída para la tarea se almacena en el almacenamiento efímero. Para determinar la cantidad total de almacenamiento efímero que debe utilizar la tarea, debe restar la cantidad de almacenamiento que utiliza la imagen de contenedor de la cantidad total de almacenamiento efímero que se asigna a su tarea.

Para las tareas que utilizan la versión `1.4.0` de la plataforma o una posterior que se lanzaron a partir del 28 de mayo de 2020, el almacenamiento efímero se cifra con un algoritmo de cifrado AES-256. Este algoritmo utiliza una clave de cifrado de AWS, o usted puede crear su propia clave administrada por el cliente. Para obtener más información, consulte [Claves administradas por el cliente para el almacenamiento efímero de AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/fargate-storage-encryption.html).

Para las tareas que utilizan la versión de la plataforma `1.4.0` o una posterior y que se lanzaron a partir del 18 de noviembre de 2022, el uso efímero del almacenamiento se informa a través del punto de conexión de metadatos de tareas. Las aplicaciones de sus tareas pueden consultar el punto de conexión de metadatos de las tareas, versión 4, para obtener su tamaño reservado de almacenamiento efímero y la cantidad utilizada. 

 Además, el tamaño reservado para el almacenamiento efímero y la cantidad utilizada se envían a Información de contenedores de Amazon CloudWatch si activa Container Insights.

**nota**  
Fargate reserva espacio en el disco. Solo lo usa Fargate. No se cobra por esto. No se muestra en estas métricas. Sin embargo, puede ver este almacenamiento adicional en otras herramientas, como `df`.

### Versión 1.3.0 o anteriores
<a name="fargate-task-storage-pv13"></a>

Para las tareas de Amazon ECS alojadas en Fargate que utilizan la versión `1.3.0` de la plataforma o una anterior, cada tarea recibe el siguiente almacenamiento efímero.
+ 10 GB de almacenamiento de capa de Docker
**nota**  
Esta cantidad incluye artefactos de imagen de contenedor comprimida y no comprimida.
+ 4 GB adicionales para montaje de volúmenes. Esto se puede montar y compartir entre contenedores que utilizan los parámetros `volumes`, `mountPoints` y `volumesFrom` de la definición de tareas.

## Versiones de plataforma de contenedores Windows Fargate
<a name="fargate-task-storage-windows-pv"></a>

### Versión 1.0.0 o posteriores
<a name="fargate-task-storage-pvws1"></a>

De forma predeterminada, las tareas de Amazon ECS alojadas en Fargate que utilizan la versión `1.0.0` de la plataforma o una posterior reciben un mínimo de 20 GiB de almacenamiento efímero. La cantidad total de almacenamiento efímero se puede aumentar hasta un máximo de 200 GiB. Para hacerlo, especifique el parámetro `ephemeralStorage` en la definición de tareas.

La imagen del contenedor comprimida y sin comprimir extraída para la tarea se almacena en el almacenamiento efímero. Para determinar la cantidad total de almacenamiento efímero que debe utilizar la tarea, debe restar la cantidad de almacenamiento que utiliza la imagen de contenedor de la cantidad total de almacenamiento efímero que se asigna a su tarea.

Para obtener más información, consulte [Uso de montajes de unión con Amazon ECS](bind-mounts.md).

# Claves administradas por el cliente para el almacenamiento efímero de AWS Fargate para Amazon ECS
<a name="fargate-storage-encryption"></a>

AWS Fargate admite claves administradas por el cliente para cifrar los datos de las tareas de Amazon ECS almacenadas en un almacenamiento efímero para ayudar a los clientes que gestionan datos confidenciales a cumplir sus políticas de seguridad internas. Los clientes siguen disfrutando de las ventajas de Fargate sin servidor y, al mismo tiempo, ofrecen a los auditores de conformidad una mayor visibilidad del cifrado de almacenamiento autoadministrado. Si bien Fargate tiene cifrado de almacenamiento efímero administrado por Fargate de forma predeterminada, los clientes también pueden usar sus propias claves autoadministradas al cifrar datos confidenciales, como información financiera o relacionada con la salud.

Puede importar sus propias claves a AWS KMS o crearlas en AWS KMS. Estas claves autoadministradas se almacenan en AWS KMS y llevan a cabo acciones estándar del ciclo de vida de AWS KMS, como rotar, deshabilitar y eliminar. Puede auditar el acceso a las claves y su uso en los registros de CloudTrail.

De forma predeterminada, la clave KMS admite 50 000 concesiones por clave. Fargate utiliza una única concesión de AWS KMS por cada tarea de clave administrada por el cliente, por lo que admite hasta 50 000 tareas simultáneas para una clave. Si desea aumentar este número, puede solicitar un aumento del límite, que se aprueba caso por caso.

Fargate no cobra nada adicional por usar claves administradas por el cliente. Solo se le cobra el precio estándar por usar las claves de AWS KMS para el almacenamiento y las solicitudes de API.

**Topics**
+ [Creación de una clave de cifrado para el almacenamiento efímero de Fargate para Amazon ECS](fargate-create-storage-key.md)
+ [Administración de claves de AWS KMS para el almacenamiento efímero de Fargate para Amazon ECS](fargate-managing-kms-key.md)

# Creación de una clave de cifrado para el almacenamiento efímero de Fargate para Amazon ECS
<a name="fargate-create-storage-key"></a>

Cree claves administradas por el cliente para cifrar los datos almacenados en el almacenamiento efímero de Fargate.

**nota**  
El cifrado de almacenamiento efímero de Fargate con claves administradas por el cliente no está disponible para los clústeres de tareas de Windows.  
El cifrado de almacenamiento efímero de Fargate con claves administradas por el cliente no estaba disponible en las `platformVersions` anteriores a la `1.4.0`.  
Fargate reserva espacio en un almacenamiento efímero que solo utiliza Fargate y no se cobra por el espacio. La asignación puede diferir de las tareas clave no administradas por el cliente, pero el espacio total sigue siendo el mismo. Puede ver este cambio en herramientas como `df`.  
Las claves multiregión no son compatibles con el almacenamiento efímero de Fargate  
Los alias de la clave KMS no son compatibles con el almacenamiento efímero de Fargate

Para crear una clave administrada por el cliente (CMK) a fin de cifrar el almacenamiento efímero para Fargate en AWS KMS, siga estos pasos.

1. Vaya a [https://console.aws.amazon.com/kms](https://console.aws.amazon.com/kms).

1. Siga las instrucciones de [Creating Keys](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html) en la [Guía para desarrolladores de AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html).

1. Al crear su clave de AWS KMS, asegúrese de proporcionar los permisos de operaciones de AWS KMS pertinentes al servicio Fargate en las políticas de claves. Las siguientes operaciones de API deben estar permitidas en la política para utilizar su clave administrada por el cliente con los recursos de su clúster de Amazon ECS.
   + `kms:GenerateDataKeyWithoutPlainText`: llama a `GenerateDataKeyWithoutPlainText` para generar una clave de datos cifrada a partir de la clave de AWS KMS proporcionada.
   + `kms:CreateGrant`: agrega una concesión a una clave administrada por el cliente. Le concede acceso de control a una clave de AWS KMS especificada, lo que le permite acceder a las operaciones de concesión que necesita Fargate para Amazon ECS. Para obtener más información sobre el [uso de concesiones](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html), consulte la [Guía para desarrolladores de AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html). Esto permite a Fargate para Amazon ECS realizar las siguientes tareas:
     + Llamar a `Decrypt` para AWS KMS a fin de obtener la clave de cifrado para descifrar los datos de almacenamiento efímero.
     + Configurar una entidad principal que se retire para permitir que el servicio `RetireGrant`.
   + `kms:DescribeKey`: proporciona detalles de la clave administrada por el cliente para permitir que Amazon ECS valide la clave si es simétrica y está habilitada.

   En el siguiente ejemplo, se muestra una política de claves de AWS KMS que se aplicaría a la clave de destino para el cifrado. Para utilizar las instrucciones de la política de ejemplo, sustituya los *marcadores de posición del usuario* con su propia información. Como siempre, configure solo los permisos que necesite; sin embargo, deberá proporcionar a AWS KMS los permisos para un usuario, como mínimo, a efectos de evitar errores.

   ```
   {
         "Sid": "Allow generate data key access for Fargate tasks.",
         "Effect": "Allow",
         "Principal": { "Service":"fargate.amazonaws.com" },
         "Action": [
           "kms:GenerateDataKeyWithoutPlaintext"
         ],
         "Condition": {
           "StringEquals": {
             "kms:EncryptionContext:aws:ecs:clusterAccount": [
               "customerAccountId"
             ],
             "kms:EncryptionContext:aws:ecs:clusterName": [
                "clusterName"
             ]   
           }
         },
         "Resource": "*"
       },
       {
         "Sid": "Allow grant creation permission for Fargate tasks.",
         "Effect": "Allow",
         "Principal": { "Service":"fargate.amazonaws.com" },
         "Action": [
           "kms:CreateGrant"
         ],
         "Condition": {
           "StringEquals": {
             "kms:EncryptionContext:aws:ecs:clusterAccount": [
               "customerAccountId"
             ],
             "kms:EncryptionContext:aws:ecs:clusterName": [
                "clusterName"
             ]   
           },
          "ForAllValues:StringEquals": {
             "kms:GrantOperations": [
                "Decrypt"
             ]
          }
         },
         "Resource": "*"
       },
       {
         "Sid": "Allow describe key permission for cluster operator - CreateCluster and UpdateCluster.",
         "Effect": "Allow",
         "Principal": { "AWS":"arn:aws:iam::customerAccountId:role/customer-chosen-role" },
         "Action": [
           "kms:DescribeKey"
         ],
         "Resource": "*"
       }
   ```

   Las tareas de Fargate utilizan las claves de contexto de cifrado `aws:ecs:clusterAccount` y `aws:ecs:clusterName` para las operaciones criptográficas con la clave. Los clientes deben agregar estos permisos para restringir el acceso a una cuenta o un clúster específicos. Utilice el nombre del clúster y no el ARN cuando especifique el clúster.

   Para obtener más información, consulte [Contexto de cifrado](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context) en la [Guía para desarrolladores de AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html).

   Al crear o actualizar un clúster, tiene la opción de utilizar la clave de condición `fargateEphemeralStorageKmsKeyId`. Esta clave de condición permite a los clientes tener un control más detallado de las políticas de IAM. Las actualizaciones de la configuración de `fargateEphemeralStorageKmsKeyId` solo se aplican a las nuevas implementaciones de servicios.

   A continuación, se muestra un ejemplo de cómo permitir a los clientes conceder permisos únicamente a un conjunto específico de claves de AWS KMS aprobadas.

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "ecs:CreateCluster",
           "ecs:UpdateCluster"
         ],
         "Resource": "*",
         "Condition": {
           "StringEquals": {
             "ecs:fargate-ephemeral-storage-kms-key": "arn:aws:kms:us-west-2:111122223333:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
           }
         }
       }
     ]
   }
   ```

------

   A continuación, se muestra un ejemplo de cómo denegar los intentos de eliminación de las claves de AWS KMS que ya están asociadas a un clúster.

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": {
       "Effect": "Deny",
       "Action": [
           "ecs:CreateCluster",
           "ecs:UpdateCluster"
       ],
       "Resource": "*",
       "Condition": {
         "Null": {
           "ecs:fargate-ephemeral-storage-kms-key": "true"
         }
       }
     }
   }
   ```

------

   Los clientes pueden comprobar si sus tareas no administradas o de servicio están cifradas con la clave mediante los comandos AWS CLI, `describe-tasks`, `describe-cluster` o `describe-services`.

   Para obtener más información, consulte [Condition keys for AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html) en la [Guía para desarrolladores de AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html).

------
#### [ Consola de administración de AWS ]

1. Abra la consola en [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2).

1. Seleccione **Clústeres** en el menú de navegación de la izquierda y **Crear clúster** en la parte superior derecha, o bien elija un clúster existente. Para un clúster existente, seleccione **Actualizar clúster** en la parte superior derecha.

1. En la sección **Cifrado** del flujo de trabajo, tendrá la opción de seleccionar su clave de AWS KMS en **Almacenamiento administrado** y **Almacenamiento efímero de Fargate**. También puede elegir **Crear una clave de AWS KMS** desde aquí.

1. Elija **Crear** una vez que haya terminado de crear el nuevo clúster o **Actualizar** si estaba actualizando uno existente.

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

A continuación, se muestra un ejemplo de cómo crear un clúster y configurar el almacenamiento efímero de Fargate mediante la AWS CLI (sustituya los valores en *color rojo* por los suyos):

```
aws ecs create-cluster --cluster clusterName \
--configuration '{"managedStorageConfiguration":{"fargateEphemeralStorageKmsKeyId":"arn:aws:kms:us-west-2:012345678901:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"}}'
{
    "cluster": {
        "clusterArn": "arn:aws:ecs:us-west-2:012345678901:cluster/clusterName",
        "clusterName": "clusterName",
        "configuration": {
            "managedStorageConfiguration": {
                "fargateEphemeralStorageKmsKeyId": "arn:aws:kms:us-west-2:012345678901:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
            }
        },
        "status": "ACTIVE",
        "registeredContainerInstancesCount": 0,
        "runningTasksCount": 0,
        "pendingTasksCount": 0,
        "activeServicesCount": 0,
        "statistics": [],
        "tags": [],
        "settings": [],
        "capacityProviders": [],
        "defaultCapacityProviderStrategy": []
    },
    "clusterCount": 5
}
```

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

A continuación, se muestra un ejemplo de plantilla para crear un clúster y configurar el almacenamiento efímero de Fargate mediante CloudFormation (sustituya los valores en *color rojo* por los suyos):

```
AWSTemplateFormatVersion: 2010-09-09
Resources:
  MyCluster: 
    Type: AWS::ECS::Cluster
    Properties: 
      ClusterName: "clusterName" 
      Configuration:
        ManagedStorageConfiguration:
          FargateEphemeralStorageKmsKeyId: "arn:aws:kms:us-west-2:012345678901:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
```

------

# Administración de claves de AWS KMS para el almacenamiento efímero de Fargate para Amazon ECS
<a name="fargate-managing-kms-key"></a>

Tras crear o importar la clave de AWS KMS para cifrar el almacenamiento efímero de Fargate, la administrará de la misma manera en que lo haría con cualquier otra clave de AWS KMS.

**Rotación automática de claves de AWS KMS**  
Puede habilitar la rotación automática de las claves o rotarlas manualmente. La rotación automática de claves hace rotar la clave todos los años mediante la generación de nuevo material criptográfico para la clave. AWS KMS también guarda todas las versiones anteriores del material criptográfico, por lo que podrá descifrar cualquier dato que utilicen las versiones anteriores de la clave. AWS KMS no eliminará el material rotado hasta que usted elimine la clave.

La rotación automática de claves se puede habilitar y deshabilitar en cualquier momento.

**Deshabilitación o revocación de claves de AWS KMS**  
Si deshabilita una clave administrada por el cliente en AWS KMS, esto no repercute en la ejecución de las tareas, y las claves seguirán funcionando durante todo su ciclo de vida. Si una nueva tarea usa la clave deshabilitada o revocada, la tarea falla porque no puede acceder a la clave. Debe configurar una alarma de CloudWatch o similar para asegurarse de que nunca se necesite una clave deshabilitada para descifrar los datos ya cifrados.

**Eliminación de claves de AWS KMS**  
Eliminar las claves siempre debe ser el último recurso y solo debe hacerse si está seguro de que la clave eliminada no volverá a necesitarse. Las tareas nuevas que intenten usar la clave eliminada fallarán porque no podrán acceder a ella. AWS KMS recomienda deshabilitar una clave en lugar de eliminarla. Si cree que es necesario eliminar una clave, le sugerimos que la deshabilite primero y configure una alarma de CloudWatch para asegurarse de que no es necesaria. Si elimina una clave, AWS KMS espera al menos siete días para que cambie de opinión.

**Auditoría del acceso a las claves de AWS KMS**  
Puede usar los registros de CloudTrail para auditar el acceso a su clave de AWS KMS. Puede comprobar las operaciones de AWS KMS `CreateGrant`, `GenerateDataKeyWithoutPlaintext` y `Decrypt`. Estas operaciones también muestran la `aws:ecs:clusterAccount` y el `aws:ecs:clusterName` como parte del `EncryptionContext` registrado en CloudTrail.

A continuación, se muestran ejemplos de eventos de CloudTrail para `GenerateDataKeyWithoutPlaintext`, `GenerateDataKeyWithoutPlaintext (DryRun)`, `CreateGrant`, `CreateGrant (DryRun)` y `RetireGrant` (sustituya los valores en *color rojo* por los suyos).

------
#### [ GenerateDataKeyWithoutPlaintext ]

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AWSService",
        "invokedBy": "ec2-frontend-api.amazonaws.com"
    },
    "eventTime": "2024-04-23T18:08:13Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "GenerateDataKeyWithoutPlaintext",
    "awsRegion": "us-west-2",
    "sourceIPAddress": "ec2-frontend-api.amazonaws.com",
    "userAgent": "ec2-frontend-api.amazonaws.com",
    "requestParameters": {
        "numberOfBytes": 64,
        "keyId": "arn:aws:kms:us-west-2:account-id:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
        "encryptionContext": {
            "aws:ecs:clusterAccount": "account-id",
            "aws:ebs:id": "vol-xxxxxxx",
            "aws:ecs:clusterName": "cluster-name"
        }
    },
    "responseElements": null,
    "requestID": "a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
    "eventID": "a1b2c3d4-5678-90ab-cdef-EXAMPLE33333",
    "readOnly": true,
    "resources": [
        {
            "accountId": "AWS Internal",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-west-2:account-id:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "account-id",
    "sharedEventID": "a1b2c3d4-5678-90ab-cdef-EXAMPLEaaaaa",
    "eventCategory": "Management"
}
```

------
#### [ GenerateDataKeyWithoutPlaintext (DryRun) ]

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AWSService",
        "invokedBy": "fargate.amazonaws.com"
    },
    "eventTime": "2024-04-23T18:08:11Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "GenerateDataKeyWithoutPlaintext",
    "awsRegion": "us-west-2",
    "sourceIPAddress": "fargate.amazonaws.com",
    "userAgent": "fargate.amazonaws.com",
    "errorCode": "DryRunOperationException",
    "errorMessage": "The request would have succeeded, but the DryRun option is set.",
    "requestParameters": {
        "keyId": "arn:aws:kms:us-west-2:account-id:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
        "dryRun": true,
        "numberOfBytes": 64,
        "encryptionContext": {
            "aws:ecs:clusterAccount": "account-id",
            "aws:ecs:clusterName": "cluster-name"
        }
    },
    "responseElements": null,
    "requestID": "a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
    "eventID": "a1b2c3d4-5678-90ab-cdef-EXAMPLE33333",
    "readOnly": true,
    "resources": [
        {
            "accountId": "AWS Internal",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-west-2:account-id:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "account-id",
    "sharedEventID": "a1b2c3d4-5678-90ab-cdef-EXAMPLEaaaaa",
    "eventCategory": "Management"
}
```

------
#### [ CreateGrant ]

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AWSService",
        "invokedBy": "ec2-frontend-api.amazonaws.com"
    },
    "eventTime": "2024-04-23T18:08:13Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "CreateGrant",
    "awsRegion": "us-west-2",
    "sourceIPAddress": "ec2-frontend-api.amazonaws.com",
    "userAgent": "ec2-frontend-api.amazonaws.com",
    "requestParameters": {
        "keyId": "arn:aws:kms:us-west-2:account-id:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
        "granteePrincipal": "fargate.us-west-2.amazonaws.com",
        "operations": [
            "Decrypt"
        ],
        "constraints": {
            "encryptionContextSubset": {
                "aws:ecs:clusterAccount": "account-id",
                "aws:ebs:id": "vol-xxxx",
                "aws:ecs:clusterName": "cluster-name"
            }
        },
        "retiringPrincipal": "ec2.us-west-2.amazonaws.com"
    },
    "responseElements": {
        "grantId": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
        "keyId": "arn:aws:kms:us-west-2:account-id:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
    },
    "requestID": "a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
    "eventID": "a1b2c3d4-5678-90ab-cdef-EXAMPLE33333",
    "readOnly": false,
    "resources": [
        {
            "accountId": "AWS Internal",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-west-2:account-id:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "account-id",
    "sharedEventID": "a1b2c3d4-5678-90ab-cdef-EXAMPLEaaaaa",
    "eventCategory": "Management"
}
```

------
#### [ CreateGrant (DryRun) ]

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AWSService",
        "invokedBy": "fargate.amazonaws.com"
    },
    "eventTime": "2024-04-23T18:08:11Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "CreateGrant",
    "awsRegion": "us-west-2",
    "sourceIPAddress": "fargate.amazonaws.com",
    "userAgent": "fargate.amazonaws.com",
    "errorCode": "DryRunOperationException",
    "errorMessage": "The request would have succeeded, but the DryRun option is set.",
    "requestParameters": {
        "keyId": "arn:aws:kms:us-west-2:account-id:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
        "granteePrincipal": "fargate.us-west-2.amazonaws.com",
        "dryRun": true,
        "operations": [
            "Decrypt"
        ],
        "constraints": {
            "encryptionContextSubset": {
                "aws:ecs:clusterAccount": "account-id",
                "aws:ecs:clusterName": "cluster-name"
            }
        }
    },
    "responseElements": null,
    "requestID": "a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
    "eventID": "a1b2c3d4-5678-90ab-cdef-EXAMPLE33333",
    "readOnly": false,
    "resources": [
        {
            "accountId": "AWS Internal",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-west-2:account-id:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "account-id",
    "sharedEventID": "a1b2c3d4-5678-90ab-cdef-EXAMPLEaaaaa",
    "eventCategory": "Management"
}
```

------
#### [ RetireGrant ]

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AWSService",
        "invokedBy": "AWS Internal"
    },
    "eventTime": "2024-04-20T18:37:38Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "RetireGrant",
    "awsRegion": "us-west-2",
    "sourceIPAddress": "AWS Internal",
    "userAgent": "AWS Internal",
    "requestParameters": null,
    "responseElements": {
        "keyId": "arn:aws:kms:us-west-2:account-id:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
    },
    "additionalEventData": {
        "grantId": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
    },
    "requestID": "a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
    "eventID": "a1b2c3d4-5678-90ab-cdef-EXAMPLE33333",
    "readOnly": false,
    "resources": [
        {
            "accountId": "AWS Internal",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-west-2:account-id:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "account-id",
    "sharedEventID": "a1b2c3d4-5678-90ab-cdef-EXAMPLEaaaaa",
    "eventCategory": "Management"
}
```

------