AWS - Step Functions Enum
Last updated
Last updated
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
AWS Step Functions é um serviço de fluxo de trabalho que permite coordenar e orquestrar vários serviços da AWS em fluxos de trabalho sem servidor. Usando o AWS Step Functions, você pode projetar e executar fluxos de trabalho que conectam vários serviços da AWS, como AWS Lambda, Amazon S3, Amazon DynamoDB e muitos mais, em uma sequência de etapas. Este serviço de orquestração fornece uma interface visual de fluxo de trabalho e oferece capacidades de máquina de estados, permitindo que você defina cada etapa do fluxo de trabalho de maneira declarativa usando a Linguagem de Estados da Amazon (ASL) baseada em JSON.
AWS Step Functions oferece dois tipos de fluxos de trabalho de máquina de estados: Padrão e Express.
Fluxo de Trabalho Padrão: Este tipo de fluxo de trabalho padrão é projetado para processos de longa duração, duráveis e auditáveis. Ele suporta execução exatamente uma vez, garantindo que as tarefas sejam executadas apenas uma vez, a menos que as tentativas sejam especificadas. É ideal para fluxos de trabalho que precisam de um histórico de execução detalhado e pode durar até um ano.
Fluxo de Trabalho Express: Este tipo é ideal para tarefas de alto volume e curta duração, com duração de até cinco minutos. Eles suportam execução pelo menos uma vez, adequado para tarefas idempotentes, como processamento de dados. Esses fluxos de trabalho são otimizados para custo e desempenho, cobrando com base em execuções, duração e uso de memória.
Os estados são as unidades essenciais das máquinas de estados. Eles definem as etapas individuais dentro de um fluxo de trabalho, podendo realizar uma variedade de funções dependendo de seu tipo:
Tarefa: Executa um trabalho, muitas vezes usando um serviço da AWS como Lambda.
Escolha: Toma decisões com base na entrada.
Falha/Sucesso: Encerra a execução com uma falha ou sucesso.
Passar: Passa a entrada para a saída ou injeta dados.
Esperar: Atraso na execução por um tempo definido.
Paralelo: Inicia ramificações paralelas.
Mapeamento: Itera dinamicamente etapas sobre itens.
Um estado de Tarefa representa uma única unidade de trabalho executada por uma máquina de estados. As tarefas podem invocar vários recursos, incluindo atividades, funções Lambda, serviços da AWS ou APIs de terceiros.
Atividades: Trabalhadores personalizados que você gerencia, adequados para processos de longa duração.
Recurso: arn:aws:states:region:account:activity:name
.
Funções Lambda: Executa funções AWS Lambda.
Recurso: arn:aws:lambda:region:account:function:function-name
.
Serviços da AWS: Integra-se diretamente com outros serviços da AWS, como DynamoDB ou S3.
Recurso: arn:partition:states:region:account:servicename:APIname
.
Tarefa HTTP: Chama APIs de terceiros.
Campo de recurso: arn:aws:states:::http:invoke
. Em seguida, você deve fornecer os detalhes de configuração do endpoint da API, como a URL da API, método e detalhes de autenticação.
O seguinte exemplo mostra uma definição de estado de Tarefa que invoca uma função Lambda chamada HelloWorld:
Um Choice state adiciona lógica condicional a um fluxo de trabalho, permitindo decisões com base em dados de entrada. Ele avalia as condições especificadas e transita para o estado correspondente com base nos resultados.
Comparação: Cada regra de escolha inclui um operador de comparação (por exemplo, NumericEquals
, StringEquals
) que compara uma variável de entrada a um valor especificado ou outra variável.
Campo Next: Os estados de escolha não suportam o campo End
, em vez disso, eles definem o estado Next
para transitar se a comparação for verdadeira.
Exemplo de Choice state:
Um Fail
estado interrompe a execução de uma máquina de estados e a marca como uma falha. É usado para especificar um nome de erro e uma causa, fornecendo detalhes sobre a falha. Este estado é terminal, o que significa que encerra o fluxo de execução.
Um Succeed
estado interrompe a execução com sucesso. É tipicamente usado para encerrar o fluxo de trabalho quando ele é concluído com sucesso. Este estado não requer um campo Next
.
Um estado Pass passa sua entrada para sua saída, seja sem realizar qualquer trabalho ou transformando a entrada do estado JSON usando filtros, e então passando os dados transformados para o próximo estado. É útil para testar e construir máquinas de estado, permitindo que você injete dados estáticos ou os transforme.
Um Wait state atrasa a execução da máquina de estados por uma duração especificada. Existem três métodos principais para configurar o tempo de espera:
X Segundos: Um número fixo de segundos para esperar.
Timestamp Absoluto: Um horário exato para esperar até.
Espera Dinâmica: Baseada em entrada usando SecondsPath
ou TimestampPath
.
Um Parallel state permite que você execute múltiplos ramos de tarefas simultaneamente dentro do seu fluxo de trabalho. Cada ramo é executado de forma independente e processa sua própria sequência de estados. A execução espera até que todos os ramos sejam concluídos antes de prosseguir para o próximo estado. Seus campos principais são:
Branches: Um array definindo os caminhos de execução paralela. Cada ramo é uma máquina de estados separada.
ResultPath: Define onde (na entrada) colocar a saída combinada dos ramos.
Retry e Catch: Configurações de tratamento de erros para o estado paralelo.
Um Map state permite a execução de um conjunto de etapas para cada item em um conjunto de dados. É usado para processamento paralelo de dados. Dependendo de como você deseja processar os itens do conjunto de dados, o Step Functions fornece os seguintes modos:
Modo Inline: Executa um subconjunto de estados para cada item do array JSON. Adequado para tarefas em pequena escala com menos de 40 iterações paralelas, executando cada uma delas no contexto do fluxo de trabalho que contém o Map
state.
Modo Distribuído: Projetado para processamento paralelo em larga escala com alta concorrência. Suporta o processamento de grandes conjuntos de dados, como aqueles armazenados no Amazon S3, permitindo uma alta concorrência de até 10.000 execuções paralelas de fluxos de trabalho filhos, executando esses filhos como uma execução separada.
O Step Functions também permite gerenciar implantações de fluxo de trabalho através de versões e aliases de máquinas de estado. Uma versão representa uma captura instantânea de uma máquina de estado que pode ser executada. Aliases servem como ponteiros para até duas versões de uma máquina de estado.
Versões: Essas capturas instantâneas imutáveis de uma máquina de estado são criadas a partir da revisão mais recente dessa máquina de estado. Cada versão é identificada por um ARN exclusivo que combina o ARN da máquina de estado com o número da versão, separado por dois pontos (arn:aws:states:region:account-id:stateMachine:StateMachineName:version-number
). Versões não podem ser editadas, mas você pode atualizar a máquina de estado e publicar uma nova versão, ou usar a versão desejada da máquina de estado.
Aliases: Esses ponteiros podem referenciar até duas versões da mesma máquina de estado. Múltiplos aliases podem ser criados para uma única máquina de estado, cada um identificado por um ARN exclusivo construído combinando o ARN da máquina de estado com o nome do alias, separado por dois pontos (arn:aws:states:region:account-id:stateMachine:StateMachineName:aliasName
). Aliases permitem o roteamento de tráfego entre uma das duas versões de uma máquina de estado. Alternativamente, um alias pode apontar para uma única versão específica da máquina de estado, mas não para outros aliases. Eles podem ser atualizados para redirecionar para uma versão diferente da máquina de estado conforme necessário, facilitando implantações controladas e gerenciamento de fluxo de trabalho.
Para mais informações detalhadas sobre ASL, consulte: Amazon States Language.
O AWS Step Functions utiliza funções do AWS Identity and Access Management (IAM) para controlar o acesso a recursos e ações dentro das máquinas de estado. Aqui estão os principais aspectos relacionados à segurança e funções IAM no AWS Step Functions:
Função de Execução: Cada máquina de estado no AWS Step Functions está associada a uma função de execução IAM. Essa função define quais ações a máquina de estado pode realizar em seu nome. Quando uma máquina de estado transita entre estados que interagem com serviços AWS (como invocar funções Lambda, acessar DynamoDB, etc.), ela assume essa função de execução para realizar essas ações.
Permissões: A função de execução IAM deve ser configurada com permissões que permitam as ações necessárias em outros serviços AWS. Por exemplo, se sua máquina de estado precisar invocar funções AWS Lambda, a função IAM deve ter permissões lambda:InvokeFunction
. Da mesma forma, se precisar gravar no DynamoDB, permissões apropriadas (dynamodb:PutItem
, dynamodb:UpdateItem
, etc.) devem ser concedidas.
A política ReadOnlyAccess é suficiente para todas as seguintes ações de enumeração.
Na página a seguir, você pode verificar como abusar das permissões do Step Functions para escalar privilégios:
AWS - Step Functions PrivescAprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)