AWS - Step Functions Enum

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Step Functions

AWS Step Functions, birden fazla AWS hizmetini sunucusuz iş akışlarına koordine etmenizi ve düzenlemenizi sağlayan bir iş akışı hizmetidir. AWS Step Functions kullanarak, AWS Lambda, Amazon S3, Amazon DynamoDB ve daha fazlası gibi çeşitli AWS hizmetlerini bir dizi adımda bağlayan iş akışları tasarlayıp çalıştırabilirsiniz. Bu düzenleme hizmeti, görsel bir iş akışı arayüzü sağlar ve her adımı JSON tabanlı Amazon States Language (ASL) kullanarak deklaratif bir şekilde tanımlamanıza olanak tanıyan durum makinesi yetenekleri sunar.

Ana kavramlar

Standart ve Express İş Akışları

AWS Step Functions, iki tür durum makinesi iş akışı sunar: Standart ve Express.

  • Standart İş Akışı: Bu varsayılan iş akışı türü, uzun süreli, dayanıklı ve denetlenebilir süreçler için tasarlanmıştır. tam olarak bir kez yürütme desteği sunar, bu da görevlerin yalnızca bir kez çalışmasını garanti eder, aksi takdirde yeniden denemeler belirtilmelidir. Detaylı yürütme geçmişine ihtiyaç duyan iş akışları için idealdir ve bir yıla kadar çalışabilir.
  • Express İş Akışı: Bu tür, yüksek hacimli, kısa süreli görevler için idealdir ve beş dakikaya kadar çalışabilir. en az bir kez yürütme desteği sunar, bu da veri işleme gibi idempotent görevler için uygundur. Bu iş akışları maliyet ve performans açısından optimize edilmiştir ve yürütmelere, süreye ve bellek kullanımına göre ücretlendirilir.

Durumlar

Durumlar, durum makinelerinin temel birimleridir. Bir iş akışındaki bireysel adımları tanımlar ve türüne bağlı olarak çeşitli işlevleri yerine getirebilir:

  • Görev: Genellikle Lambda gibi bir AWS hizmetini kullanarak bir işi yürütür.
  • Seçim: Girdi temelinde kararlar alır.
  • Başarısızlık/Başarı: Yürütmeyi bir başarısızlık veya başarı ile sonlandırır.
  • Geçiş: Girdiyi çıktıya aktarır veya veri enjekte eder.
  • Bekleme: Belirli bir süre yürütmeyi geciktirir.
  • Paralel: Paralel dalları başlatır.
  • Harita: Öğeler üzerinde dinamik olarak adımları yinelemeye alır.

Görev

Bir Görev durumu, bir durum makinesi tarafından yürütülen tek bir iş birimini temsil eder. Görevler, aktiviteler, Lambda fonksiyonları, AWS hizmetleri veya üçüncü taraf API’leri gibi çeşitli kaynakları çağırabilir.

  • Aktiviteler: Uzun süreli süreçler için uygun, sizin yönettiğiniz özel işçiler.
  • Kaynak: arn:aws:states:region:account:activity:name.
  • Lambda Fonksiyonları: AWS Lambda fonksiyonlarını yürütür.
  • Kaynak: arn:aws:lambda:region:account:function:function-name.
  • AWS Hizmetleri: DynamoDB veya S3 gibi diğer AWS hizmetleriyle doğrudan entegre olur.
  • Kaynak: arn:partition:states:region:account:servicename:APIname.
  • HTTP Görevi: Üçüncü taraf API’lerini çağırır.
  • Kaynak alanı: arn:aws:states:::http:invoke. Ardından, API URL’si, yöntem ve kimlik doğrulama detayları gibi API uç noktası yapılandırma bilgilerini sağlamalısınız.

Aşağıdaki örnek, HelloWorld adında bir Lambda fonksiyonunu çağıran bir Görev durumu tanımını göstermektedir:

"HelloWorld": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Parameters": {
"Payload.$": "$",
"FunctionName": "arn:aws:lambda:<region>:<account-id>:function:HelloWorld"
},
"End": true
}

Seçim

