I dette indlæg vil vi demonstrere, hvordan du sikkert starter notebook-forekomster i et privat undernet af en Amazon Virtual Private Cloud (Amazon VPC), med internetadgang deaktiveret, og til sikker forbindelse til Amazon Simple Storage Service (Amazon S3) ved hjælp af VPC-endepunkter. Dette indlæg er til netværks- og sikkerhedsarkitekter, der understøtter decentraliserede datavidenskabsteams på AWS.
SageMaker notebook-forekomster kan implementeres i et privat undernet, og vi anbefaler at implementere dem uden internetadgang. Sikring af dine notebook-forekomster i et privat undernet hjælper med at forhindre uautoriseret internetadgang til dine notebook-forekomster, som kan indeholde følsomme oplysninger.
Eksemplerne i dette indlæg vil bruge Notebook-forekomst Livscykluskonfigurationer (LCC'er) for at oprette forbindelse til et S3 VPC-slutpunkt og downloade scripts til registrering af inaktiv brug og terminering til notebook-forekomsten. Disse scripts er konfigureret til at blive kørt som cron-job, hvilket hjælper med at spare omkostninger ved automatisk at stoppe ledig kapacitet.
Løsningsoversigt
Følgende diagram beskriver den løsning, vi implementerer. Vi opretter en SageMaker notebook-instans i et privat undernet af en VPC. Vi knytter til den notebook-instans en livscykluskonfiguration, der kopierer et inaktivt-shutdown-script fra Amazon S3 til notebook-instansen ved opstart (når du starter en stoppet notebook-instans). Livscykluskonfigurationen får adgang til S3-spanden via AWS PrivateLink.
Denne arkitektur gør det muligt for vores internet-deaktiverede SageMaker notebook-instans at få adgang til S3-filer uden at gå på tværs af det offentlige internet. Fordi netværkstrafikken ikke krydser det offentlige internet, reducerer vi markant antallet af vektorer, som dårlige aktører kan udnytte for at kompromittere sikkerhedspositionen af notebook-forekomsten.
Forudsætninger
Vi antager, at du har en AWS-konto ud over en Amazon VPC med mindst ét privat undernet, der er isoleret fra internettet. Hvis du ikke ved, hvordan du opretter en VPC med et offentligt/privat undernet, så tjek ud denne vejledning. Et undernet er isoleret fra internettet, hvis dets rutetabel ikke videresender trafik til internettet gennem NAT-gatewayen og internetgatewayen til internettet. Følgende skærmbillede viser et eksempel på en isoleret rutetabel. Trafikken forbliver inden for undernettet; der er ingen NAT-gateways eller internetgateways, der kan videresende trafik til internettet.
Derudover har vi brug for en S3 skovl. Enhver S3-spand med de sikre standardkonfigurationsindstillinger kan fungere. Sørg for, at du har læse- og skriveadgang til denne bøtte fra brugerkontoen. Dette er vigtigt, når vi tester vores løsning. Denne post i S3 brugervejledning skal afklare, hvordan dette gøres.
Nu opretter vi en SageMaker notebook-instans. Notebook-forekomsten skal implementeres i et isoleret undernet med Direkte internetadgang valgt som handicappet.
Vi skal også konfigurere denne notesbog til at køre som root-bruger. Under Tilladelser og kryptering skal du vælge Aktiver for indstillingen Rodadgang.
Når disse indstillinger er blevet konfigureret, skal du vælge Opret notesbogsforekomst nederst i vinduet.
Konfigurer adgang til Amazon S3
For at konfigurere adgang til Amazon S3 skal du udføre følgende trin:
- På Amazon S3-konsollen skal du navigere til den S3-bøtte, du bruger til at gemme scripts.
Adgang til objekter i denne bøtte gives kun, hvis det udtrykkeligt er tilladt via en AWS identitets- og adgangsstyring (IAM) politik.
- I denne bøtte skal du oprette en mappe kaldet livscyklus-konfigurationer.
- Kopier følgende script fra GitHub og gem det i din S3-spand med nøglen
lifecycle-configurations/autostop.py
.
Vi kan nu begynde at ændre vores netværk for at tillade adgang mellem Amazon S3 og vores isolerede notebook-instans.
- Skriv en IAM-politik med mindst privilegium, der definerer adgang til denne bucket og livscykluspolitikscriptet.
- Opret et AWS PrivateLink-gateway-endepunkt til Amazon S3.
- Opret en SageMaker livscykluskonfiguration, der anmoder om
autostop.py
script fra Amazon S3 via et API-kald. - Vedhæft livscykluskonfigurationen til notebook-forekomsten.
Når du har implementeret disse trin, kan vi teste konfigurationen ved at udføre en Amazon S3 CLI-kommando i en notesbogscelle. Hvis kommandoen er vellykket, har vi implementeret mindst privilegeret adgang til Amazon S3 fra en isoleret netværksplacering med AWS PrivateLink.
En mere robust test ville være at lade notebook-forekomsten være inaktiv og lade livscykluspolitikken køre som forventet. Hvis alt går vel, bør notebook-forekomsten lukke ned efter en 5-minutters inaktiv periode.
Konfigurer AWS PrivateLink til Amazon S3
AWS PrivateLink er en netværkstjeneste, der opretter private endepunkter i din VPC til andre AWS-tjenester som f.eks Amazon Elastic Compute Cloud (Amazon EC2), Amazon S3 og Amazon Simple Notification Service (Amazon SNS). Disse endepunkter letter API-anmodninger til andre AWS-tjenester via din VPC i stedet for via det offentlige internet. Dette er den afgørende komponent, der gør det muligt for vores løsning at privat og sikkert få adgang til S3-bøtten, der indeholder vores livscykluskonfigurationsscript.
- På Amazon VPC-konsollen skal du vælge Endpoints.
Listen over endepunkter er som standard tom.
- Vælg Opret slutpunkt.
- Til Servicekategori, Vælg AWS tjenester.
- Til Servicenavn, søg efter S3 og vælg gateway-indstillingen.
- Til VPC, vælg de private undernet, du oprettede tidligere.
- Til Konfigurer rutetabeller, skal du vælge standardrutetabel for den pågældende VPC.
- Under Politik, Skal du vælge Tilpasset valgmulighed og indtast følgende politikkode:
Dette politikdokument tillader skrivebeskyttet adgang til S3 buckets med livscykluskonfigurationer. Denne politik begrænser S3-operationer til kun at omfatte livscykluskonfigurationer, vi kan tilføje flere buckets til ressourceklausulen efter behov. Selvom dette endepunkts politik ikke mindst er privilegeret adgang til vores notebook-instans, beskytter den stadig vores S3-bucket-ressourcer mod at blive ændret af ressourcer i denne VPC.
- For at oprette dette slutpunkt med AWS CLI skal du køre følgende kommando:
Gateway-endepunkter ændrer automatisk de angivne rutetabeller for at dirigere trafik igennem til dette slutpunkt. Selvom der er tilføjet en rute, er vores VPC stadig isoleret. Ruten peger på en administreret præfiksliste eller en liste over foruddefinerede IP-adresser, der bruges af slutpunktstjenesten til at dirigere trafik gennem denne VPC til Amazon S3 PrivateLink-slutpunktet.
Rediger SageMaker notebook-instansens IAM-rolle
Vi starter med at lave en mindst privilegeret IAM-politik for vores notebook-instansrolles policydokument.
- På IAM-konsollen skal du vælge Betingelser.
- Vælg Lav politik.
- På JSON fanen, skal du indtaste følgende kode:
Denne politik er et eksempel på mindst privilegeret adgang, et sikkerhedsparadigme, der er grundlæggende for en Nul tillid arkitektur. Denne politik tillader kun anmodninger om GetObject- og ListBucket API-kald, specifikt på Amazon S3-ressourcerne, der administrerer vores livscykluspolitikker. Dette IAM-politikdokument kan kun anvendes i tilfælde, hvor du downloader livscykluspolitikker fra Amazon S3.
- Gem denne politik som
S3LifecycleConfigurationReadPolicy
. - Vælg i navigationsruden roller.
- Søg efter og vælg den rolle, der er knyttet til de isolerede notesbogsforekomster, og rediger rollens politikdokument.
- Søg efter den nyoprettede politik og vedhæft den til denne rolles politikdokument.
Nu har din isolerede notesbog tilladelser til at få adgang til Amazon S3 via GetObject
, ListBucket
API-kald. Vi kan teste dette ved at køre følgende uddrag i en notesbogscelle:
!aws s3api get-object --bucket <bucket-name> --key lifecycle-configurations/autostop.py autostop.py
På dette tidspunkt i konfigurationen bør du ikke længere se en tilladelse nægtet fejl, men en timeout-fejl. Det er godt; det betyder, at vi har tilladelse til at få adgang til Amazon S3, men vi har ikke etableret netværksforbindelsen til at gøre det. Det gør vi i næste afsnit.
Dernæst opretter vi vores IAM-politik og -rolle via AWS kommandolinjegrænseflade (AWS CLI).
- Opret følgende politik, og gem ARN fra outputtet til et senere trin:
- Opret rollen:
- Vedhæft vores tilpassede politik til den nye rolle:
aws iam attach-role-policy --role-name GeneralIsolatedNotebookRole --policy-arn policy-arn
- Gentag disse trin for at oprette en ny politik kaldet
StopNotebookInstance
.
Denne politik giver autostop.py
script mulighed for at lukke notebook-forekomsten ned. JSON for denne politik er som følger:
- Opret og vedhæft denne politik til notebook-instansens rolle ved at bruge enten AWS-konsollen til IAM eller AWS CLI.
Vi tillader denne politik at handle på enhver notebook-forekomst på denne konto. Dette er acceptabelt, fordi vi ønsker at genbruge denne politik til yderligere notebook-forekomster. Til din implementering skal du sørge for at lave separate mindst privilegerede adgangspolitikker for eventuelle yderligere SageMaker-handlinger, som en specifik notebook udfører.
Opret en livscykluskonfiguration
Livscykluskonfigurationer er bash-scripts, der kører på notebook-forekomsten ved opstart. Denne funktion gør livscykluskonfigurationer fleksible og kraftfulde, men begrænset af bash-programmeringssprogets muligheder. Et almindeligt designmønster er at køre sekundære scripts skrevet i et programmeringssprog på højt niveau som Python. Dette mønster giver os mulighed for at administrere livscykluskonfigurationer i kildekontrol. Vi kan også definere ret kompleks logik for tilstandsstyring ved hjælp af et sprog på højt niveau.
Følgende livscykluskonfiguration er et bash-script, der kopierer et Python-script fra Amazon S3. Efter kopiering af filen opretter bash-scriptet en ny post i cron, der kører Python-scriptet hvert 5. minut. Python-scriptet foretager et API-kald til Jupyter-processen, der kører på notebook-forekomsten. Denne API bruges til at skelne, om notebook-forekomsten har været inaktiv i timeout-varigheden. Hvis scriptet fastslår, at notebook-forekomsten har været inaktiv i de sidste 5 minutter, lukker den notebook-forekomsten. Dette er en god praksis for omkostningsbesparelser og emissioner. Den 5 minutters inaktive timeout-periode kan ændres ved at ændre værdien af IDLE_TIME
variabel.
For at oprette en livscykluskonfiguration skal du udføre følgende trin:
- Vælg på SageMaker-konsollen Notebooks.
- Vælg Livscykluskonfigurationer.
- Vælg Opret konfiguration.
- På Start notesbog-fanen, indtast det foregående bash-script.
- Angiv et beskrivende navn til scriptet.
- Vælg Opret konfiguration.
Du kan også oprette livscykluskonfigurationen med AWS CLI (se følgende kode). Bemærk, at selve scriptet skal være base64-kodet. Husk dette, når du bruger AWS CLI til at oprette disse konfigurationer.
Når du har oprettet livscykluskonfigurationen, vises den på listen over tilgængelige konfigurationer.
- Herfra skal du navigere tilbage til din notesbogsforekomst. Hvis notebook-forekomsten kører, skal du slukke for den ved at vælge notebook-forekomsten og vælge Stands i øverste venstre hjørne.
- Vælg Redigere i afsnittet Indstillinger for notebook-forekomster.
- Vælg din nye livscykluskonfiguration fra listen, og vælg Opdater forekomst af notesbog.
ARN for livscykluskonfigurationen er nu knyttet til din notebook-instans.
For at gøre dette i AWS CLI skal du køre følgende kommando:
aws sagemaker update-notebook-instance --notebook-instance-name notebook-name --lifecycle-config-name lifecycle-config-name
Test Amazon S3-netværksadgang fra en isoleret notebook-instans
For at teste denne proces skal vi sørge for, at vi kan kopiere Python-filen fra Amazon S3 til vores isolerede notebook-instans. Fordi vi konfigurerede vores livscykluskonfiguration til at køre ved opstart af notebook, behøver vi kun at starte vores notebook-forekomst for at køre testen. Når vores notesbog starter, skal du åbne en Jupyter notesbog og undersøge det lokale filsystem. Vores autostop.py
script fra S3-bøtten er nu blevet installeret på vores notebook-instans.
Hvis din notesbog har root-tilladelser, kan du endda undersøge notesbogens crontab ved at køre følgende:
Vi skal køre denne kommando som root-bruger, fordi LCC tilføjer cron-jobbet til cron-tjenesten som root-bruger. Dette beviser, at autostop.py
script er blevet tilføjet til crontab ved opstart af notebook. Fordi denne kommando åbner cron-filen, skal du manuelt stoppe kernekommandoen for at se outputtet.
Ryd op
Når du ødelægger VPC-slutpunktet, mister notebook-forekomsten adgang til S3-bøtten. Dette introducerer en timeout-fejl ved opstart af notebook. Fjern livscykluskonfigurationen fra notebook-forekomsten. For at gøre dette skal du vælge notebook-forekomsten i Amazon SageMaker-tjenesten i AWS Management Console og vælge Redigere i afsnittet Indstillinger for notebook-forekomster. Nu forsøger notebook-instansen ikke at trække autostop.py
script fra Amazon S3.
Konklusion
SageMaker giver dig mulighed for at klargøre notebook-forekomster i et privat undernet af en VPC. Som en mulighed kan du også deaktivere internetadgang for sådanne notebooks for at forbedre sikkerhedsstillingen for disse notebooks. Deaktivering af internetadgang tilføjer dybdegående forsvar mod dårlige aktører og giver datavidenskabsfolk mulighed for at arbejde med notebooks i et sikkert miljø.
Om forfatteren
Dan Ferguson er en Solutions Architect hos Amazon Web Services, der primært fokuserer på Private Equity & Growth Equity-investeringer i nye startups.
- Coinsmart. Europas bedste Bitcoin og Crypto Exchange.
- Platoblokkæde. Web3 Metaverse Intelligence. Viden forstærket. FRI ADGANG.
- CryptoHawk. Altcoin radar. Gratis prøveversion.
- Kilde: https://aws.amazon.com/blogs/machine-learning/secure-amazon-s3-access-for-isolated-amazon-sagemaker-notebook-instances/
- "
- &
- 11
- 7
- 9
- adgang
- Konto
- Lov
- Handling
- aktioner
- Yderligere
- Alle
- Skønt
- Amazon
- Amazon Web Services
- api
- arkitektur
- til rådighed
- AWS
- være
- grænse
- ringe
- kapaciteter
- Kapacitet
- kode
- Fælles
- komplekse
- komponent
- Compute
- Konfiguration
- Connectivity
- Konsol
- indeholder
- kontrol
- Omkostninger
- kunne
- skaber
- afgørende
- data
- datalogi
- decentral
- Forsvar
- implementering
- Design
- ødelægge
- Detektion
- Er ikke
- ned
- ekko
- effekt
- kryptering
- Endpoint
- Miljø
- egenkapital
- etableret
- eksempel
- forventet
- Exploit
- Feature
- efter
- Videresend
- godt
- Vækst
- hjælper
- link.
- Høj
- Hvordan
- How To
- HTTPS
- Identity
- gennemføre
- implementeret
- vigtigt
- Forbedre
- oplysninger
- Internet
- Investeringer
- IP
- IP-adresser
- IT
- Job
- Karriere
- Nøgle
- Sprog
- lancere
- Forlade
- Niveau
- Limited
- Line (linje)
- LINK
- Liste
- lokale
- placering
- ledelse
- manuelt
- tankerne
- Navigation
- netværk
- netværkstrafik
- netværk
- notesbog
- underretning
- nummer
- åbent
- åbner
- Produktion
- Option
- ordrer
- Andet
- paradigme
- Mønster
- politikker
- politik
- vigtigste
- Main
- private
- Kapitalfond
- behandle
- Programmering
- beviser
- offentlige
- anbefaler
- reducere
- ressource
- Ressourcer
- R
- Kør
- kører
- Videnskab
- forskere
- Søg
- sekundær
- sikker
- sikkerhed
- valgt
- tjeneste
- Tjenester
- sæt
- indstilling
- nedlukning
- Simpelt
- So
- Løsninger
- specifikt
- starte
- starter
- opstart
- Nystartede
- Tilstand
- Statement
- opbevaring
- butik
- vellykket
- Succesfuld
- support
- systemet
- prøve
- Gennem
- tid
- top
- Trafik
- us
- brug
- værdi
- Verifikation
- Specifikation
- Virtual
- web
- webservices
- inden for
- uden
- Arbejde