AWS - Lambda Enum
Last updated
Last updated
Amazon Web Services (AWS) Lambda je opisana kao usluga računanja koja omogućava izvršavanje koda bez potrebe za obezbeđivanjem ili upravljanjem serverom. Karakteriše je sposobnost da automatski upravlja dodelom resursa potrebnih za izvršavanje koda, obezbeđujući funkcionalnosti poput visoke dostupnosti, skalabilnosti i bezbednosti. Značajan aspekt Lambda-e je njen model cenjkanja, gde se naplaćuje samo vreme računanja koje se koristi, eliminišući potrebu za početnim investicijama ili dugoročnim obavezama.
Da biste pozvali lambdu, moguće je pozvati je koliko god puta želite (pomoću Cloudwatch-a), izložiti je kao URL endpoint i pozvati je, pozvati je putem API Gateway-a ili čak na osnovu događaja poput promena podataka u S3 bucket-u ili ažuriranja tabele DynamoDB.
Kod lambde se čuva u /var/task
.
Lambda može imati više verzija. I može imati više od 1 verzije izložene putem alias-a. Težine svake od verzija izložene unutar alias-a će odlučiti koji alias prima poziv (može biti 90%-10% na primer). Ako je kod jednog od alias-a ranjiv, možete slati zahteve dok ranjiva verzija ne primi eksploataciju.
Politike resursa lambde omogućavaju da se dodeli pristup drugim uslugama/računima za pozivanje lambde na primer. Na primer, ovo je politika koja omogućava bilo kome da pristupi lambdi izloženoj putem URL-a:
Ili ovo da omogući API Gateway-u da je pozove:
Kada postoji stotine istovremenih zahteva lambdi, ako svaki od njih treba da se poveže i zatvori vezu sa bazom podataka, to jednostavno neće funkcionisati (lambde su bez stanja, ne mogu održavati otvorene veze). Zatim, ako vaše **Lambda funkcije komuniciraju sa RDS Proksijem umesto sa vašom instancom baze podataka. On rukuje bazom za povezivanje neophodnom za skaliranje mnogih istovremenih veza kreiranih od strane istovremenih Lambda funkcija. Ovo omogućava vašim Lambda aplikacijama da ponovo koriste postojeće veze, umesto da kreiraju nove veze za svaki poziv funkcije.
Da bi sačuvale i čak delile podatke Lambde mogu pristupiti EFS-u i montirati ih, tako da će Lambda moći da čita i piše iz njega.
Lambda sloj je .zip arhiva koja može sadržati dodatni kod ili drugi sadržaj. Sloj može sadržati biblioteke, prilagođeno izvršno okruženje, podatke ili konfiguracione fajlove.
Moguće je uključiti do pet slojeva po funkciji. Kada uključite sloj u funkciju, sadržaj se izvlači u direktorijum /opt
u okruženju izvršavanja.
Po podrazumevanim postavkama, slojevi koje kreirate su privatni za vaš AWS nalog. Možete odabrati da podelite sloj sa drugim nalozima ili da ga učinite javnim. Ako vaše funkcije koriste sloj koji je objavio drugi nalog, vaše funkcije mogu nastaviti da koriste verziju sloja nakon što je izbrisan, ili nakon što vam je dozvola za pristup sloju opozvana. Međutim, ne možete kreirati novu funkciju ili ažurirati funkcije koristeći izbrisanu verziju sloja.
Funkcije implementirane kao kontejnerska slika ne koriste slojeve. Umesto toga, pakujete svoje preferirano izvršno okruženje, biblioteke i druge zavisnosti u kontejnersku sliku prilikom izgradnje slike.
Lambda ekstenzije poboljšavaju funkcije integrišući se sa različitim alatima za nadgledanje, opservabilnost, bezbednost i upravljanje. Ove ekstenzije, dodate putem .zip arhiva koristeći Lambda slojeve ili uključene u implementacije kontejnerskih slika, funkcionišu u dva moda: interni i eksterni.
Interni ekstenzije se spajaju sa procesom izvršavanja, manipulišući njegovim pokretanjem koristeći jezički specifične promenljive okruženja i omotačke skripte. Ova prilagođavanja se primenjuju na različite izvršne okoline, uključujući Java Correto 8 i 11, Node.js 10 i 12, i .NET Core 3.1.
Eksterni ekstenzije se izvršavaju kao odvojeni procesi, održavajući usklađenost operacija sa životnim ciklusom Lambda funkcije. Kompatibilne su sa različitim izvršnim okolinama poput Node.js 10 i 12, Python 3.7 i 3.8, Ruby 2.5 i 2.7, Java Corretto 8 i 11, .NET Core 3.1, i prilagođenim izvršnim okolinama.
Sada je vreme da otkrijemo moguće Lambda funkcije za izvršavanje:
Dostupna je Lambda funkcija nazvana "Level6". Hajde da saznamo kako je pozvati:
Sada kada znate ime i ID, možete dobiti Ime:
I na kraju pozovite funkciju pristupajući (primetite da se ID, Ime i ime funkcije pojavljuju u URL-u): https://s33ppypa75.execute-api.us-west-2.amazonaws.com/Prod/level6
URL:
https://<rest-api-id>.execute-api.<region>.amazonaws.com/<stageName>/<funcName>
Postoji mnogo drugih izvora koji mogu pokrenuti lambdu
Na sledećoj stranici možete proveriti kako zloupotrebiti dozvole Lambele za eskalaciju privilegija:
AWS - Lambda Privesc