Bir Choice durumu, bir iş akışına koşullu mantık ekler ve girdi verilerine dayalı kararlar almayı sağlar. Belirtilen koşulları değerlendirir ve sonuçlara göre ilgili duruma geçiş yapar.

  • Karşılaştırma: Her seçim kuralı, bir girdi değişkenini belirtilen bir değerle veya başka bir değişkenle karşılaştıran bir karşılaştırma operatörü (örneğin, NumericEquals, StringEquals) içerir.
  • Sonraki Alan: Seçim durumları End alanını desteklemez, bunun yerine karşılaştırma doğruysa geçiş yapılacak Next durumunu tanımlar.

Choice durumu örneği:

{
"Variable": "$.timeStamp",
"TimestampEquals": "2000-01-01T00:00:00Z",
"Next": "TimeState"
}

Fail/Succeed

Bir Fail durumu, bir durum makinesinin yürütülmesini durdurur ve bunu bir hata olarak işaretler. Hata adını ve nedenini belirtmek için kullanılır, hatayla ilgili ayrıntılar sağlar. Bu durum terminaldir, yani yürütme akışını sonlandırır.

Bir Succeed durumu, yürütmeyi başarıyla durdurur. Genellikle, iş akışı başarıyla tamamlandığında sonlandırmak için kullanılır. Bu durum, bir Next alanı gerektirmez.

"FailState": {
"Type": "Fail",
"Error": "ErrorName",
"Cause": "Error details"
}

Pass

Bir Pass durumu, herhangi bir iş yapmadan veya JSON durum girdisini filtreler kullanarak dönüştürmeden, girdisini çıktısına aktarır ve ardından dönüştürülmüş veriyi bir sonraki duruma iletir. Statik verileri enjekte etmenize veya dönüştürmenize olanak tanıyarak durum makinelerini test etmek ve oluşturmak için faydalıdır.

"PassState": {
"Type": "Pass",
"Result": {"key": "value"},
"ResultPath": "$.newField",
"Next": "NextState"
}

Bekle

Bir Wait durumu, durum makinesinin yürütülmesini belirli bir süre geciktirir. Bekleme süresini yapılandırmak için üç ana yöntem vardır:

  • X Saniye: Beklemek için sabit bir saniye sayısı.
"WaitState": {
"Type": "Wait",
"Seconds": 10,
"Next": "NextState"
}
  • Kesin Zaman Damgası: Beklemek için tam bir zaman.
"WaitState": {
"Type": "Wait",
"Timestamp": "2024-03-14T01:59:00Z",
"Next": "NextState"
}
  • Dinamik Bekleme: SecondsPath veya TimestampPath kullanarak girdiye dayalı.
jsonCopiar código
"WaitState": {
"Type": "Wait",
"TimestampPath": "$.expirydate",
"Next": "NextState"
}

Paralel

Bir Parallel durumu, iş akışınız içinde birden fazla görev dalını eşzamanlı olarak yürütmenizi sağlar. Her dal bağımsız olarak çalışır ve kendi durum dizisini işler. Yürütme, tüm dallar tamamlanana kadar bekler ve ardından bir sonraki duruma geçer. Ana alanları şunlardır:

  • Dallar: Paralel yürütme yollarını tanımlayan bir dizi. Her dal ayrı bir durum makinesidir.
  • ResultPath: Dalların birleşik çıktısını nereye (girdide) yerleştireceğini tanımlar.
  • Retry ve Catch: Paralel durum için hata işleme yapılandırmaları.
"ParallelState": {
"Type": "Parallel",
"Branches": [
{
"StartAt": "Task1",
"States": { ... }
},
{
"StartAt": "Task2",
"States": { ... }
}
],
"Next": "NextState"
}

Harita

Bir Map durumu, bir veri kümesindeki her öğe için bir dizi adımın yürütülmesini sağlar. Verilerin paralel işlenmesi için kullanılır. Veri kümesindeki öğeleri nasıl işlemek istediğinize bağlı olarak, Step Functions aşağıdaki modları sunar:

  • Inline Modu: Her JSON dizi öğesi için bir alt küme durumunu yürütür. 40’tan az paralel yineleme ile küçük ölçekli görevler için uygundur ve bunların her birini Map durumunu içeren iş akışının bağlamında çalıştırır.
