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 è un servizio di workflow che ti consente di coordinare e orchestrare più servizi AWS in flussi di lavoro serverless. Utilizzando AWS Step Functions, puoi progettare e eseguire flussi di lavoro che collegano vari servizi AWS come AWS Lambda, Amazon S3, Amazon DynamoDB e molti altri, in una sequenza di passaggi. Questo servizio di orchestrazione fornisce un'interfaccia visiva per i flussi di lavoro e offre capacità di macchina a stati, consentendoti di definire ogni passaggio del flusso di lavoro in modo dichiarativo utilizzando il Amazon States Language (ASL) basato su JSON.
AWS Step Functions offre due tipi di flussi di lavoro della macchina a stati: Standard ed Express.
Standard Workflow: Questo tipo di flusso di lavoro predefinito è progettato per processi a lungo termine, durevoli e auditabili. Supporta l'esecuzione esatta una volta, garantendo che i compiti vengano eseguiti solo una volta a meno che non vengano specificati i tentativi. È ideale per flussi di lavoro che necessitano di una cronologia di esecuzione dettagliata e può durare fino a un anno.
Express Workflow: Questo tipo è ideale per compiti ad alto volume e breve durata, che durano fino a cinque minuti. Supportano l'esecuzione almeno una volta, adatta per compiti idempotenti come l'elaborazione dei dati. Questi flussi di lavoro sono ottimizzati per costi e prestazioni, addebitando in base alle esecuzioni, alla durata e all'uso della memoria.
Gli stati sono le unità essenziali delle macchine a stati. Definiscono i singoli passaggi all'interno di un flusso di lavoro, potendo eseguire una varietà di funzioni a seconda del tipo:
Task: Esegue un lavoro, spesso utilizzando un servizio AWS come Lambda.
Choice: Prende decisioni basate sull'input.
Fail/Succeed: Termina l'esecuzione con un fallimento o un successo.
Pass: Passa l'input all'output o inietta dati.
Wait: Ritarda l'esecuzione per un tempo stabilito.
Parallel: Inizia rami paralleli.
Map: Itera dinamicamente i passaggi su elementi.
Uno stato Task rappresenta una singola unità di lavoro eseguita da una macchina a stati. I task possono invocare varie risorse, comprese attività, funzioni Lambda, servizi AWS o API di terze parti.
Activities: Lavoratori personalizzati che gestisci, adatti per processi a lungo termine.
Risorsa: arn:aws:states:region:account:activity:name
.
Lambda Functions: Esegue funzioni AWS Lambda.
Risorsa: arn:aws:lambda:region:account:function:function-name
.
AWS Services: Si integra direttamente con altri servizi AWS, come DynamoDB o S3.
Risorsa: arn:partition:states:region:account:servicename:APIname
.
HTTP Task: Chiama API di terze parti.
Campo risorsa: arn:aws:states:::http:invoke
. Quindi, dovresti fornire i dettagli di configurazione dell'endpoint API, come l'URL dell'API, il metodo e i dettagli di autenticazione.
Il seguente esempio mostra una definizione di stato Task che invoca una funzione Lambda chiamata HelloWorld:
Uno stato di Choice aggiunge logica condizionale a un flusso di lavoro, abilitando decisioni basate sui dati di input. Valuta le condizioni specificate e transita allo stato corrispondente in base ai risultati.
Confronto: Ogni regola di scelta include un operatore di confronto (ad es., NumericEquals
, StringEquals
) che confronta una variabile di input con un valore specificato o un'altra variabile.
Campo Next: Gli stati di scelta non supportano il campo End
, invece, definiscono lo stato Next
a cui transitare se il confronto è vero.
Esempio di stato Choice:
Uno stato Fail
interrompe l'esecuzione di una macchina a stati e la segna come un fallimento. Viene utilizzato per specificare un nome di errore e una causa, fornendo dettagli sul fallimento. Questo stato è terminale, il che significa che termina il flusso di esecuzione.
Uno stato Succeed
interrompe l'esecuzione con successo. Viene tipicamente utilizzato per terminare il flusso di lavoro quando viene completato con successo. Questo stato non richiede un campo Next
.
Uno stato Pass passa il suo input al suo output senza eseguire alcun lavoro o trasformando l'input dello stato JSON utilizzando filtri, e poi passando i dati trasformati al prossimo stato. È utile per testare e costruire macchine di stato, permettendo di iniettare dati statici o trasformarli.
Uno stato di Wait ritarda l'esecuzione della macchina a stati per una durata specificata. Ci sono tre metodi principali per configurare il tempo di attesa:
X Secondi: Un numero fisso di secondi da attendere.
Timestamp Assoluto: Un orario esatto fino al quale attendere.
Attesa Dinamica: Basata su input utilizzando SecondsPath
o TimestampPath
.
Uno stato di Parallel consente di eseguire più rami di attività in modo concorrente all'interno del tuo flusso di lavoro. Ogni ramo viene eseguito in modo indipendente e elabora la propria sequenza di stati. L'esecuzione attende fino al completamento di tutti i rami prima di procedere allo stato successivo. I suoi campi chiave sono:
Branches: Un array che definisce i percorsi di esecuzione paralleli. Ogni ramo è una macchina a stati separata.
ResultPath: Definisce dove (nell'input) posizionare l'output combinato dei rami.
Retry and Catch: Configurazioni di gestione degli errori per lo stato parallelo.
Uno stato Map consente l'esecuzione di un insieme di passaggi per ogni elemento in un dataset. Viene utilizzato per l'elaborazione parallela dei dati. A seconda di come si desidera elaborare gli elementi del dataset, Step Functions fornisce i seguenti modi:
Modalità Inline: Esegue un sottoinsieme di stati per ogni elemento dell'array JSON. Adatto per compiti su piccola scala con meno di 40 iterazioni parallele, eseguendo ciascuna di esse nel contesto del flusso di lavoro che contiene lo stato Map
.
Modalità Distribuita: Progettata per l'elaborazione parallela su larga scala con alta concorrenza. Supporta l'elaborazione di grandi dataset, come quelli memorizzati in Amazon S3, consentendo un'alta concorrenza fino a 10.000 esecuzioni di flussi di lavoro secondari paralleli, eseguendo questi secondari come un'esecuzione secondaria separata.
Step Functions consente anche di gestire le distribuzioni dei flussi di lavoro attraverso versioni e alias delle macchine a stati. Una versione rappresenta uno snapshot di una macchina a stati che può essere eseguito. Gli alias fungono da puntatori a un massimo di due versioni di una macchina a stati.
Versioni: Questi snapshot immutabili di una macchina a stati vengono creati dalla revisione più recente di quella macchina a stati. Ogni versione è identificata da un ARN unico che combina l'ARN della macchina a stati con il numero di versione, separati da due punti (arn:aws:states:region:account-id:stateMachine:StateMachineName:version-number
). Le versioni non possono essere modificate, ma è possibile aggiornare la macchina a stati e pubblicare una nuova versione, o utilizzare la versione desiderata della macchina a stati.
Alias: Questi puntatori possono fare riferimento a un massimo di due versioni della stessa macchina a stati. Possono essere creati più alias per una singola macchina a stati, ciascuno identificato da un ARN unico costruito combinando l'ARN della macchina a stati con il nome dell'alias, separati da due punti (arn:aws:states:region:account-id:stateMachine:StateMachineName:aliasName
). Gli alias consentono il routing del traffico tra una delle due versioni di una macchina a stati. In alternativa, un alias può puntare a una singola versione specifica della macchina a stati, ma non ad altri alias. Possono essere aggiornati per reindirizzare a una versione diversa della macchina a stati secondo necessità, facilitando distribuzioni controllate e gestione dei flussi di lavoro.
Per ulteriori informazioni dettagliate su ASL, controlla: Amazon States Language.
AWS Step Functions utilizza i ruoli di AWS Identity and Access Management (IAM) per controllare l'accesso alle risorse e alle azioni all'interno delle macchine a stati. Ecco gli aspetti chiave relativi alla sicurezza e ai ruoli IAM in AWS Step Functions:
Ruolo di Esecuzione: Ogni macchina a stati in AWS Step Functions è associata a un ruolo di esecuzione IAM. Questo ruolo definisce quali azioni la macchina a stati può eseguire per tuo conto. Quando una macchina a stati transita tra stati che interagiscono con i servizi AWS (come l'invocazione di funzioni Lambda, l'accesso a DynamoDB, ecc.), assume questo ruolo di esecuzione per svolgere quelle azioni.
Permessi: Il ruolo di esecuzione IAM deve essere configurato con permessi che consentano le azioni necessarie su altri servizi AWS. Ad esempio, se la tua macchina a stati deve invocare funzioni AWS Lambda, il ruolo IAM deve avere permessi lambda:InvokeFunction
. Allo stesso modo, se deve scrivere su DynamoDB, devono essere concessi i permessi appropriati (dynamodb:PutItem
, dynamodb:UpdateItem
, ecc.).
La policy ReadOnlyAccess è sufficiente per tutte le seguenti azioni di enumerazione.
Nella pagina seguente, puoi controllare come abuse Step Functions permissions to escalate privileges:
AWS - Step Functions PrivescLearn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)