

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Cifrado de datos en reposo en Step Functions
<a name="encryption-at-rest"></a>

**Lea el blog**  
Lea acerca de las claves administradas por el cliente en [Fortalecer la seguridad de los datos con una clave administrada por el cliente AWS KMS](https://aws.amazon.com/blogs/compute/strengthening-data-security-in-aws-step-functions-with-a-customer-managed-aws-kms-key/)

AWS Step Functions siempre cifra los datos en reposo mediante un cifrado transparente del lado del servidor. El cifrado de los datos en reposo de forma predeterminada reduce la sobrecarga operativa y la complejidad que implica la protección de los datos confidenciales. Puede crear aplicaciones sensibles a la seguridad que necesitan cumplimiento estricto de cifrado y requisitos normativos.

Si bien no puede deshabilitar esta capa de cifrado ni seleccionar un tipo de cifrado alternativo, puede añadir una segunda capa de cifrado sobre las claves de cifrado que ya AWS posee. Para ello, elija una clave gestionada por el cliente al crear su máquina de estado y sus recursos de actividad:
+ **Claves administradas por el cliente**: Step Functions admite el uso de una clave simétrica administrada por el cliente que usted crea, posee y administra para agregar una segunda capa de cifrado sobre el cifrado de AWS propiedad existente. Como usted tiene el control total de este cifrado, puede realizar dichas tareas como: 
  + Establecer y mantener políticas de claves
  + Establecer y mantener concesiones y políticas de IAM
  + Habilitar y deshabilitar políticas de claves
  + Rotar el material criptográfico
  + Adición de etiquetas de 
  + Crear alias de clave
  + Programar la eliminación de claves

  Para obtener información, consulte las [claves administradas por el cliente](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk) en la * Guía para desarrolladores de AWS Key Management Service *. 

Puede cifrar sus datos con una **clave gestionada por el cliente** para las máquinas y actividades AWS Step Functions estatales. **Puede configurar una AWS KMS clave simétrica y un período de reutilización de la clave de datos al crear o actualizar una **máquina de estados** y al crear una actividad.** El historial de ejecución y la definición de la máquina de estado se cifrarán con la clave aplicada a la máquina de estado. Las entradas de la actividad se cifrarán con la clave aplicada a la actividad. 

Con AWS KMS las claves administradas por el cliente, puede proteger los datos de los clientes, incluida la **información de salud protegida (PHI)**, contra el acceso no autorizado. Step Functions está integrado con CloudTrail, por lo que puede ver y auditar los eventos más recientes de la CloudTrail consola en el historial de eventos.

Para obtener información al respecto AWS KMS, consulte [¿Qué es AWS Key Management Service?](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) 

**nota**  
Step Functions permite automáticamente el cifrado en reposo utilizando claves AWS propias sin coste alguno. Sin embargo, se aplican AWS KMS cargos cuando se utiliza una clave gestionada por el cliente. Para obtener información sobre precios, consulte [Precios de AWS Key Management Service](https://aws.amazon.com/kms/pricing/).

## Cifrado con una clave administrada por el cliente
<a name="enable-custom-encryption"></a>

 Step Functions descifra los datos de la carga útil con la AWS KMS clave gestionada por el cliente antes de pasarlos a otro servicio para realizar una tarea. Los datos se cifran en tránsito utilizando seguridad de la capa de transporte (TLS). 

 Cuando los datos se devuelven desde un servicio integrado, Step Functions los cifra con la AWS KMS clave gestionada por el cliente. Puede usar la misma clave para aplicar el cifrado de manera uniforme en muchos AWS servicios. 

Puede utilizar una clave administrada por el cliente con los siguientes recursos:
+ **Máquina de estado**: tipos de flujo de trabajo estándar y rápido
+ **Actividad**

Puede especificar la clave de datos introduciendo un **identificador de clave de KMS**, que Step Functions utiliza para cifrar los datos.
+ **ID de clave KMS**: [identificador clave](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id) de una clave administrada por el AWS KMS cliente en forma de ID de clave, ARN de clave, nombre de alias o ARN de alias.

## Creación de una máquina de estado con una clave administrada por el cliente
<a name="create-state-machine-with-cmk"></a>

**Requisito previo:** antes de poder crear una máquina de estados con AWS KMS claves administradas por el cliente, su usuario o rol debe tener AWS KMS permisos para `DescribeKey` y`GenerateDataKey`.

Puede realizar los siguientes pasos en la AWS consola, a través de la API o aprovisionando la infraestructura mediante CloudFormation recursos. (CloudFormation los ejemplos se presentan más adelante en esta guía).

### Paso 1: Crear la AWS KMS clave
<a name="create-key"></a>

 Puede crear una clave simétrica gestionada por el cliente con la AWS KMS consola o AWS KMS APIs.

**Para crear una clave simétrica administrada por el cliente**

Siga los pasos para [crear una clave simétrica gestionada por el cliente](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 *.

**nota**  
*Opcional*: al crear una clave, puede elegir **administradores de claves**. Los usuarios o roles seleccionados tendrán acceso a administrar la clave, por ejemplo, habilitando o deshabilitando la clave a través de la API. También puede elegir **Usuarios clave**. A estos usuarios o roles se les concederá la posibilidad de utilizar la AWS KMS clave en operaciones criptográficas.

### Paso 2: Defina la política AWS KMS clave
<a name="create-key-policy"></a>

Las políticas de clave controlan el acceso a la clave administrada por el cliente. Cada clave administrada por el cliente debe tener exactamente una política de clave, que contiene instrucciones que determinan quién puede usar la clave y cómo puede utilizarla. Cuando crea la clave administrada por el cliente, puede especificar una política de clave. Para obtener más información, consulte [Administración del acceso a las claves](https://docs.aws.amazon.com/kms/latest/developerguide/control-access-overview.html#managing-access) en la *Guía para desarrolladores de AWS Key Management Service *.

El siguiente es un ejemplo de política AWS KMS clave de la consola, sin **administradores clave** ni **usuarios clave**:

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Id": "key-consolepolicy-1",
  "Statement": [
    {
      "Sid": "Enable IAM User Permissions for the key",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::{{123456789012}}:root"
      },
      "Action": "kms:*",
      "Resource": "*"
    }
  ]
}
```

Consulte la *Guía para desarrolladores de AWS Key Management Service * para obtener información sobre cómo [especificar permisos en una política](https://docs.aws.amazon.com/kms/latest/developerguide/control-access-overview.html#overview-policy-elements) y cómo [solucionar problemas de acceso a las claves](https://docs.aws.amazon.com/kms/latest/developerguide/policy-evaluation.html#example-no-iam). 

### Paso 3: Añadir una política de claves para cifrar CloudWatch los registros
<a name="encrypt-logs"></a>

 Step Functions está integrado CloudWatch para el registro y la supervisión. Cuando habilita el cifrado del lado del servidor para su máquina de estado con su propia clave KMS y habilita la integración de CloudWatch registros, debe permitir la `kms:Decrypt` acción `delivery.logs.amazonaws.com` según su política de AWS KMS claves:

```
{
  "Sid": "Enable log service delivery for integrations",
  "Effect": "Allow",
  "Principal": {
    "Service": "delivery.logs.amazonaws.com"
  },
  "Action": "kms:Decrypt",
  "Resource": "*"
}
```

Si habilitas el cifrado de la máquina de estado con una AWS KMS clave y la máquina de estado tiene habilitada la integración de CloudWatch los registros, la función de ejecución de la máquina de estado necesita la siguiente política:

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowKMSPermissionForCloudWatchLogGroup",
      "Effect": "Allow",
      "Action": "kms:GenerateDataKey",
      "Resource": "arn:aws:kms:{{us-east-1}}:{{123456789012}}:key/{{keyId}}",
      "Condition": {
        "StringEquals": {
          "kms:EncryptionContext:SourceArn": "arn:aws:logs:{{us-east-1}}:{{123456789012}}:*"
        }
      }
    }
  ]
}
```

### Paso 4: Cifrar el grupo de CloudWatch registros *(opcional)*
<a name="encrypt-cloudwatch-log-group"></a>

Puede habilitar el cifrado de los registros de un grupo de CloudWatch registros con su propia AWS KMS clave. Para ello, también debe añadir la siguiente política a esa AWS KMS clave.

**nota**  
Puede elegir la misma AWS KMS clave o diferentes para cifrar los registros y las definiciones de la máquina de estados.

****  

```
{
  "Id": "key-consolepolicy-logging",
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "Enable log service for a single log group",
      "Effect": "Allow",
      "Principal": {
        "Service": "logs.{{us-east-1}}.amazonaws.com"
      },
      "Action": [
        "kms:Encrypt*",
        "kms:Decrypt*",
        "kms:ReEncrypt*",
        "kms:GenerateDataKey*",
        "kms:Describe*"
      ],
      "Resource": "*",
      "Condition": {
        "ArnEquals": {
          "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:{{us-east-1}}:{{123456789012}}:log-group:{{LOG_GROUP_NAME}}"
        }
      }
    }
  ]
}
```

**nota**  
La `Condition` sección restringe la AWS KMS clave a un único ARN de grupo de registros.

**nota**  
Consulte [la documentación de CloudWatch registros](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/encrypt-log-data-kms.html#cmk-permissions) para obtener más información sobre cómo configurar los permisos en la AWS KMS clave de su grupo de registros.

### Paso 5: Crear una máquina de estado
<a name="create-state-machine"></a>

Después de crear una clave y configurar la política, puede utilizarla para crear una nueva máquina de estado.

Al crear la máquina de estado, seleccione **Configuración adicional** y, a continuación, elija cifrar con una clave administrada por el cliente. A continuación, puede seleccionar su clave y establecer el período de reutilización de la clave de datos de 1 minuto a 15 minutos.

Si lo desea, puede habilitar el registro configurando un nivel de registro y eligiendo cifrar el grupo de registros con su AWS KMS clave.

**nota**  
Solo puede habilitar el cifrado en un **grupo de registros nuevo** en la consola de Step Functions. Para obtener información sobre cómo asociar una AWS KMS clave a un grupo de registros existente, consulte [Asociar una AWS KMS clave a un grupo de registros](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/encrypt-log-data-kms.html#associate-cmk).

Para iniciar correctamente una ejecución de flujos de trabajo estándar y flujos de trabajo rápido asíncronos con claves administradas por el cliente, su función de ejecución requiere permisos `kms:Decrypt` y `kms:GenerateDataKey`. El rol de ejecución para la ejecución de rápida síncrona requiere `kms:Decrypt`. Al crear una máquina de estado en la consola y seleccionar **Crear un nuevo rol**, estos permisos se incluyen automáticamente.

A continuación, se muestra un ejemplo de política para el rol de ejecución:

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowKMSPermissionsForStepFunctionsWorkflowExecutions",
      "Effect": "Allow",
      "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey"
      ],
      "Resource": [
        "arn:aws:kms:{{us-east-1}}:{{123456789012}}:key/keyId"
      ],
      "Condition": {
        "StringEquals": {
          "kms:EncryptionContext:aws:states:stateMachineArn": [
            "arn:aws:states:{{us-east-1}}:{{123456789012}}:stateMachine:stateMachineName"
          ]
        }
      }
    }
  ]
}
```

### Paso 6: invoque la máquina de estado cifrada con su AWS KMS clave
<a name="invoke-encrypted-state-machine"></a>

Puede invocar su máquina de estado cifrada como lo haría normalmente y sus datos se cifrarán con la clave administrada por el cliente.

## Creación de una actividad con una clave administrada por el cliente
<a name="create-activity-with-cmk"></a>

Crear una actividad de Step Functions con una clave administrada por el cliente es similar a crear una máquina de estado con una clave administrada por el cliente. Para poder crear una actividad con AWS KMS claves administradas por el cliente, tu usuario o rol solo necesita AWS KMS permisos para hacerlo`DescribeKey`. Durante la creación de la actividad, usted elige la clave y establece los parámetros de configuración del cifrado.

Tenga en cuenta que los recursos de actividad de Step Functions permanecen **inmutables**. No puede actualizar `encryptionConfiguration` para el ARN de una actividad existente; debe crear un nuevo recurso de actividad. Las personas que llamen a los puntos finales de la API de actividad deben tener `kms:DescribeKey` permisos para crear correctamente una actividad con una AWS KMS clave.

Cuando el cifrado por clave administrada por el cliente está habilitado en una tarea de actividad, la función de ejecución de la máquina de estado requerirá un permiso `kms:GenerateDataKey` para la clave de actividad `kms:Decrypt`. Si está creando esta máquina de estado desde la consola Step Functions, la característica de creación automática de roles añadirá estos permisos. 

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowKMSPermissionsForStepFunctionsActivities",
      "Effect": "Allow",
      "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey"
      ],
      "Resource": [
        "arn:aws:kms:{{us-east-1}}:{{123456789012}}:key/keyId"
      ],
      "Condition": {
        "StringEquals": {
          "kms:EncryptionContext:aws:states:activityArn": [
            "arn:aws:states:{{us-east-1}}:{{123456789012}}:activity:activityName"
          ]
        }
      }
    }
  ]
}
```

