AWS - Step Functions Enum
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
AWS Step Functions es un servicio de flujo de trabajo que te permite coordinar y orquestar múltiples servicios de AWS en flujos de trabajo sin servidor. Al usar AWS Step Functions, puedes diseñar y ejecutar flujos de trabajo que conectan varios servicios de AWS como AWS Lambda, Amazon S3, Amazon DynamoDB y muchos más, en una secuencia de pasos. Este servicio de orquestación proporciona una interfaz visual de flujo de trabajo y ofrece capacidades de máquina de estados, permitiéndote definir cada paso del flujo de trabajo de manera declarativa utilizando Amazon States Language (ASL) basado en JSON.
AWS Step Functions ofrece dos tipos de flujos de trabajo de máquina de estados: Estándar y Expreso.
Flujo de trabajo estándar: Este tipo de flujo de trabajo predeterminado está diseñado para procesos duraderos, auditables y de larga duración. Soporta ejecución exactamente una vez, asegurando que las tareas se ejecuten solo una vez a menos que se especifiquen reintentos. Es ideal para flujos de trabajo que necesitan un historial de ejecución detallado y puede ejecutarse durante hasta un año.
Flujo de trabajo expreso: Este tipo es ideal para tareas de alto volumen y corta duración, que se ejecutan hasta cinco minutos. Soportan ejecución al menos una vez, adecuado para tareas idempotentes como el procesamiento de datos. Estos flujos de trabajo están optimizados para costo y rendimiento, cobrando según las ejecuciones, la duración y el uso de memoria.
Los estados son las unidades esenciales de las máquinas de estados. Definen los pasos individuales dentro de un flujo de trabajo, pudiendo realizar una variedad de funciones dependiendo de su tipo:
Tarea: Ejecuta un trabajo, a menudo utilizando un servicio de AWS como Lambda.
Elección: Toma decisiones basadas en la entrada.
Fallar/Suceder: Termina la ejecución con un fallo o éxito.
Pasar: Pasa la entrada a la salida o inyecta datos.
Esperar: Retrasa la ejecución por un tiempo establecido.
Paralelo: Inicia ramas paralelas.
Mapa: Itera dinámicamente pasos sobre elementos.
Un estado de Tarea representa una única unidad de trabajo ejecutada por una máquina de estados. Las tareas pueden invocar varios recursos, incluyendo actividades, funciones Lambda, servicios de AWS o APIs de terceros.
Actividades: Trabajadores personalizados que gestionas, adecuados para procesos de larga duración.
Recurso: arn:aws:states:region:account:activity:name
.
Funciones Lambda: Ejecuta funciones de AWS Lambda.
Recurso: arn:aws:lambda:region:account:function:function-name
.
Servicios de AWS: Se integra directamente con otros servicios de AWS, como DynamoDB o S3.
Recurso: arn:partition:states:region:account:servicename:APIname
.
Tarea HTTP: Llama a APIs de terceros.
Campo de recurso: arn:aws:states:::http:invoke
. Luego, debes proporcionar los detalles de configuración del endpoint de la API, como la URL de la API, el método y los detalles de autenticación.
El siguiente ejemplo muestra una definición de estado de Tarea que invoca una función Lambda llamada HelloWorld:
Un Choice state añade lógica condicional a un flujo de trabajo, permitiendo decisiones basadas en datos de entrada. Evalúa las condiciones especificadas y transiciona al estado correspondiente según los resultados.
Comparación: Cada regla de elección incluye un operador de comparación (por ejemplo, NumericEquals
, StringEquals
) que compara una variable de entrada con un valor especificado u otra variable.
Campo Next: Los estados de elección no soportan el campo End
, en su lugar, definen el estado Next
al que transicionar si la comparación es verdadera.
Ejemplo de Choice state:
Un Fail
estado detiene la ejecución de una máquina de estados y la marca como un fallo. Se utiliza para especificar un nombre de error y una causa, proporcionando detalles sobre el fallo. Este estado es terminal, lo que significa que finaliza el flujo de ejecución.
Un Succeed
estado detiene la ejecución con éxito. Se utiliza típicamente para terminar el flujo de trabajo cuando se completa con éxito. Este estado no requiere un campo Next
.
Un estado Pass pasa su entrada a su salida, ya sea sin realizar ningún trabajo o transformando la entrada del estado JSON utilizando filtros, y luego pasando los datos transformados al siguiente estado. Es útil para probar y construir máquinas de estado, permitiéndote inyectar datos estáticos o transformarlos.
Un Wait state retrasa la ejecución de la máquina de estados por una duración especificada. Hay tres métodos principales para configurar el tiempo de espera:
X Seconds: Un número fijo de segundos para esperar.
Absolute Timestamp: Un tiempo exacto hasta el cual esperar.
Dynamic Wait: Basado en la entrada utilizando SecondsPath
o TimestampPath
.
Un Parallel state te permite ejecutar múltiples ramas de tareas de manera concurrente dentro de tu flujo de trabajo. Cada rama se ejecuta de forma independiente y procesa su propia secuencia de estados. La ejecución espera hasta que todas las ramas se completen antes de proceder al siguiente estado. Sus campos clave son:
Branches: Un array que define las rutas de ejecución paralela. Cada rama es una máquina de estados separada.
ResultPath: Define dónde (en la entrada) colocar la salida combinada de las ramas.
Retry and Catch: Configuraciones de manejo de errores para el estado paralelo.
Un Map state permite la ejecución de un conjunto de pasos para cada elemento en un conjunto de datos. Se utiliza para el procesamiento paralelo de datos. Dependiendo de cómo desees procesar los elementos del conjunto de datos, Step Functions proporciona los siguientes modos:
Inline Mode: Ejecuta un subconjunto de estados para cada elemento del array JSON. Adecuado para tareas a pequeña escala con menos de 40 iteraciones paralelas, ejecutando cada una de ellas en el contexto del flujo de trabajo que contiene el Map
state.
Distributed Mode: Diseñado para el procesamiento paralelo a gran escala con alta concurrencia. Soporta el procesamiento de grandes conjuntos de datos, como los almacenados en Amazon S3, permitiendo una alta concurrencia de hasta 10,000 ejecuciones paralelas de flujos de trabajo secundarios, ejecutando estos secundarios como una ejecución secundaria separada.
Step Functions también te permite gestionar implementaciones de flujos de trabajo a través de versions y aliases de máquinas de estado. Una versión representa una instantánea de una máquina de estado que puede ser ejecutada. Los alias sirven como punteros a hasta dos versiones de una máquina de estado.
Versions: Estas instantáneas inmutables de una máquina de estado se crean a partir de la revisión más reciente de esa máquina de estado. Cada versión se identifica por un ARN único que combina el ARN de la máquina de estado con el número de versión, separado por dos puntos (arn:aws:states:region:account-id:stateMachine:StateMachineName:version-number
). Las versiones no pueden ser editadas, pero puedes actualizar la máquina de estado y publicar una nueva versión, o usar la versión de máquina de estado deseada.
Aliases: Estos punteros pueden hacer referencia a hasta dos versiones de la misma máquina de estado. Se pueden crear múltiples alias para una sola máquina de estado, cada uno identificado por un ARN único construido combinando el ARN de la máquina de estado con el nombre del alias, separado por dos puntos (arn:aws:states:region:account-id:stateMachine:StateMachineName:aliasName
). Los alias permiten el enrutamiento de tráfico entre una de las dos versiones de una máquina de estado. Alternativamente, un alias puede apuntar a una versión específica de la máquina de estado, pero no a otros alias. Pueden ser actualizados para redirigir a una versión diferente de la máquina de estado según sea necesario, facilitando implementaciones controladas y gestión de flujos de trabajo.
Para más información detallada sobre ASL, consulta: Amazon States Language.
AWS Step Functions utiliza roles de AWS Identity and Access Management (IAM) para controlar el acceso a recursos y acciones dentro de las máquinas de estado. Aquí están los aspectos clave relacionados con la seguridad y los roles de IAM en AWS Step Functions:
Execution Role: Cada máquina de estado en AWS Step Functions está asociada con un rol de ejecución de IAM. Este rol define qué acciones puede realizar la máquina de estado en tu nombre. Cuando una máquina de estado transita entre estados que interactúan con servicios de AWS (como invocar funciones Lambda, acceder a DynamoDB, etc.), asume este rol de ejecución para llevar a cabo esas acciones.
Permissions: El rol de ejecución de IAM debe ser configurado con permisos que permitan las acciones necesarias en otros servicios de AWS. Por ejemplo, si tu máquina de estado necesita invocar funciones de AWS Lambda, el rol de IAM debe tener permisos de lambda:InvokeFunction
. De manera similar, si necesita escribir en DynamoDB, deben otorgarse los permisos apropiados (dynamodb:PutItem
, dynamodb:UpdateItem
, etc.).
La política ReadOnlyAccess es suficiente para todas las siguientes acciones de enumeración.
En la siguiente página, puedes verificar cómo abusar de los permisos de Step Functions para escalar privilegios:
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)