Video: ep 2: How to secure your AWS Gateway API with API key (tutorial with screencast and test) 2025
Dette er et åpenbart spørsmål når det gjelder omtale med tredjepartsmedlemmer: Hvis disse verktøyene virker på dine vegne, hvordan vet Amazon Web Services (AWS) at personen på vegne av dem handler er faktisk deg? Med andre ord, hvordan kan AWS autentisere din identitet for å sikre at kommandoene den mottar, kommer fra deg?
Faktisk er det samme spørsmålet gyldig selv om du samhandler direkte med AWS API. Hvordan kan AWS validere din identitet for å sikre at den bare utfører kommandoer for deg?
En måte er selvfølgelig at du skal inkludere brukernavn og passord for kontoen din i API-samtalene. Selv om noen sky-leverandører tar denne tilnærmingen, gjør Amazon ikke det.
I stedet for å stole på brukernavn og passord, er det avhengig av to andre identifikatorer for å godkjenne API-tjenestesamtaler: tilgangsnøkkelen og den hemmelige tilgangsnøkkelen. Det bruker disse tastene i serviceanrop for å implementere sikkerhet på en måte som er mye sikrere enn å bruke bare brukernavnet og passordet ditt.
Så hvordan fungerer det? Når du registrerer deg for en konto hos AWS, har du mulighet til å opprette en tilgangsnøkkel og ha en hemmelig tilgangsnøkkel sendt til deg. Hver er en lang rekke tilfeldig tegn, og den hemmelige tilgangsnøkkelen er lengre av de to. Når du laster ned den hemmelige tilgangsnøkkelen, bør du lagre den et sted veldig sikker fordi det er nøkkelen (beklager - dårlig ordspill) for å implementere sikre serviceanrop.
Etter at du har gjort dette, har både deg og Amazon en kopi av tilgangsnøkkelen og den hemmelige tilgangsnøkkelen. Å beholde en kopi av den hemmelige tilgangsnøkkelen er avgjørende fordi det er vant til å kryptere informasjon sendt frem og tilbake mellom deg og AWS, og hvis du ikke har den hemmelige tilgangsnøkkelen, kan du ikke utføre noen tjenesteanrop på AWS.
Måten de to nøklene brukes på er konseptuelt enkel, men noe utfordrende i detalj.
For hvert tjenesteanrop du vil utføre, gjør du (eller et verktøy som fungerer på dine vegne) følgende:
-
Opprett nyttelast for serviceanrop.
Dette er dataene du må sende til AWS. Det kan være et objekt du vil lagre i S3 eller bildeidentifikatoren for et bilde du vil starte. (Du vil også legge andre opplysninger til nyttelastet, men fordi de varierer i henhold til spesifikasjonene for serviceanropet, er de ikke oppført her. Ett stykke data er gjeldende tid.)
-
Krypter nyttelasten bruker den hemmelige tilgangsnøkkelen.
Dette gjør at ingen kan undersøke nyttelastet og oppdage hva som er i det.
-
Signer den krypterte nyttelastet digitalt ved å legge til den hemmelige tilgangsnøkkelen til kryptert nyttelast og utføre en digital signaturprosess ved hjelp av den hemmelige tilgangsnøkkelen.
Hemmelige tilgangsnøkler er lengre og mer tilfeldige enn typiske brukerpassord; Den lange hemmelige tilgangsnøkkelen gjør kryptering utført med det sikrere enn det ville være hvis det ble utført med et typisk brukerpassord.
-
Send total kryptert nyttelast, sammen med tilgangsnøkkelen din, til AWS via et serviceanrop.
Amazon bruker tilgangsnøkkelen til å slå opp din hemmelige tilgangsnøkkel, som den bruker til å dekryptere nyttelastet. Hvis den dekrypterte nyttelast representerer lesbar tekst som kan utføres, utfører AWS serviceanropet. Ellers konkluderes det med at noe er galt med servicekallet (kanskje at det ble kalt av en ondsinnet skuespiller) og ikke utfører serviceanropet.
I tillegg til krypteringen som nettopp er beskrevet, har AWS to andre metoder som brukes for å sikre legitimiteten til tjenestesamtalen:
-
Den første er basert på datoperioden som er inkludert i servicekallens nyttelast, som den bruker til å bestemme om tiden som er forbundet med å utføre serviceanropet er hensiktsmessig; Hvis datoen i serviceanropet er mye forskjellig fra hva den burde være (mye tidligere eller senere enn den nåværende tiden, med andre ord), konkluderer AWS at det ikke er et legitimt tjenestekall og kasserer det.
-
Den andre ekstra sikkerhetstiltaket innebærer et sjekksum du beregner for nyttelastet. (A checksum er et tall som representerer innholdet i en melding.) AWS beregner et sjekksum for nyttelasten; Hvis sjekksummen ikke stemmer overens med deg, deaktiverer tjenestenesamtalen og utfører ikke den.
Denne sjekksummet tilnærming sikrer at ingen tamperer innholdet i en melding og forhindrer en ondsinnet skuespiller fra å avskjære et legitimt serviceanrop og endre det for å utføre en uakseptabel handling. Hvis noen tamperer med meldingen, når AWS beregner et sjekksum, stemmer sjekksummen ikke lenger med den som er inkludert i meldingen, og AWS nekter å utføre serviceanropet.
Hvis du, som de fleste AWS-brukere, bruker en proxy-metode for å kommunisere med AWS - AWS-styringskonsollen, et språkbibliotek eller et tredjepartsverktøy - du må angi tilgangsnøkkelen og hemmelig tilgangsnøkkel til proxyen. Når proxyen utfører AWS-tjenesteanrop på dine vegne, inkluderer den tilgangsnøkkelen i samtalen, og bruker den hemmelige tilgangsnøkkelen til å utføre nyttelastkryptering.
På grunn av den kritiske rollen som disse nøklene oppfyller i AWS, bør du dele dem bare med enheter du stoler på. Hvis du vil prøve et nytt tredjepartsverktøy, og du ikke vet mye om selskapet, kan du opprette en AWS-testkonto for prøveperioden i stedet for å bruke AWS-kontoens legitimasjon for produksjon.
På den måten, hvis du bestemmer deg for ikke å gå videre med verktøyet, kan du slippe det, avslutte test-AWS-kontoen, og fortsett, ikke bekymret for potensielle sikkerhetsproblemer i dine hovedproduksjonskontoer. Selvfølgelig kan du alltid opprette nye tilgangsnøkler og hemmelige tilgangsnøkler, men ved å bruke produksjonstastene dine for tester, og deretter skifter nøklene mye arbeid, fordi du må oppdatere hvert sted som refererer til dine eksisterende nøkler.
Hvis du er som mange andre AWS-brukere, bruker du en rekke verktøy og biblioteker, og går tilbake til dem for å oppdatere nøklene dine er en smerte. Du har det bedre å bruke ikke-produksjonskontoer for å teste nye verktøy.