"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"
}
  • Dağıtılmış Mod: Yüksek eşzamanlılık ile büyük ölçekli paralel işleme için tasarlanmıştır. Amazon S3’te depolanan büyük veri kümelerini işleme desteği sunar ve 10,000’e kadar paralel çocuk iş akışı yürütmelerinin yüksek eşzamanlılığını sağlar, bu çocukları ayrı bir çocuk yürütmesi olarak çalıştırır.
"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"
}
}
}

Sürümler ve takma adlar

Step Functions, iş akışı dağıtımlarını sürümler ve takma adlar aracılığıyla yönetmenizi sağlar. Bir sürüm, yürütülebilen bir durum makinesinin anlık görüntüsünü temsil eder. Takma adlar, bir durum makinesinin iki sürümüne kadar işaretçi görevi görür.

  • Sürümler: Bu değiştirilemez durum makinesi anlık görüntüleri, o durum makinesinin en son revizyonundan oluşturulur. Her sürüm, durum makinesi ARN’si ile sürüm numarasını birleştiren benzersiz bir ARN ile tanımlanır ve iki nokta () ile ayrılır (arn:aws:states:region:account-id:stateMachine:StateMachineName:version-number**). Sürümler düzenlenemez, ancak durum makinesini güncelleyebilir ve yeni bir sürüm yayınlayabilir veya istenen durum makinesi sürümünü kullanabilirsiniz.
  • Takma Adlar: Bu işaretçiler, aynı durum makinesinin iki sürümüne kadar referans verebilir. Tek bir durum makinesi için birden fazla takma ad oluşturulabilir ve her biri, durum makinesi ARN’si ile takma ad adını birleştirerek oluşturulan benzersiz bir ARN ile tanımlanır, iki nokta ile ayrılır (arn:aws:states:region:account-id:stateMachine:StateMachineName:aliasName). Takma adlar, bir durum makinesinin iki sürümünden birine trafik yönlendirmeyi sağlar. Alternatif olarak, bir takma ad, durum makinesinin tek bir belirli sürümüne işaret edebilir, ancak diğer takma adlara işaret edemez. Gerekirse, durum makinesinin farklı bir sürümüne yönlendirmek için güncellenebilir, bu da kontrollü dağıtımları ve iş akışı yönetimini kolaylaştırır.

ASL hakkında daha ayrıntılı bilgi için kontrol edin: Amazon States Language.

Durum makineleri için IAM Rolleri

AWS Step Functions, durum makineleri içindeki kaynaklara ve eylemlere erişimi kontrol etmek için AWS Kimlik ve Erişim Yönetimi (IAM) rollerini kullanır. AWS Step Functions’daki güvenlik ve IAM rolleri ile ilgili ana noktalar şunlardır:

  • Yürütme Rolü: AWS Step Functions’daki her durum makinesi bir IAM yürütme rolü ile ilişkilidir. Bu rol, durum makinesinin sizin adınıza hangi eylemleri gerçekleştirebileceğini tanımlar. Bir durum makinesi, AWS hizmetleriyle etkileşime giren durumlar arasında geçiş yaptığında (örneğin, Lambda işlevlerini çağırma, DynamoDB’ye erişme vb.), bu eylemleri gerçekleştirmek için bu yürütme rolünü üstlenir.
  • İzinler: IAM yürütme rolü, diğer AWS hizmetlerinde gerekli eylemleri gerçekleştirmeye izin veren izinlerle yapılandırılmalıdır. Örneğin, durum makineniz AWS Lambda işlevlerini çağırması gerekiyorsa, IAM rolünün lambda:InvokeFunction izinlerine sahip olması gerekir. Benzer şekilde, DynamoDB’ye yazması gerekiyorsa, uygun izinler (dynamodb:PutItem, dynamodb:UpdateItem vb.) verilmelidir.

Sayım

ReadOnlyAccess politikası, aşağıdaki tüm sayım eylemleri için yeterlidir.

# 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

Aşağıdaki sayfada, Step Functions izinlerini kötüye kullanarak ayrıcalıkları artırma yöntemini kontrol edebilirsiniz:

AWS - Step Functions Privesc

Post Exploitation

AWS - Step Functions Post Exploitation

Persistence

AWS - Step Functions Persistence

References

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin