Translated ['src/banners/hacktricks-training.md', 'src/pentesting-ci-cd/

This commit is contained in:
Translator
2025-01-02 01:13:27 +00:00
parent 599a50fbec
commit c14d2efa43
215 changed files with 1670 additions and 1679 deletions

View File

@@ -1,4 +1,4 @@
# AWS - Step Functions Enum
# AWS - Enumeración de Step Functions
{{#include ../../../banners/hacktricks-training.md}}
@@ -6,41 +6,41 @@
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.
## Key concepts
## Conceptos clave
### Standard vs. Express Workflows
### Flujos de trabajo estándar vs. expresos
AWS Step Functions ofrece dos tipos de **flujos de trabajo de máquina de estados**: Estándar y Expreso.
- **Standard Workflow**: 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.
- **Express Workflow**: 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, duración y uso de memoria.
- **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.
### States
### Estados
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:
- **Task:** Ejecuta un trabajo, a menudo utilizando un servicio de AWS como Lambda.
- **Choice:** Toma decisiones basadas en la entrada.
- **Fail/Succeed:** Termina la ejecución con un fallo o éxito.
- **Pass:** Pasa la entrada a la salida o inyecta datos.
- **Wait:** Retrasa la ejecución por un tiempo establecido.
- **Parallel:** Inicia ramas paralelas.
- **Map:** Itera dinámicamente pasos sobre elementos.
- **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.
### Task
### Tarea
Un estado de **Task** representa una unidad de trabajo única ejecutada por una máquina de estados. Las tareas pueden invocar varios recursos, incluyendo actividades, funciones Lambda, servicios de AWS o APIs de terceros.
Un estado de **Tarea** representa una unidad de trabajo única ejecutada por una máquina de estados. Las tareas pueden invocar varios recursos, incluyendo actividades, funciones Lambda, servicios de AWS o APIs de terceros.
- **Activities**: Trabajadores personalizados que gestionas, adecuados para procesos de larga duración.
- Resource: **`arn:aws:states:region:account:activity:name`**.
- **Lambda Functions**: Ejecuta funciones de AWS Lambda.
- Resource: **`arn:aws:lambda:region:account:function:function-name`**.
- **AWS Services**: Se integra directamente con otros servicios de AWS, como DynamoDB o S3.
- Resource: **`arn:partition:states:region:account:servicename:APIname`**.
- **HTTP Task**: Llama a APIs de terceros.
- Resource field: **`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.
- **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 Task que invoca una función Lambda llamada HelloWorld:
El siguiente ejemplo muestra una definición de estado de Tarea que invoca una función Lambda llamada HelloWorld:
```json
"HelloWorld": {
"Type": "Task",
@@ -52,14 +52,14 @@ El siguiente ejemplo muestra una definición de estado de Task que invoca una fu
"End": true
}
```
### Choice
### Elección
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.
Un estado de **Choice** agrega lógica condicional a un flujo de trabajo, permitiendo decisiones basadas en datos de entrada. Evalúa las condiciones especificadas y transita al estado correspondiente según los resultados.
- **Comparison**: 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.
- **Next Field**: 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.
- **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 Siguiente**: Los estados de elección no admiten el campo **`End`**, en su lugar, definen el estado **`Next`** al que transitar si la comparación es verdadera.
Ejemplo de **Choice** state:
Ejemplo de estado de **Choice**:
```json
{
"Variable": "$.timeStamp",
@@ -67,7 +67,7 @@ Ejemplo de **Choice** state:
"Next": "TimeState"
}
```
### Fail/Succeed
### Fallar/Suceder
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.
@@ -95,7 +95,7 @@ Un **`Succeed`** estado detiene la ejecución con éxito. Se utiliza típicament
### Pass
Un **Pass** state 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 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.
```json
"PassState": {
"Type": "Pass",
@@ -104,11 +104,11 @@ Un **Pass** state pasa su entrada a su salida ya sea sin realizar ningún trabaj
"Next": "NextState"
}
```
### Wait
### Esperar
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:
Un estado de **Esperar** 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.
- **X Segundos**: Un número fijo de segundos para esperar.
```json
"WaitState": {
@@ -118,7 +118,7 @@ Un **Wait** state retrasa la ejecución de la máquina de estados por una duraci
}
```
- **Absolute Timestamp**: Un tiempo exacto hasta el cual esperar.
- **Marca de Tiempo Absoluta**: Un tiempo exacto hasta el cual esperar.
```json
"WaitState": {
@@ -128,7 +128,7 @@ Un **Wait** state retrasa la ejecución de la máquina de estados por una duraci
}
```
- **Dynamic Wait**: Basado en la entrada usando **`SecondsPath`** o **`TimestampPath`**.
- **Espera Dinámica**: Basada en la entrada utilizando **`SecondsPath`** o **`TimestampPath`**.
```json
jsonCopiar código
@@ -139,13 +139,13 @@ jsonCopiar código
}
```
### Parallel
### Paralelo
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:
Un estado de **Paralelo** 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.
- **Ramas**: Un arreglo 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.
- **Retry y Catch**: Configuraciones de manejo de errores para el estado paralelo.
```json
"ParallelState": {
"Type": "Parallel",
@@ -195,7 +195,7 @@ Un **Mapa** permite la ejecución de un conjunto de pasos para cada elemento en
}
```
- **Modo distribuido**: 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 de flujos de trabajo hijos paralelos, ejecutando estos hijos como una ejecución hija separada.
- **Modo distribuido**: 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 de flujo de trabajo hijo paralelas, ejecutando estos hijos como una ejecución hija separada.
```json
"DistributedMapState": {
@@ -236,8 +236,8 @@ Un **Mapa** permite la ejecución de un conjunto de pasos para cada elemento en
Step Functions también te permite gestionar implementaciones de flujos de trabajo a través de **versiones** y **alias** 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.
- **Versiones**: 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.
- **Alias**: 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.
- **Versiones**: 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 deseada de la máquina de estado.
- **Alias**: Estos punteros pueden referirse 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**](https://states-language.net/spec.html).
@@ -246,7 +246,7 @@ Para más información detallada sobre **ASL**, consulta: [**Amazon States Langu
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:
- **Rol de ejecución**: 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.
- **Permisos**: 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, se deben otorgar los permisos apropiados (**`dynamodb:PutItem`**, **`dynamodb:UpdateItem`**, etc.).
- **Permisos**: El rol de ejecución de IAM debe estar 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, se deben otorgar los permisos apropiados (**`dynamodb:PutItem`**, **`dynamodb:UpdateItem`**, etc.).
## Enumeración