## Limite las políticas de AWS KMS permisos con condiciones
<a name="scope-down-kms-permission-policies-with-conditions"></a>

Puede utilizar el *contexto de cifrado* en las políticas de claves y las políticas de IAM como `conditions` para controlar el acceso a la clave simétrica administrada por el cliente. Para limitar el uso de una AWS KMS clave a las solicitudes de Step Functions en nombre de un rol específico, puedes usar la `kms:ViaService` condición.

### Análisis del alcance con contexto de cifrado
<a name="stepfunctions-encryption-context"></a>

Un [contexto de cifrado](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context) es un conjunto opcional de pares clave-valor que pueden contener información contextual adicional sobre los datos.

AWS KMS utiliza el contexto de cifrado como datos autenticados adicionales para respaldar el cifrado autenticado. Al incluir un contexto de cifrado en una solicitud de cifrado de datos, AWS KMS vincula el contexto de cifrado a los datos cifrados. Para descifrar los datos, debe incluir el mismo contexto de cifrado en la solicitud.

Step Functions proporciona un contexto de cifrado en las operaciones AWS KMS criptográficas, donde la clave es `aws:states:stateMachineArn` para State Machines o `aws:states:activityArn` para Activities, y el valor es el [Amazon Resource Name (ARN) del recurso](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html).

**Example**  

```
"encryptionContext": {"aws:states:stateMachineArn": "arn:aws:states:{{region}}:{{account-id}}:stateMachine:stateMachineName"}
```

**Example**  

```
"encryptionContext": {"aws:states:activityArn": "arn:aws:states:{{region}}:{{account-id}}:activity:activityName"}
```

El siguiente ejemplo muestra cómo limitar el uso de una AWS KMS clave para funciones de ejecución a máquinas de estado específicas con la clave `kms:EncryptionContext` de `aws:states:stateMachineArn` contexto: 

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowKeyManagement",
      "Effect": "Allow",
      "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey"
      ],
      "Resource": [
        "arn:aws:kms:{{us-east-1}}:{{123456789012}}:key/keyId"
      ],
      "Condition": {
        "StringEquals": {
          "kms:EncryptionContext:aws:states:stateMachineArn": "arn:aws:states:{{us-east-1}}:{{123456789012}}:stateMachine:stateMachineName"
        }
      }
    }
  ]
}
```

### Analizar el alcance con kms: ViaService
<a name="stepfunctions-via-service"></a>

La clave de `kms:ViaService` condición limita el uso de una AWS Key Management Service clave a las solicitudes de AWS servicios específicos.

El siguiente ejemplo de política usa la `kms:ViaService` condición para permitir que la AWS KMS clave se use para acciones específicas solo cuando la solicitud se origina en Step Functions de la `us-east-1` región, actuando en nombre de: ExampleRole 

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "Allow access for Key Administrators in a region",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::{{123456789012}}:role/ExampleRole"
      },
      "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "kms:ViaService": "states.us-east-1.amazonaws.com"
        }
      }
    }
  ]
}
```

**nota**  
La `kms:ViaService` condición solo se aplica cuando la persona que llama a la API requiere AWS KMS permisos (por ejemplo,,`CreateStateMachine`,, `CreateActivity``GetActivityTask`, etc.). Añadir una condición `kms:ViaService` a una **función de ejecución** puede impedir que se inicie una nueva ejecución o provocar un error en una ejecución en ejecución.

## Permisos necesarios para los intermediarios de la API
<a name="using-api-with-encryption-required-permissions"></a>

Para llamar a las acciones de la API de Step Functions que devuelven datos cifrados, los intermediarios necesitan permisos de AWS KMS . Como alternativa, algunas acciones de la API tienen una opción (`METADATA_ONLY`) para devolver solo metadatos, lo que elimina la necesidad de AWS KMS permisos. Consulte la API de Step Functions para obtener más información.

Para que una ejecución se complete correctamente cuando se utiliza el cifrado de claves gestionado por el cliente, la máquina de estado debe conceder la función de ejecución `kms:GenerateDataKey` y utilizar los `kms:Decrypt` permisos para AWS KMS las claves.

En la siguiente tabla se muestran los AWS KMS permisos que debes proporcionar a las personas que llaman a la API de Step Functions para APIs usar la ** AWS KMS clave de una máquina de estado**. Puede proporcionar permisos a la política de claves o la política de IAM para el rol. 


|  |  | 
| --- |--- |
|  APIs utilizando la clave de State Machine AWS KMS   |  Requerido por quien realiza la llamada  | 
|  CreateStateMachine  |  kms:DescribeKey, kms:GenerateDataKey  | 
|  UpdateStateMachine  |  kms:DescribeKey, kms:GenerateDataKey  | 
|  DescribeStateMachine  |  kms:Descifrar  | 
|  DescribeStateMachineForExecution  |  kms:Descifrar  | 
|  StartExecution  |  --  | 
|  StartSyncExecution  |  kms:Descifrar  | 
|  SendTaskSuccess  |  --  | 
|  SendTaskFailure  |  --  | 
|  StopExecution  |  --  | 
|  RedriveExecution  |  --  | 
|  DescribeExecution  |  kms:Descifrar  | 
|  GetExecutionHistory  |  kms:Descifrar  | 

 En la siguiente tabla se muestran los AWS KMS permisos que debes proporcionar a las personas que llaman a la API de Step Functions para APIs usar la ** AWS KMS clave de una actividad**. Puede proporcionar permisos a la política de claves o la política de IAM para el rol. 


|  |  | 
| --- |--- |
|  APIs utilizando la clave de Activity AWS KMS   |  Requerido por quien realiza la llamada  | 
|  CreateActivity  |  kms:DescribeKey  | 
|  GetActivityTask  |  kms:Descifrar  | 

**¿Cuándo concedo permisos al rol de llamada o al rol de ejecución?**  
Cuando un usuario o un rol de IAM llama a la API Step Functions, el servicio Step Functions llama AWS KMS en nombre de la persona que llama a la API. En este caso, debe conceder AWS KMS permiso a la persona que llama a la API. Cuando un rol de ejecución llama AWS KMS directamente, debes conceder AWS KMS permisos al rol de ejecución.

## CloudFormation recursos para la configuración de cifrado
<a name="cfn-resources-for-encryption-configuration"></a>

 CloudFormation los tipos de recursos de Step Functions pueden aprovisionar recursos de estado, máquina y actividad con configuraciones de cifrado. 

 De forma predeterminada, Step Functions proporciona cifrado transparente del lado del servidor. Ambos [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-stepfunctions-activity.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-stepfunctions-activity.html)aceptan una `EncryptionConfiguration` propiedad opcional que puede configurar una AWS KMS clave administrada por el cliente para el cifrado del lado del servidor. 

**Requisito previo:** antes de poder crear una máquina de estados con AWS KMS claves administradas por el cliente, su usuario o rol debe tener AWS KMS permisos para `DescribeKey` y. `GenerateDataKey`

 Las actualizaciones [no StateMachine requieren interrupciones](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-no-interrupt). Las actualizaciones de los recursos de la actividad requieren: [Sustitución](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement). 

 Para declarar una **`EncryptionConfiguration`**propiedad en la CloudFormation plantilla, utilice la siguiente sintaxis: 

 **JSON**

```
{
  "KmsKeyId" : String,
  "KmsDataKeyReusePeriodSeconds" : Integer,
  "Type" : String
}
```

 **YAML**

```
KmsKeyId: String
KmsDataKeyReusePeriodSeconds: Integer
Type: String
```

 **Propiedades**
