AWS - Lambda Enum
Last updated
Last updated
Amazon Web Services (AWS) Lambda word beskryf as 'n berekeningsdiens wat die uitvoering van kode moontlik maak sonder die noodsaaklikheid vir bedienervoorsiening of -bestuur. Dit word gekenmerk deur sy vermoë om hulpbrontoewysing outomaties te hanteer wat nodig is vir kode-uitvoering, wat funksies soos hoë beskikbaarheid, skaalbaarheid en sekuriteit verseker. 'n Beduidende aspek van Lambda is sy prysmodel, waar heffings uitsluitlik gebaseer is op die gebruik van berekeningstyd, wat die behoefte aan aanvanklike beleggings of langtermynverpligtinge uitskakel.
Om 'n lambda te roep, is dit moontlik om dit so gereeld as jy wil te roep (met Cloudwatch), 'n URL eindpunt bloot te stel en dit te roep, dit te roep via API Gateway of selfs gebaseer op gebeure soos veranderinge aan data in 'n S3-emmer of opdaterings aan 'n DynamoDB-tabel.
Die kode van 'n lambda word gestoor in /var/task
.
'n Lambda kan verskeie weergawes hê. En dit kan meer as een weergawe blootgestel via aliassse hê. Die gewigte van elke van die weergawes wat blootgestel word binne 'n alias sal besluit watter alias die aanroeping ontvang (dit kan byvoorbeeld 90%-10% wees). As die kode van een van die aliassse kwesbaar is, kan jy versoeke stuur totdat die kwesbare weergawes die aanval ontvang.
Lambda-hulpbronbeleide maak dit moontlik om toegang te gee aan ander dienste/rekeninge om die lambda byvoorbeeld aan te roep. Byvoorbeeld, hierdie is die beleid om enigiemand toe te laat om 'n lambda blootgestel via 'n URL aan te roep:
Of dit om 'n API Gateway toe te laat om dit aan te roep:
Wanneer daar honderde gelyktydige lambda-versoeke is, as elkeen van hulle 'n verbinding moet maak en 'n verbinding met 'n databasis moet sluit, gaan dit net nie werk nie (lambdas is staatloos, kan nie verbindings oop hou nie). Dan, as jou Lambda-funksies met RDS Proxy in wisselwerking tree in plaas van jou databasisinstansie. Dit hanteer die verbindingspooling wat nodig is vir die skaal van baie gelyktydige verbindings wat deur gelyktydige Lambda-funksies geskep word. Dit maak dit moontlik vir jou Lambda-toepassings om bestaande verbindings te hergebruik, eerder as om nuwe verbindings vir elke funksie-aanroeping te skep.
Om data te behou en selfs te deel kan Lambdas toegang tot EFS kry en dit koppel, sodat Lambda in staat sal wees om daarvan te lees en daarnaar te skryf.
'n Lambda laag is 'n .zip-lêerargief wat addisionele kode of ander inhoud kan bevat. 'n Laag kan biblioteke, 'n aangepaste uitvoering, data, of opsetlêers bevat.
Dit is moontlik om tot vyf lêers per funksie in te sluit. Wanneer jy 'n laag in 'n funksie insluit, word die inhoud na die /opt
-gids in die uitvoeringsomgewing uitgepak.
Standaard is die lêers wat jy skep privaat vir jou AWS-rekening. Jy kan kies om 'n laag met ander rekeninge te deel of om die laag publiek te maak. As jou funksies 'n laag verbruik wat deur 'n ander rekening gepubliseer is, kan jou funksies voortgaan om die laagweergawe te gebruik nadat dit uitgevee is, of nadat jou toestemming om die laag te gebruik, herroep is. Jy kan egter nie 'n nuwe funksie skep of funksies bywerk met 'n uitgevee laagweergawe nie.
Funksies wat as 'n houerbeeld ontplooi is, gebruik nie lêers nie. In plaas daarvan pak jy jou verkose uitvoering, biblioteke, en ander afhanklikhede in die houerbeeld in wanneer jy die beeld bou.
Lambda-uitbreidings verbeter funksies deur te integreer met verskeie monitering, waarneming, sekuriteit, en bestuurstelsels. Hierdie uitbreidings, bygevoeg via .zip-argiewe deur Lambda-lêers te gebruik of ingesluit in houerbeeldontplooiings, werk in twee modusse: interne en eksterne.
Interne uitbreidings smelt saam met die uitvoeringsproses, manipuleer sy begin deur taalspesifieke omgewingsveranderlikes en omslaginskrywings te gebruik. Hierdie aanpassing geld vir 'n verskeidenheid van uitvoeringsomgewings, insluitend Java Correto 8 en 11, Node.js 10 en 12, en .NET Core 3.1.
Eksterne uitbreidings loop as afsonderlike prosesse, handhaaf bedryfsafstemming met die lewensiklus van die Lambda-funksie. Hulle is verenigbaar met verskeie uitvoeringsomgewings soos Node.js 10 en 12, Python 3.7 en 3.8, Ruby 2.5 en 2.7, Java Corretto 8 en 11, .NET Core 3.1, en aangepaste uitvoeringsomgewings.
Nou is dit tyd om moontlike lambda-funksies te vind om uit te voer:
'n Lambda-funksie genaamd "Level6" is beskikbaar. Laat ons uitsorteer hoe om dit te roep:
Nou, dat jy die naam en die ID weet, kan jy die Naam kry:
En roep uiteindelik die funksie aan deur toegang te verkry (let daarop dat die ID, Naam en funksie-naam in die URL verskyn): https://s33ppypa75.execute-api.us-west-2.amazonaws.com/Prod/level6
URL:
https://<rest-api-id>.execute-api.<region>.amazonaws.com/<stageName>/<funcName>
Daar is baie ander bronne wat 'n lambda kan trigger
Op die volgende bladsy kan jy sien hoe om Lambda-toestemmings te misbruik om voorregte te eskaleer:
AWS - Lambda Privesc