AWS - Step Functions Enum
Last updated
Last updated
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)
AWS Step Functions, birden fazla AWS hizmetini sunucusuz iş akışlarına koordine etmenizi ve orkestre etmenizi sağlayan bir iş akışı hizmetidir. AWS Step Functions kullanarak, AWS Lambda, Amazon S3, Amazon DynamoDB ve daha birçok AWS hizmetini bir dizi adımda bağlayan iş akışları tasarlayıp çalıştırabilirsiniz. Bu orkestrasyon hizmeti, görsel bir iş akışı arayüzü sağlar ve durum makinesi yetenekleri sunar, böylece iş akışının her adımını JSON tabanlı Amazon States Language (ASL) kullanarak deklaratif bir şekilde tanımlamanıza olanak tanır.
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ı sağlar, yeniden denemeler belirtilmedikçe. 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, durum makinelerinin temel birimleridir. Bir iş akışındaki bireysel adımları tanımlar ve türüne bağlı olarak çeşitli işlevler gerçekleştirebilir:
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.
Bekle: Yürütmeyi belirli bir süre geciktirir.
Paralel: Paralel dalları başlatır.
Harita: Öğeler üzerinde adımları dinamik olarak yinelemeye olanak tanır.
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:
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.
Next Alanı: Choice 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:
Bir Fail
durumu, bir durum makinesinin yürütülmesini durdurur ve onu 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.
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. Test etmek ve durum makineleri oluşturmak için yararlıdır, statik verileri enjekte etmenize veya dönüştürmenize olanak tanır.
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ı.
Kesin Zaman Damgası: Beklemek için tam bir zaman.
Dinamik Bekleme: SecondsPath
veya TimestampPath
kullanarak girdiye dayalı.
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:
Branches: 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 and Catch: Paralel durum için hata işleme yapılandırmaları.
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 dizisi öğesi için bir alt küme durumu yürütür. 40'tan az paralel yineleme ile küçük ölçekli görevler için uygundur ve her birini Map
durumunu içeren iş akışının bağlamında çalıştırır.
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ütme olarak çalıştırır.
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 en fazla iki sürümüne işaret eder.
Sürümler: Bu değiştirilemez anlık görüntüler, 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 en fazla iki sürümüne atıfta bulunabilir. 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, farklı bir durum makinesi 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: Amazon States Language adresini kontrol edin.
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 anahtar noktalar şunlardır:
Yürütme Rolü: AWS Step Functions'daki her durum makinesi bir IAM yürütme rolü ile ilişkilendirilmiştir. 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.
ReadOnlyAccess politikası, aşağıdaki tüm sayım eylemleri için yeterlidir.
Aşağıdaki sayfada, Step Functions izinlerini kötüye kullanarak ayrıcalıkları artırmayı kontrol edebilirsiniz:
AWS - Step Functions PrivescAWS 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)