Cifrado de datos en reposo en Step Functions
Lea el blog
Lea acerca de las claves administradas por el cliente en Strengthening data security with a customer-managed AWS KMS key
AWS Step Functions siempre cifra sus datos en reposo utilizando 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 propiedad de AWS. Para ello, elija una clave administrada por el cliente al crear sus recursos de mñaquina de estado y 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 existente propiedad de AWS. 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
-
Agregar etiquetas.
-
Crear alias de clave
-
Programar la eliminación de claves
Para obtener información, consulte las claves administradas por el cliente en la Guía para desarrolladores de AWS Key Management Service.
-
Puede cifrar sus datos con una clave administrada por el cliente para las máquinas y actividades de estado de AWS Step Functions. Puede configurar una clave simétrica de AWS KMS y un período de reutilización de la clave de datos al crear o actualizar una máquina de estado 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 las claves administradas por el cliente de AWS KMS, puede proteger los datos de los clientes, incluida la información médica protegida, contra el acceso no autorizado. Step Functions está integrado con CloudTrail, por lo que puede ver y auditar los eventos más recientes en la consola de CloudTrail en el historial de eventos.
Para obtener más información acerca de AWS KMS, consulte ¿Qué es AWS Key Management Service?
nota
Step Functions activa automáticamente el cifrado en reposo mediante claves propiedad de AWS sin costo alguno. Sin embargo, se aplicarán cargos de AWS KMS por el uso de una clave administrada por el cliente. Para obtener información sobre precios, consulte precios de AWS Key Management Service
Cifrado con una clave administrada por el cliente
Step Functions descifra los datos de la carga útil con la clave de AWS KMS administrada 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 clave de AWS KMS administrada por el cliente. Puede usar la misma clave para aplicar el cifrado de manera uniforme en muchos servicios de AWS.
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 de KMS: identificador de clave de una clave de AWS KMS administrada por el cliente en forma de ID de clave, nombre de alias o ARN de clave.
Creación de una máquina de estado con una clave administrada por el cliente
Requisito previo: antes de poder crear una máquina de estado con claves administradas por el cliente de AWS KMS, su usuario o rol debe tener permisos de AWS KMS para DescribeKey y GenerateDataKey.
Puede realizar los siguientes pasos en la consola de AWS, a través de la API o aprovisionando la infraestructura mediante recursos de CloudFormation. (Más adelante en esta guía se brindan ejemplos de CloudFormation).
Paso 1: crear una clave de AWS KMS
Puede crear claves administradas por el cliente a través de la consola de AWS KMS o las API de AWS KMS.
Para crear una clave simétrica administrada por el cliente
Siga los pasos para crear una clave simétrica gestionada por el cliente 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 clave de AWS KMS en operaciones criptográficas.
Paso 2: establecimiento de una política de claves de AWS KMS
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 en la Guía para desarrolladores de AWS Key Management Service.
El siguiente es un ejemplo de política de claves de AWS KMS 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 y cómo solucionar problemas de acceso a las claves.
Paso 3: agregación de una política de claves para cifrar Registros de CloudWatch
Step Functions está integrado con 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 Registros de CloudWatch, debe permitir que delivery.logs.amazonaws.com realice una acción kms:Decrypt desde su política de claves de AWS KMS:
{ "Sid": "Enable log service delivery for integrations", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "kms:Decrypt", "Resource": "*" }
Si habilita el cifrado de la máquina de estado con una clave de AWS KMS y la máquina de estado tiene habilitada la integración con Registros de CloudWatch, 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: cifrado del grupo de Registros de CloudWatch (opcional)
Puede habilitar el cifrado de los registros de un grupo de Registros de CloudWatch con su propia clave de AWS KMS. Para ello, también debe añadir la siguiente política a esa clave de AWS KMS.
nota
Puede elegir la misma clave de AWS KMS o diferentes para cifrar los registros y las definiciones de la máquina de estado.
-
{ "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 sección Condition restringe la clave a un ARN único de grupo de registros.
nota
Consulte la documentación de Registros de CloudWatch para obtener más información sobre cómo configurar los permisos en la clave de AWS KMS de su grupo de registros.
Paso 5: Crear una máquina de estado
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 clave de AWS KMS.
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 clave de AWS KMS a un grupo de registros existente, consulte Asociar una clave de AWS KMS a un grupo de registros.
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: invocación de la máquina de estado cifrada con su clave de AWS KMS
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
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 claves administradas por el cliente de AWS KMS, su usuario o rol solo necesita permisos de AWS KMS para 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 de conexión de la API de actividad deben tener permisos de kms:DescribeKey para crear correctamente una actividad con una clave AWS KMS.
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" ] } } } ] }
Limitación de las políticas de permisos de AWS KMS con condiciones
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 clave de AWS KMS a las solicitudes de Step Functions en nombre de un rol específico, puede usar la condición kms:ViaService.
Análisis del alcance con contexto de cifrado
Un contexto de cifrado 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 admitir el cifrado autenticado. Cuando se incluye un contexto de cifrado en una solicitud para cifrar 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 criptográficas de AWS KMS, donde la clave es aws:states:stateMachineArn para máquinas de estado o aws:states:activityArn para actividades, y el valor es el nombre de recurso de Amazon (ARN).
"encryptionContext": {"aws:states:stateMachineArn": "arn:aws:states:region:account-id:stateMachine:stateMachineName"}"encryptionContext": {"aws:states:activityArn": "arn:aws:states:region:account-id:activity:activityName"}El siguiente ejemplo muestra cómo limitar el uso de una clave de AWS KMS para funciones de ejecución a máquinas de estado específicas con kms:EncryptionContext y la clave de contexto aws:states:stateMachineArn:
-
{ "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" } } } ] }
Análisis del alcance con kms:ViService
La clave de condición kms:ViaService limita el uso de una clave de AWS Key Management Service a determinadas solicitudes de servicios de AWS.
El siguiente ejemplo de política usa la condición kms:ViaService para permitir que la clave AWS KMS se use para acciones específicas solo cuando la solicitud se origina en Step Functions de la región us-east-1, 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 condición kms:ViaService solo se aplica cuando la persona que llama a la API requiere permisos AWS KMS (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
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 permisos de AWS KMS. 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 administradas por el cliente, la máquina de estado debe conceder la función de ejecución kms:GenerateDataKey y utilizar los permisos kms:Decrypt para las claves AWS KMS.
En la siguiente tabla, se muestran los permisos AWS KMS que debe proporcionar a los intermediarios de la API de Step Functions para las API mediante una clave de máquina de estado de AWS KMS. Puede proporcionar permisos a la política de claves o la política de IAM para el rol.
| Las API utilizan la clave de AWS KMS de la máquina de estado | Requerido por quien realiza la llamada |
| CreateStateMachine | kms:DescribeKey, kms:GenerateDataKey |
| UpdateStateMachine | kms:DescribeKey, kms:GenerateDataKey |
| DescribeStateMachine | kms:Decrypt |
| DescribeStateMachineForExecution | kms:Decrypt |
| StartExecution | -- |
| StartSyncExecution | kms:Decrypt |
| SendTaskSuccess | -- |
| SendTaskFailure | -- |
| StopExecution | -- |
| RedriveExecution | -- |
| DescribeExecution | kms:Decrypt |
| GetExecutionHistory | kms:Decrypt |
En la siguiente tabla se muestran los permisos de AWS KMS que debe proporcionar a las personas que llaman a la API de Step Functions para las API mediante una clave de actividad AWS KMS. Puede proporcionar permisos a la política de claves o la política de IAM para el rol.
| API que utilizan la clave de AWS KMS de actividad | Requerido por quien realiza la llamada |
| CreateActivity | kms:DescribeKey |
| GetActivityTask | kms:Decrypt |
¿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 de Step Functions, el servicio Step Functions llama a AWS KMS en nombre del intermediario de la API. En ese caso, debe conceder permiso de AWS KMS al intermediario de la API. Cuando un rol de ejecución llama a AWS KMS directamente, debe conceder permisos de AWS KMS al rol de ejecución.
Recursos de CloudFormation para la configuración de cifrado
Los tipos de recursos CloudFormation 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. Tanto AWS::StepFunctions::Activity como AWS::StepFunctions::StateMachine aceptan una propiedad opcional EncryptionConfiguration que puede configurar una clave AWS KMS administrada por el cliente para el cifrado del servidor.
Requisito previo: antes de poder crear una máquina de estado con claves administradas por el cliente de AWS KMS, su usuario o rol debe tener permisos de AWS KMS para DescribeKey y GenerateDataKey.
Las actualizaciones de StateMachine no requieren interrupciones. Las actualizaciones de los recursos de la actividad requieren: Sustitución.
Para declarar una propiedad de EncryptionConfiguration en su plantilla de CloudFormation, use 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, el ARN de alias, el ID de clave o el ARN de clave de la clave de cifrado simétrico que cifra la clave de datos de AWS KMS. Para especificar una clave de AWS KMS en una cuenta de AWS diferente, el cliente debe usar el ARN de la clave o el ARN del alias. Para obtener información sobre kmsKeyID, consulte KeyID en los documentos sobre AWS KMS.
-
KmsDataKeyReusePeriodSeconds: tiempo máximo durante el 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 esCUSTOMER_MANAGED_KMS_KEY. El valor puede oscilar entre 60 y 900 segundos. El valor predeterminado es de 300 segundos.
CloudFormationEjemplos de
Ejemplo: máquina de estado con clave administrada por el cliente
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
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
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
Cuando utiliza una clave administrada por el cliente de AWS KMS para cifrar sus recursos de Step Functions, puede utilizar CloudTrail para hacer un seguimiento de las solicitudes que Step Functions envía 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.
Los ejemplos siguientes son eventos de CloudTrail para Decrypt, DescribeKey, GenerateDataKey para supervisar las operaciones de AWS KMS a las que Step Functions llama para acceder a los datos cifrados por la clave administrada por el cliente.
Preguntas frecuentes
¿Qué ocurre si mi clave está marcada para su eliminación o si se borra en AWS KMS?
Si la clave se borra o se marca para su eliminación en 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 clave de AWS KMS, 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 clave de AWS KMS está deshabilitada en AWS KMS?
Si una clave de AWS KMS está deshabilitada en AWS KMS, cualquier ejecución relacionada con ella fallará. No se pueden iniciar nuevas ejecuciones. Ya no podrá descifrar los datos cifrados con esa clave de AWS KMS deshabilitada hasta que se vuelva a activar.
¿Qué ocurre con los eventos de cambio de estado de ejecución enviados a EventBridge?
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 clave AWS KMS administrada por el cliente.
Más información
Para obtener información sobre el cifrado de datos en reposo, consulte AWS Key Management Service concepts y Security best practices for AWS Key Management Service en la Guía para desarrolladores de AWS Key Management Service.