AWS - Step Functions Enum
Reading time: 11 minutes
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Step Functions
AWS Step Functions je servis za radne tokove koji vam omogućava da koordinirate i orkestrirate više AWS servisa u serverless radne tokove. Korišćenjem AWS Step Functions, možete dizajnirati i pokretati radne tokove koji povezuju različite AWS servise kao što su AWS Lambda, Amazon S3, Amazon DynamoDB i mnoge druge, u nizu koraka. Ova orkestracija pruža vizuelni interfejs za radne tokove i nudi state machine mogućnosti, omogućavajući vam da definišete svaki korak radnog toka na deklarativan način koristeći JSON-bazirani Amazon States Language (ASL).
Ključni koncepti
Standardni vs. Express Radni Tokovi
AWS Step Functions nudi dva tipa state machine workflows: Standardni i Express.
- Standardni Radni Tok: Ova podrazumevana vrsta radnog toka je dizajnirana za dugotrajne, izdržljive i auditable procese. Podržava tačno-jednom izvršenje, osiguravajući da se zadaci izvršavaju samo jednom osim ako nisu navedeni ponovni pokušaji. Idealna je za radne tokove koji zahtevaju detaljnu istoriju izvršenja i može trajati do jedne godine.
- Express Radni Tok: Ova vrsta je idealna za zadatke visokog obima i kratkog trajanja, koji traju do pet minuta. Podržavaju barem-jednom izvršenje, pogodno za idempotentne zadatke kao što je obrada podataka. Ovi radni tokovi su optimizovani za troškove i performanse, naplaćujući na osnovu izvršenja, trajanja i korišćenja memorije.
Stanja
Stanja su osnovne jedinice state mašina. Definišu pojedinačne korake unutar radnog toka, mogući su da izvršavaju razne funkcije u zavisnosti od tipa:
- Zadatak: Izvršava posao, često koristeći AWS servis kao što je Lambda.
- Izbor: Donosi odluke na osnovu ulaza.
- Neuspeh/Uspjeh: Završava izvršenje neuspehom ili uspehom.
- Prolaz: Prolazi ulaz u izlaz ili ubacuje podatke.
- Čekanje: Odlaže izvršenje na određeno vreme.
- Paralelno: Pokreće paralelne grane.
- Mapiranje: Dinamički iterira korake preko stavki.
Zadatak
Zadatak stanje predstavlja jednu jedinicu posla koju izvršava state mašina. Zadatci mogu pozivati različite resurse, uključujući aktivnosti, Lambda funkcije, AWS servise ili API-je trećih strana.
- Aktivnosti: Prilagođeni radnici koje upravljate, pogodni za dugotrajne procese.
- Resurs:
arn:aws:states:region:account:activity:name
. - Lambda Funkcije: Izvršava AWS Lambda funkcije.
- Resurs:
arn:aws:lambda:region:account:function:function-name
. - AWS Servisi: Integrira se direktno sa drugim AWS servisima, kao što su DynamoDB ili S3.
- Resurs:
arn:partition:states:region:account:servicename:APIname
. - HTTP Zadatak: Poziva API-je trećih strana.
- Polje resursa:
arn:aws:states:::http:invoke
. Zatim, trebate pružiti detalje konfiguracije API krajnje tačke, kao što su API URL, metoda i detalji autentifikacije.
Sledeći primer prikazuje definiciju Zadatka koja poziva Lambda funkciju pod nazivom HelloWorld:
"HelloWorld": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Parameters": {
"Payload.$": "$",
"FunctionName": "arn:aws:lambda:<region>:<account-id>:function:HelloWorld"
},
"End": true
}
Choice
A Choice state dodaje uslovnu logiku u radni tok, omogućavajući odluke na osnovu ulaznih podataka. Evaluira navedene uslove i prelazi u odgovarajuću državu na osnovu rezultata.
- Comparison: Svako pravilo izbora uključuje operator poređenja (npr.,
NumericEquals
,StringEquals
) koji upoređuje ulaznu promenljivu sa određenom vrednošću ili drugom promenljivom. - Next Field: Choice states ne podržavaju
End
polje, umesto toga definišuNext
stanje u koje će preći ako je poređenje tačno.
Primer Choice state:
{
"Variable": "$.timeStamp",
"TimestampEquals": "2000-01-01T00:00:00Z",
"Next": "TimeState"
}
Fail/Succeed
A Fail
stanje zaustavlja izvršenje mašine stanja i označava je kao neuspeh. Koristi se za specificiranje imena greške i uzroka, pružajući detalje o neuspehu. Ovo stanje je terminalno, što znači da završava tok izvršenja.
A Succeed
stanje uspešno zaustavlja izvršenje. Obično se koristi za završavanje radnog toka kada se uspešno završi. Ovo stanje ne zahteva Next
polje.
"FailState": {
"Type": "Fail",
"Error": "ErrorName",
"Cause": "Error details"
}
Pass
Pass stanje prosleđuje svoj ulaz na svoj izlaz ili bez obavljanja bilo kakvog posla ili transformišući JSON ulaz stanja koristeći filtre, a zatim prosleđuje transformisane podatke sledećem stanju. Korisno je za testiranje i konstruisanje stanja mašina, omogućavajući vam da ubacite statičke podatke ili ih transformišete.
"PassState": {
"Type": "Pass",
"Result": {"key": "value"},
"ResultPath": "$.newField",
"Next": "NextState"
}
Wait
Wait stanje odlaže izvršenje mašine stanja na određeni vremenski period. Postoje tri osnovne metode za podešavanje vremena čekanja:
- X Sekundi: Fiksan broj sekundi za čekanje.
"WaitState": {
"Type": "Wait",
"Seconds": 10,
"Next": "NextState"
}
- Apsolutni vremenski pečat: Tačno vreme do kada treba čekati.
"WaitState": {
"Type": "Wait",
"Timestamp": "2024-03-14T01:59:00Z",
"Next": "NextState"
}
- Dinamičko čekanje: Na osnovu ulaza koristeći
SecondsPath
iliTimestampPath
.
jsonCopiar código
"WaitState": {
"Type": "Wait",
"TimestampPath": "$.expirydate",
"Next": "NextState"
}
Parallel
Parallel stanje omogućava vam da izvršavate više grana zadataka istovremeno unutar vašeg radnog toka. Svaka grana se izvršava nezavisno i obrađuje svoju vlastitu sekvencu stanja. Izvršenje čeka dok sve grane ne završe pre nego što pređe na sledeće stanje. Njegova ključna polja su:
- Branches: Niz koji definiše paralelne putanje izvršenja. Svaka grana je posebna mašina stanja.
- ResultPath: Definiše gde (u ulazu) da se postavi kombinovani izlaz grana.
- Retry and Catch: Konfiguracije za obradu grešaka za paralelno stanje.
"ParallelState": {
"Type": "Parallel",
"Branches": [
{
"StartAt": "Task1",
"States": { ... }
},
{
"StartAt": "Task2",
"States": { ... }
}
],
"Next": "NextState"
}
Map
Map stanje omogućava izvršavanje skupa koraka za svaki element u skupu podataka. Koristi se za paralelno procesiranje podataka. U zavisnosti od toga kako želite da obradite stavke skupa podataka, Step Functions pruža sledeće režime:
- Inline Mode: Izvršava podskup stanja za svaki JSON niz stavki. Pogodno za male zadatke sa manje od 40 paralelnih iteracija, izvršavajući svaku od njih u kontekstu radnog toka koji sadrži
Map
stanje.
"MapState": {
"Type": "Map",
"ItemsPath": "$.arrayItems",
"ItemProcessor": {
"ProcessorConfig": {
"Mode": "INLINE"
},
"StartAt": "AddState",
"States": {
"AddState": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"OutputPath": "$.Payload",
"Parameters": {
"FunctionName": "arn:aws:lambda:<region>:<account-id>:function:add-function"
},
"End": true
}
}
},
"End": true
"ResultPath": "$.detail.added",
"ItemsPath": "$.added"
}
- Distributed Mode: Dizajniran za paralelno procesiranje velikih razmera sa visokom konkurencijom. Podržava obradu velikih skupova podataka, kao što su oni pohranjeni u Amazon S3, omogućavajući visoku konkurenciju do 10,000 paralelnih izvršavanja radnog toka, izvršavajući ove decu kao odvojeno izvršavanje.
"DistributedMapState": {
"Type": "Map",
"ItemReader": {
"Resource": "arn:aws:states:::s3:getObject",
"Parameters": {
"Bucket": "my-bucket",
"Key": "data.csv"
}
},
"ItemProcessor": {
"ProcessorConfig": {
"Mode": "DISTRIBUTED",
"ExecutionType": "EXPRESS"
},
"StartAt": "ProcessItem",
"States": {
"ProcessItem": {
"Type": "Task",
"Resource": "arn:aws:lambda:region:account-id:function:my-function",
"End": true
}
}
},
"End": true
"ResultWriter": {
"Resource": "arn:aws:states:::s3:putObject",
"Parameters": {
"Bucket": "myOutputBucket",
"Prefix": "csvProcessJobs"
}
}
}
Versions and aliases
Step Functions takođe omogućava upravljanje implementacijama radnog toka kroz versions i aliases mašine stanja. Verzija predstavlja snimak mašine stanja koji može biti izvršen. Alias služi kao pokazivač na do dve verzije mašine stanja.
- Versions: Ovi nepromenljivi snimci mašine stanja kreiraju se iz najnovije revizije te mašine stanja. Svaka verzija se identifikuje jedinstvenim ARN-om koji kombinuje ARN mašine stanja sa brojem verzije, odvojenim dvotačkom (
arn:aws:states:region:account-id:stateMachine:StateMachineName:version-number
). Verzije se ne mogu uređivati, ali možete ažurirati mašinu stanja i objaviti novu verziju, ili koristiti željenu verziju mašine stanja. - Aliases: Ovi pokazivači mogu referencirati do dve verzije iste mašine stanja. Više aliasa može biti kreirano za jednu mašinu stanja, svaki identifikovan jedinstvenim ARN-om konstruisanim kombinovanjem ARN mašine stanja sa imenom aliasa, odvojenim dvotačkom (
arn:aws:states:region:account-id:stateMachine:StateMachineName:aliasName
). Aliasi omogućavaju usmeravanje saobraćaja između jedne od dve verzije mašine stanja. Alternativno, alias može ukazivati na jednu specifičnu verziju mašine stanja, ali ne na druge alias-e. Mogu se ažurirati da preusmere na drugu verziju mašine stanja po potrebi, olakšavajući kontrolisane implementacije i upravljanje radnim tokom.
Za detaljnije informacije o ASL, proverite: Amazon States Language.
IAM Roles for State machines
AWS Step Functions koristi AWS Identity and Access Management (IAM) uloge za kontrolu pristupa resursima i akcijama unutar mašine stanja. Evo ključnih aspekata vezanih za bezbednost i IAM uloge u AWS Step Functions:
- Execution Role: Svaka mašina stanja u AWS Step Functions je povezana sa IAM ulogom za izvršenje. Ova uloga definiše koje akcije mašina stanja može izvesti u vaše ime. Kada mašina stanja prelazi između stanja koja komuniciraju sa AWS uslugama (kao što je pozivanje Lambda funkcija, pristupanje DynamoDB, itd.), preuzima ovu ulogu za izvršenje da bi izvršila te akcije.
- Permissions: IAM uloga za izvršenje mora biti konfigurisana sa dozvolama koje omogućavaju neophodne akcije na drugim AWS uslugama. Na primer, ako vaša mašina stanja treba da pozove AWS Lambda funkcije, IAM uloga mora imati
lambda:InvokeFunction
dozvole. Slično, ako treba da piše u DynamoDB, odgovarajuće dozvole (dynamodb:PutItem
,dynamodb:UpdateItem
, itd.) moraju biti dodeljene.
Enumeration
ReadOnlyAccess politika je dovoljna za sve sledeće akcije enumeracije.
# State machines #
## List state machines
aws stepfunctions list-state-machines
## Retrieve informatio about the specified state machine
aws stepfunctions describe-state-machine --state-machine-arn <value>
## List versions for the specified state machine
aws stepfunctions list-state-machine-versions --state-machine-arn <value>
## List aliases for the specified state machine
aws stepfunctions list-state-machine-aliases --state-machine-arn <value>
## Retrieve information about the specified state machine alias
aws stepfunctions describe-state-machine-alias --state-machine-alias-arn <value>
## List executions of a state machine
aws stepfunctions list-executions --state-machine-arn <value> [--status-filter <RUNNING | SUCCEEDED | FAILED | TIMED_OUT | ABORTED | PENDING_REDRIVE>] [--redrive-filter <REDRIVEN | NOT_REDRIVEN>]
## Retrieve information and relevant metadata about a state machine execution (output included)
aws stepfunctions describe-execution --execution-arn <value>
## Retrieve information about the state machine associated to the specified execution
aws stepfunctions describe-state-machine-for-execution --execution-arn <value>
## Retrieve the history of the specified execution as a list of events
aws stepfunctions get-execution-history --execution-arn <value> [--reverse-order | --no-reverse-order] [--include-execution-data | --no-include-execution-data]
## List tags for the specified step Functions resource
aws stepfunctions list-tags-for-resource --resource-arn <value>
## Validate the definition of a state machine without creating the resource
aws stepfunctions validate-state-machine-definition --definition <value> [--type <STANDARD | EXPRESS>]
# Activities #
## List existing activities
aws stepfunctions list-activities
## Retrieve information about the specified activity
aws stepfunctions describe-activity --activity-arn <value>
# Map Runs #
## List map runs of an execution
aws stepfunctions list-map-runs --execution-arn <value>
## Provide information about the configuration, progress and results of a Map Run
aws stepfunctions describe-map-run --map-run-arn <value>
## Lists executions of a Map Run
aws stepfunctions list-executions --map-run-arn <value> [--status-filter <RUNNING | SUCCEEDED | FAILED | TIMED_OUT | ABORTED | PENDING_REDRIVE>] [--redrive-filter <REDRIVEN | NOT_REDRIVEN>]
Privesc
Na sledećoj stranici možete proveriti kako da zloupotrebite Step Functions dozvole za eskalaciju privilegija:
Post Exploitation
AWS - Step Functions Post Exploitation
Persistence
AWS - Step Functions Persistence
References
- https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsstepfunctions.html
- https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html
- https://states-language.net/spec.html
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.