+ **Tipo**: opción de cifrado para la máquina o actividad de estado. *Valores permitidos*: `CUSTOMER_MANAGED_KMS_KEY` \| `AWS_OWNED_KEY`
+ **KmsKeyId**- Alias, alias ARN, ID de clave o ARN de clave de la clave de cifrado simétrico que cifra la AWS KMS clave de datos. Para especificar una AWS KMS clave en una AWS cuenta diferente, el cliente debe usar la clave ARN o el alias ARN. Para obtener más información al respecto kmsKeyId, consulte los documentos [KeyId](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html#API_DescribeKey_RequestParameters). AWS KMS 
+ **KmsDataKeyReusePeriodSeconds**- Duración máxima durante la que SFN reutilizará las claves de datos. Cuando el período caduque, Step Functions llamará a `GenerateDataKey`. Esta configuración solo se puede establecer cuando el **Tipo** es `CUSTOMER_MANAGED_KMS_KEY`. El valor puede oscilar entre 60 y 900 segundos. El valor predeterminado es de 300 segundos.

### CloudFormation ejemplos
<a name="cfn-examples"></a>

#### Ejemplo: StateMachine con clave gestionada por el cliente
<a name="statemachine-with-managed-key"></a>

```
AWSTemplateFormatVersion: '2010-09-09'
Description: An example template for a Step Functions State Machine.
Resources:
  MyStateMachine:
    Type: AWS::StepFunctions::StateMachine
    Properties:
      StateMachineName: HelloWorld-StateMachine
      Definition:
        StartAt: PassState
        States:
          PassState:
            Type: Pass
            End: true
      RoleArn: !Sub "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/example"
      EncryptionConfiguration:
        KmsKeyId: !Ref MyKmsKey
        KmsDataKeyReusePeriodSeconds: 100
        Type: CUSTOMER_MANAGED_KMS_KEY

  MyKmsKey:
    Type: AWS::KMS::Key
    Properties:
      Description: Symmetric KMS key used for encryption/decryption
```

#### Ejemplo: actividad con clave administrada por el cliente
<a name="activity-with-managed-key"></a>

```
AWSTemplateFormatVersion: '2010-09-09'
Description: An example template for a Step Functions Activity.
Resources:
  Activity:
    Type: AWS::StepFunctions::Activity
    Properties:
      Name: ActivityWithKmsEncryption
      EncryptionConfiguration:
        KmsKeyId: !Ref MyKmsKey
        KmsDataKeyReusePeriodSeconds: 100
        Type: CUSTOMER_MANAGED_KMS_KEY

  MyKmsKey:
    Type: AWS::KMS::Key
    Properties:
      Description: Symmetric KMS key used for encryption/decryption
```

#### La actualización del cifrado de una actividad requiere la creación de un recurso nuevo
<a name="updating-encryption-for-an-activity-requires-creating-a-new-resource"></a>

 La configuración de la actividad es inmutable y los nombres de los recursos deben ser únicos. Para configurar las claves de cifrado administradas por el cliente, debe crear una **nueva** actividad. Si intenta modificar la configuración de su plantilla de CFN para una actividad existente, recibirá una excepción `ActivityAlreadyExists`. 

 Para actualizar su actividad e incluir las claves administrada por el cliente, establezca un nuevo nombre de actividad en la plantilla de CFN. A continuación se muestra un ejemplo que crea una nueva actividad con una configuración de clave administrada por el cliente: 

 **Definición de actividad existente**

```
AWSTemplateFormatVersion: '2010-09-09'
  Description: An example template for a new Step Functions Activity.
  Resources:
    Activity:
    Type: AWS::StepFunctions::Activity
    Properties:
      Name: ActivityName
      EncryptionConfiguration:
        Type: AWS_OWNED_KEY
```

 **Nueva definición de actividad**

```
AWSTemplateFormatVersion: '2010-09-09'
  Description: An example template for a Step Functions Activity.
  Resources:
    Activity:
      Type: AWS::StepFunctions::Activity
      Properties:
        Name: ActivityWithKmsEncryption
        EncryptionConfiguration:
          KmsKeyId: !Ref MyKmsKey
          KmsDataKeyReusePeriodSeconds: 100
          Type: CUSTOMER_MANAGED_KMS_KEY

    MyKmsKey:
      Type: AWS::KMS::Key
      Properties:
        Description: Symmetric KMS key used for encryption/decryption
```

## Supervisión del uso de sus claves de cifrado
<a name="monitoring-encryption-keys"></a>

Cuando utilizas una clave gestionada por el AWS KMS cliente para cifrar tus recursos de Step Functions, puedes utilizarla CloudTrail para realizar un seguimiento de las solicitudes que Step Functions envía AWS KMS.

También puede utilizar el contexto de cifrado en registros de auditoría y en registros para identificar cómo se utiliza la clave administrada por el cliente. El contexto de cifrado también aparece en los registros generados por [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html).

Los siguientes ejemplos son CloudTrail eventos para `Decrypt``DescribeKey`, y `GenerateDataKey` para monitorear AWS KMS las operaciones llamadas por Step Functions para acceder a los datos cifrados por la clave administrada por el cliente:

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

Cuando accede a una máquina de estado o actividad cifrada, Step Functions llama a la operación `Decrypt` para utilizar la clave de datos cifrada almacenada y acceder a los datos cifrados. 

El siguiente evento de ejemplo registra la operación `Decrypt`:

```
{
  "eventVersion": "1.09",
  "userIdentity": {
    "type": "AssumedRole",
    "principalId": "111122223333:Sampleuser01",
    "arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01",
    "accountId": "111122223333",
    "accessKeyId": "ASIAIOSFODNN7EXAMPLE",
    "sessionContext": {
      "sessionIssuer": {
        "type": "Role",
        "principalId": "111122223333:Sampleuser01",
        "arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01",
        "accountId": "111122223333",
        "userName": "Admin"
      },
      "attributes": {
        "creationDate": "2024-07-05T21:06:27Z",
        "mfaAuthenticated": "false"
      }
    },
    "invokedBy": "states.amazonaws.com"
  },
  "eventTime": "2024-07-05T21:12:21Z",
  "eventSource": "kms.amazonaws.com",
  "eventName": "Decrypt",
  "awsRegion": "aa-example-1",
  "sourceIPAddress": "states.amazonaws.com",
  "userAgent": "states.amazonaws.com",
  "requestParameters": {
        "encryptionAlgorithm": "SYMMETRIC_DEFAULT",
        "keyId": "arn:aws:kms:aa-example-1:111122223333:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
        "encryptionContext": {
            "aws:states:stateMachineArn": "arn:aws:states:aa-example-1:111122223333:stateMachine:example1"
        }
    },
    "responseElements": null,
    "requestID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
    "eventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
    "readOnly": true,
    "resources": [
        {
            "accountId": "111122223333",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:aa-example-1:111122223333:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111122223333",
    "eventCategory": "Management"
}
```

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

Step Functions utiliza la operación `DescribeKey` para verificar si la clave administrada por el cliente de AWS KMS asociada con su máquina de estado o actividad existe en la cuenta y región.

El siguiente evento de ejemplo registra la operación `DescribeKey`:

```
{
  "eventVersion": "1.09",
  "userIdentity": {
    "type": "AssumedRole",
    "principalId": "111122223333:Sampleuser01",
    "arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01",
    "accountId": "111122223333",
    "accessKeyId": "ASIAIOSFODNN7EXAMPLE",
    "sessionContext": {
      "sessionIssuer": {
        "type": "Role",
        "principalId": "111122223333:Sampleuser01",
        "arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01",
        "accountId": "111122223333",
        "userName": "Admin"
      },
      "attributes": {
        "creationDate": "2024-07-05T21:06:27Z",
        "mfaAuthenticated": "false"
      }
    },
    "invokedBy": "states.amazonaws.com"
  },
  "eventTime": "2024-07-05T21:12:21Z",
  "eventSource": "kms.amazonaws.com",
  "eventName": "DescribeKey",
  "awsRegion": "aa-example-1",
  "sourceIPAddress": "states.amazonaws.com",
  "userAgent": "states.amazonaws.com",
  "requestParameters": {
    "keyId": "arn:aws:kms:aa-example-1:111122223333:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
  },
  "responseElements": null,
  "requestID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
  "eventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
  "readOnly": true,
  "resources": [
    {
      "accountId": "111122223333",
      "type": "AWS::KMS::Key",
      "ARN": "arn:aws:kms:aa-example-1:111122223333:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
    }
  ],
  "eventType": "AwsApiCall",
  "managementEvent": true,
  "recipientAccountId": "111122223333",
  "eventCategory": "Management",
  "sessionCredentialFromConsole": "true"
}
```

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

Cuando habilitas una clave gestionada por el AWS KMS cliente para tu máquina de estado o actividad, Step Functions envía una `GenerateDataKey` solicitud para obtener una clave de datos para cifrar los datos de ejecución o definición de la máquina de estados.

El siguiente evento de ejemplo registra la operación `GenerateDataKey`:

```
{
  "eventVersion": "1.09",
  "userIdentity": {
    "type": "AssumedRole",
    "principalId": "111122223333:Sampleuser01",
    "arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01",
    "accountId": "111122223333",
    "accessKeyId": "ASIAIOSFODNN7EXAMPLE",
    "sessionContext": {
      "sessionIssuer": {
        "type": "Role",
        "principalId": "111122223333:Sampleuser01",
        "arn": "arn:aws:iam::111122223333:role/Admin",
        "accountId": "111122223333",
        "userName": "Admin"
      },
      "attributes": {
        "creationDate": "2024-07-05T21:06:27Z",
        "mfaAuthenticated": "false"
      }
    },
    "invokedBy": "states.amazonaws.com"
  },
  "eventTime": "2024-07-05T21:12:21Z",
  "eventSource": "kms.amazonaws.com",
  "eventName": "GenerateDataKey",
  "awsRegion": "aa-example-1",
  "sourceIPAddress": "states.amazonaws.com",
  "userAgent": "states.amazonaws.com",
  "requestParameters": {
    "keySpec": "AES_256",
    "encryptionContext": {
      "aws:states:stateMachineArn": "arn:aws:states:aa-example-1:111122223333:stateMachine:example1"
    },
    "keyId": "arn:aws:kms:aa-example-1:111122223333:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
  },
  "responseElements": null,
  "requestID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
  "eventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
  "readOnly": true,
  "resources": [
    {
      "accountId": "111122223333",
      "type": "AWS::KMS::Key",
      "ARN": "arn:aws:kms:aa-example-1:111122223333:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
    }
  ],
  "eventType": "AwsApiCall",
  "managementEvent": true,
  "recipientAccountId": "111122223333",
  "eventCategory": "Management"
}
```

------

## FAQs
<a name="faqs"></a>

### ¿Qué ocurre si mi clave está marcada para su eliminación o si se borra en AWS KMS?
<a name="what-happens-if-my-key-is-marked-for-deletion-or-deleted-in-kms-"></a>

 Si la clave se elimina o se marca para su eliminación AWS KMS, se producirá un error en cualquier ejecución relacionada con ella. No se pueden iniciar nuevas ejecuciones hasta que elimine o cambie la clave asociada al flujo de trabajo. Tras eliminar una AWS KMS clave, todos los datos cifrados asociados a la ejecución del flujo de trabajo permanecerán cifrados y ya no se podrán descifrar, lo que hará que los datos sean ***irrecuperables***. 

### ¿Qué ocurre si una AWS KMS clave está deshabilitada? AWS KMS
<a name="what-happens-if-a-kms-key-is-disabled-in-kms-"></a>

 Si una AWS KMS clave está deshabilitada AWS KMS, cualquier ejecución relacionada con ella fallará. No se pueden iniciar nuevas ejecuciones. Ya no podrá descifrar los datos cifrados con esa AWS KMS clave deshabilitada hasta que se vuelva a activar. 

### ¿Qué ocurre con los eventos de cambio de estado de ejecución enviados a? EventBridge
<a name="what-happens-to-execution-status-change-events-sent-to-ev-"></a>

 La entrada, el resultado, el error y la causa de la ejecución no se incluirán en los eventos de cambio de estado de ejecución de los flujos de trabajo cifrados con la AWS KMS clave gestionada por el cliente. 

## Más información
<a name="learn-more-data-at-rest-encryption"></a>

Para obtener información sobre el cifrado de datos en reposo, consulte [AWS Key Management Service concepts](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html) y [Security best practices for AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/best-practices.html) en la *Guía para desarrolladores de AWS Key Management Service *.