Amazon S3 is 'n diens wat jou toelaat om groot hoeveelhede data te stoor.
Amazon S3 bied verskeie opsies om die beskerming van data in rus te bereik. Die opsies sluit Toestemming (Beleid), Enkripsie (Kliënt en Bediener-kant), Emmerweergawe en MFAgebaseerde verwydering in. Die gebruiker kan enige van hierdie opsies aktiveer om databesking te bereik. Data-replikaasie is 'n interne fasiliteit deur AWS waar S3 outomaties elke objek oor al die Beschikbaarheidsgebiede repliseer en die organisasie hoef dit nie in hierdie geval te aktiveer nie.
Met hulpbron-gebaseerde toestemmings kan jy toestemmings vir sub-gidse van jou emmer apart definieer.
Emmerweergawe en MFA-gebaseerde verwydering
Wanneer emmerweergawe geaktiveer is, sal enige aksie wat probeer om 'n lêer binne 'n lêer te verander 'n nuwe weergawe van die lêer genereer, terwyl dit ook die vorige inhoud van dieselfde behou. Daarom sal dit nie sy inhoud oorskryf nie.
Boonop sal MFA-gebaseerde verwydering verhinder dat weergawes van lêers in die S3-emmer verwyder word en ook dat Emmerweergawe gedeaktiveer word, sodat 'n aanvaller nie in staat sal wees om hierdie lêers te verander nie.
S3 Toegang logs
Dit is moontlik om S3 toegang aan te dui (wat standaard gedeaktiveer is) vir 'n emmer en die logs in 'n ander emmer te stoor om te weet wie die emmer toegang gee (albei emmers moet in dieselfde streek wees).
S3 Presigned URL's
Dit is moontlik om 'n presigned URL te genereer wat gewoonlik gebruik kan word om die gespesifiseerde lêer in die emmer te toegang. 'n Presigned URL lyk soos volg:
'n Voorafondertekende URL kan uit die cli geskep word met die kredensiale van 'n hoofpersoon met toegang tot die objek (as die rekening wat jy gebruik nie toegang het nie, sal 'n korter voorafondertekende URL geskep word, maar dit sal nutteloos wees)
Die enigste vereiste toestemming om 'n presigned URL te genereer, is die toestemming wat gegee word, so vir die vorige opdrag is die enigste toestemming wat die hoofpersoon nodig het s3:GetObject
Dit is ook moontlik om presigned URLs te skep met ander toestemmings:
DEK beteken Data Enkripsiesleutel en is die sleutel wat altyd gegenereer en gebruik word om data te enkripteer.
Bediener-kant enkripsie met S3 bestuurde sleutels, SSE-S3
Hierdie opsie vereis minimale konfigurasie en al die bestuur van enkripsiesleutels wat gebruik word, word deur AWS bestuur. Al wat jy hoef te doen is om jou data te laai en S3 sal al die ander aspekte hanteer. Elke emmer in 'n S3-rekening word aan 'n emmersleutel toegeken.
Enkripsie:
Objektdata + geskepte platte DEK --> Geënkripteerde data (gestoor binne S3)
Geskepte platte DEK + S3 Meestersleutel --> Geënkripteerde DEK (gestoor binne S3) en platte teks word uit geheue verwyder
Dekripsie:
Geënkripteerde DEK + S3 Meestersleutel --> Platte DEK
Platte DEK + Geënkripteerde data --> Objektdata
Neem asseblief kennis dat in hierdie geval die sleutel deur AWS bestuur word (rotasie slegs elke 3 jaar). As jy jou eie sleutel gebruik, sal jy in staat wees om te roteer, te deaktiveer en toegangbeheer toe te pas.
Bediener-kant enkripsie met KMS bestuurde sleutels, SSE-KMS
Hierdie metode laat S3 toe om die sleutelbestuursdiens te gebruik om jou data-enkripsiesleutels te genereer. KMS bied jou 'n baie groter buigsaamheid oor hoe jou sleutels bestuur word. Byvoorbeeld, jy kan die CMK deaktiveer, roteer en toegangbeheer toepas, en bestellings teen hul gebruik met AWS Cloud Trail.
Enkripsie:
S3 versoek data sleutels van KMS CMK
KMS gebruik 'n CMK om die paar DEK platte teks en DEK geënkripteerd te genereer en dit na S3 te stuur
S3 gebruik die platte sleutel om die data te enkripteer, stoor die geënkripteerde data en die geënkripteerde sleutel en verwyder die platte sleutel uit geheue
Dekripsie:
S3 vra KMS om die geënkripteerde datasleutel van die objek te dekripteer
KMS dekripteer die datasleutel met die CMK en stuur dit terug na S3
S3 dekripteer die objektdata
Bediener-kant enkripsie met kliënt verskaf sleutels, SSE-C
Hierdie opsie gee jou die geleentheid om jou eie meester sleutel te verskaf wat jy dalk reeds buite AWS gebruik. Jou kliënt-verskaf sleutel sal dan saam met jou data na S3 gestuur word, waar S3 dan die enkripsie vir jou sal uitvoer.
Enkripsie:
Die gebruiker stuur die objektdata + Kliëntsleutel na S3
Die kliëntsleutel word gebruik om die data te enkripteer en die geënkripteerde data word gestoor
'n Gesoute HMAC-waarde van die kliëntsleutel word ook gestoor vir toekomstige sleutelvalidasie
die kliëntsleutel word uit geheue verwyder
Dekripsie:
Die gebruiker stuur die kliëntsleutel
Die sleutel word gevalideer teen die gestoor HMAC-waarde
Die kliënt verskaf sleutel word dan gebruik om die data te dekripteer
Kliënt-kant enkripsie met KMS, CSE-KMS
Soos met SSE-KMS, gebruik dit ook die sleutelbestuursdiens om jou data-enkripsiesleutels te genereer. Hierdie keer word KMS egter via die kliënt en nie S3 aangespreek nie. Die enkripsie vind dan kliënt-kant plaas en die geënkripteerde data word dan na S3 gestuur om gestoor te word.
Enkripsie:
Kliënt versoek 'n datasleutel van KMS
KMS stuur die platte DEK en die geënkripteerde DEK met die CMK terug
Beide sleutels word teruggestuur
Die kliënt enkripteer dan die data met die platte DEK en stuur die geënkripteerde data + die geënkripteerde DEK (wat as metadata van die geënkripteerde data binne S3 gestoor word) na S3
Dekripsie:
Die geënkripteerde data met die geënkripteerde DEK word na die kliënt gestuur
Die kliënt vra KMS om die geënkripteerde sleutel te dekripteer met die CMK en KMS stuur die platte DEK terug
Die kliënt kan nou die geënkripteerde data dekripteer
Kliënt-kant enkripsie met kliënt verskaf sleutels, CSE-C
Deur hierdie meganisme te gebruik, kan jy jou eie verskaf sleutels benut en 'n AWS-SDK kliënt gebruik om jou data te enkripteer voordat jy dit na S3 vir stoor stuur.
Enkripsie:
Die kliënt genereer 'n DEK en enkripteer die platte data
Dan, met behulp van sy eie pasgemaakte CMK, enkripteer dit die DEK
Dien die geënkripteerde data + geënkripteerde DEK aan S3 in waar dit gestoor word
Dekripsie:
S3 stuur die geënkripteerde data en DEK
Aangesien die kliënt reeds die CMK het wat gebruik is om die DEK te enkripteer, dekripteer dit die DEK en gebruik dan die platte DEK om die data te dekripteer
# Get buckets ACLsawss3apiget-bucket-acl--bucket<bucket-name>awss3apiget-object-acl--bucket<bucket-name>--keyflag# Get policyawss3apiget-bucket-policy--bucket<bucket-name>awss3apiget-bucket-policy-status--bucket<bucket-name>#if it's public# list S3 buckets associated with a profileawss3lsawss3apilist-buckets# list content of bucket (no creds)awss3lss3://bucket-name--no-sign-requestawss3lss3://bucket-name--recursive# list content of bucket (with creds)awss3lss3://bucket-nameawss3apilist-objects-v2--bucket<bucket-name>awss3apilist-objects--bucket<bucket-name>awss3apilist-object-versions--bucket<bucket-name># copy local folder to S3awss3cpMyFolders3://bucket-name--recursive# deleteawss3rbs3://bucket-name–-force# download a whole S3 bucketawss3syncs3://<bucket>/.# move S3 bucket to different locationawss3syncs3://oldbuckets3://newbucket--source-regionus-west-1# list the sizes of an S3 bucket and its contentsawss3apilist-objects--bucketBUCKETNAME--outputjson--query"[sum(Contents[].Size), length(Contents[])]"# Update Bucket policyawss3apiput-bucket-policy--policyfile:///root/policy.json--bucket<bucket-name>##JSON policy example{"Id":"Policy1568185116930","Version":"2012-10-17","Statement": [{"Sid":"Stmt1568184932403","Action": ["s3:ListBucket"],"Effect":"Allow","Resource":"arn:aws:s3:::welcome","Principal":"*"},{"Sid":"Stmt1568185007451","Action": ["s3:GetObject"],"Effect":"Allow","Resource":"arn:aws:s3:::welcome/*","Principal":"*"}]}# Update bucket ACLawss3apiget-bucket-acl--bucket<bucket-name># Way 1 to get the ACLawss3apiput-bucket-acl--bucket<bucket-name>--access-control-policyfile://acl.jsonawss3apiget-object-acl--bucket<bucket-name>--keyflag#Way 2 to get the ACLawss3apiput-object-acl--bucket<bucket-name>--keyflag--access-control-policyfile://objacl.json##JSON ACL example## Make sure to modify the Owner’s displayName and ID according to the Object ACL you retrieved.{"Owner":{"DisplayName":"<DisplayName>","ID":"<ID>"},"Grants": [{"Grantee":{"Type":"Group","URI":"http://acs.amazonaws.com/groups/global/AuthenticatedUsers"},"Permission":"FULL_CONTROL"}]}## An ACL should give you the permission WRITE_ACP to be able to put a new ACL
dual-stack
Jy kan toegang tot 'n S3-bucket verkry deur 'n dual-stack eindpunt te gebruik deur 'n virtuele gehoste-styl of 'n pad-styl eindpuntnaam te gebruik. Hierdie is nuttig om S3 deur IPv6 te benader.
Dual-stack eindpunte gebruik die volgende sintaksis:
bucketname.s3.dualstack.aws-region.amazonaws.com
s3.dualstack.aws-region.amazonaws.com/bucketname
Privesc
Op die volgende bladsy kan jy kyk hoe om S3-toestemmings te misbruik om voorregte te verhoog:
Volgens hierdie navorsing was dit moontlik om die antwoord van 'n arbitrêre bucket te kas asof dit aan 'n ander behoort. Dit kon misbruik gewees het om byvoorbeeld javascript-lêer-antwoorde te verander en arbitrêre bladsye te kompromitteer wat S3 gebruik om statiese kode te stoor.
Amazon Athena
Amazon Athena is 'n interaktiewe navraagdiens wat dit maklik maak om data direk in Amazon Simple Storage Service (Amazon S3) te analiseer met standaard SQL.
Jy moet 'n relationele DB-tabel voorberei met die formaat van die inhoud wat in die gemonitorde S3-buckets gaan verskyn. En dan sal Amazon Athena in staat wees om die DB uit die logs te vul, sodat jy dit kan navraag doen.
Amazon Athena ondersteun die vermoë om S3-data wat reeds versleuteld is, te navraag en as dit geconfigureer is om dit te doen, kan Athena ook die resultate van die navraag versleuteld wat dan in S3 gestoor kan word.
Hierdie versleuteling van resultate is onafhanklik van die onderliggende navraag S3-data, wat beteken dat selfs al is die S3-data nie versleuteld nie, kan die navraag resultate versleuteld wees. 'n Paar punte om bewus van te wees is dat Amazon Athena slegs data ondersteun wat versleuteld is met die volgende S3-versleutelingmetodes, SSE-S3, SSE-KMS, en CSE-KMS.
SSE-C en CSE-E word nie ondersteun nie. Benewens dit, is dit belangrik om te verstaan dat Amazon Athena slegs navrae teen versleutelde voorwerpe wat in dieselfde streek as die navraag self is sal uitvoer. As jy S3-data moet navraag wat met KMS versleuteld is, dan is spesifieke toestemmings nodig deur die Athena-gebruiker om hulle in staat te stel om die navraag uit te voer.
Enumeration
# Get catalogsawsathenalist-data-catalogs# Get databases inside catalogawsathenalist-databases--catalog-name<catalog-name>awsathenalist-table-metadata--catalog-name<catalog-name>--database-name<db-name># Get query executions, queries and resultsawsathenalist-query-executionsawsathenaget-query-execution--query-execution-id<id># Get query and meta of resultsawsathenaget-query-results--query-execution-id<id># This will rerun the query and get the results# Get workgroups & Prepared statementsawsathenalist-work-groupsawsathenalist-prepared-statements--work-group<wg-name>awsathenaget-prepared-statement--statement-name<name>--work-group<wg-name># Run queryawsathenastart-query-execution--query-string<query>