Dit is een gastblogpost, geschreven in samenwerking met Patrick Oberherr van Contentful en Johannes Günther van Netlight Consulting.
Deze blogpost laat zien hoe u de beveiliging in een datapijplijnarchitectuur kunt verbeteren op basis van Door Amazon beheerde workflows voor Apache Airflow (Amazon MWAA) en Amazon Elastic Kubernetes-service (Amazon EKS) door fijnmazige machtigingen in te stellen, met behulp van HashiCorp Terraform voor infrastructuur als code.
Veel AWS-klanten gebruiken Amazon EKS om hun dataworkloads uit te voeren. De voordelen van Amazon EKS omvatten verschillende reken- en opslagopties afhankelijk van de werklastbehoeften, een hoger gebruik van bronnen door het delen van de onderliggende infrastructuur en een levendige open-sourcegemeenschap die speciaal gebouwde uitbreidingen biedt. De Gegevens over EKS project biedt een reeks sjablonen en andere bronnen om klanten op weg te helpen op deze reis. Het bevat een beschrijving van het gebruik Amazon MWAA als taakplanner.
Contentful is een AWS-klant en AWS Partner Network (APN)-partner. Achter de schermen van hun Software-as-a-Service (SaaS)-product, het Contentful Composable Content Platform, gebruikt Contentful inzichten uit data om de zakelijke besluitvorming en klantervaring te verbeteren. Inhoudelijk betrokken Netlicht, een adviespartner van APN, om te helpen bij het opzetten van een dataplatform om deze inzichten te verzamelen.
De meeste applicatieworkloads van Contentful draaien op Amazon EKS, en de kennis van deze dienst en Kubernetes is wijdverspreid binnen de organisatie. Daarom besloot het data-engineeringteam van Contentful om ook datapijplijnen op Amazon EKS te laten draaien. Voor baan scheduling, begonnen ze met een zelfwerkende Apache Airflow op een Amazon EKS-cluster en stapten later over op Amazon MWAA om de overhead voor engineering en operaties te verminderen. De baan uitvoering bleef op Amazon EKS.
Contentful beheert een complexe datapijplijn met behulp van deze infrastructuur, inclusief opname uit meerdere gegevensbronnen en verschillende transformatietaken, bijvoorbeeld met behulp van dbt. De hele pijplijn deelt een enkele Amazon MWAA-omgeving en een enkel Amazon EKS-cluster. Met een gevarieerde set workloads in één omgeving is het noodzakelijk om de principe van het minste voorrecht, waardoor ervoor wordt gezorgd dat individuele taken of componenten alleen de specifieke machtigingen hebben die ze nodig hebben om te functioneren.
Door machtigingen te segmenteren op basis van rollen en verantwoordelijkheden kon het data-engineeringteam van Contentful een robuustere en veiligere gegevensverwerkingsomgeving creëren, die essentieel is voor het behoud van de integriteit en vertrouwelijkheid van de gegevens die worden verwerkt.
In deze blogpost doorlopen we het helemaal opnieuw opzetten van de infrastructuur en het implementeren van een voorbeeldapplicatie met behulp van Terraform, de favoriete tool van Contentful voor infrastructuur als code.
Voorwaarden
Om deze blogpost te kunnen volgen, moet de nieuwste versie van de volgende tools zijn geïnstalleerd:
Overzicht
In deze blogpost maakt u een voorbeeldapplicatie met de volgende infrastructuur:
In het voorbeeld van de Airflow-workflow worden objecten in de bronbucket vermeld en wordt deze lijst tijdelijk opgeslagen met behulp van Luchtstroom XComsen schrijft de lijst als een bestand naar de doelbucket. Deze applicatie wordt uitgevoerd met behulp van Amazon EKS-pods, gepland door een Amazon MWAA-omgeving. Je implementeert het EKS-cluster en de MWAA-omgeving in een virtuele privécloud (VPC) en pas machtigingen met de minste bevoegdheden toe op de EKS-pods die gebruiken IAM-rollen voor serviceaccounts. De configuratiebucket voor Amazon MWAA bevat runtimevereisten, evenals de applicatiecode die een Luchtstroomgerichte acyclische grafiek (DAG).
Initialiseer het project en maak buckets
Maak een bestand main.tf
met de volgende inhoud in een lege map:
Dit bestand definieert de Terraform AWS-provider evenals de bron- en bestemmingsbucket, waarvan de namen worden geëxporteerd AWS Systems Manager-parameters. Het vertelt Terraform ook om een leeg object met de naam te uploaden dummy.txt
in de bronbucket, waardoor de Airflow-voorbeeldtoepassing wordt ingeschakeld die we later zullen maken om een resultaat te ontvangen bij het vermelden van de bucketinhoud.
Initialiseer het Terraform-project en download de module-afhankelijkheden door de volgende opdracht uit te voeren:
Creëer de infrastructuur:
Terraform vraagt u om wijzigingen in de omgeving te erkennen en begint vervolgens met het inzetten van middelen in AWS. Na een succesvolle implementatie zou u het volgende succesbericht moeten zien:
VPC maken
Maak een nieuw bestand vpc.tf
in dezelfde map als main.tf
en vul het volgende in:
Dit bestand definieert de VPC, een virtueel netwerk, dat later het Amazon EKS-cluster en de Amazon MWAA-omgeving zal hosten. Merk op dat we een bestaand Terraform module hiervoor, die de configuratie van onderliggende netwerkbronnen omvat, zoals subnetten, routetabellen en NAT-gateways.
Download de VPC-module:
Implementeer de nieuwe bronnen:
Noteer welke bronnen worden gemaakt. Door de VPC-module in ons Terraform-bestand te gebruiken, wordt veel van de onderliggende complexiteit weggenomen bij het definiëren van onze infrastructuur, maar het is nog steeds nuttig om te weten wat er precies wordt ingezet.
Merk op dat Terraform nu de bronnen verwerkt die we in beide bestanden hebben gedefinieerd, main.tf
en vpc.tf
, omdat Terraform alles omvat .tf
bestanden in de huidige werkdirectory.
Creëer de Amazon MWAA-omgeving
Maak een nieuw bestand mwaa.tf
en voeg de volgende inhoud in:
Net als voorheen gebruiken we een bestaande module om configuratie-inspanningen voor de Amazon MWAA-omgeving te besparen. De module maakt ook de configuratiebucket, die we gebruiken om de runtime-afhankelijkheid van de applicatie (apache-airflow-cncf-kubernetes) in de requirements.txt
bestand. Dit pakket, in combinatie met het vooraf geïnstalleerde pakket apache-luchtstroom-amazon, maakt interactie met Amazon EKS mogelijk.
Download de MWAA-module:
Implementeer de nieuwe bronnen:
Het duurt 20 tot 30 minuten om deze handeling te voltooien.
Maak het Amazon EKS-cluster
Maak een bestand eks.tf
met de volgende inhoud:
Om het cluster zelf te creëren, maken we gebruik van de Amazon EKS-blauwdrukken voor Terraform project. We definiëren ook een beheerde knooppuntgroep met één knooppunt als doelgrootte. Houd er rekening mee dat u in gevallen met fluctuerende belasting uw cluster moet schalen met timmerman in plaats van de hierboven getoonde beheerde knooppuntgroepbenadering maakt de clusterschaal flexibeler. We gebruikten beheerde knooppuntgroepen voornamelijk vanwege het configuratiegemak.
Wij definiëren de identiteit die de Amazon MWAA-uitvoeringsrol gaat ervan uit dat Kubernetes de map_roles
variabel. Na het configureren van de Terraform Kubernetes-provider, geven we de Amazon MWAA-uitvoeringsrol machtigingen om pods in het cluster te beheren.
Download de EKS Blueprints voor Terraform-module:
Implementeer de nieuwe bronnen:
Deze handeling duurt ongeveer 12 minuten.
Maak IAM-rollen voor serviceaccounts
Maak een bestand roles.tf
met de volgende inhoud:
Dit bestand definieert twee Kubernetes-serviceaccounts, source-bucket-reader-sa
en destination-bucket-writer-sa
, en hun machtigingen voor de AWS API, met behulp van IAM-rollen voor serviceaccounts (IRSA). Opnieuw gebruiken we een module uit het Amazon EKS Blueprints for Terraform-project om de IRSA-configuratie te vereenvoudigen. Houd er rekening mee dat beide rollen alleen de minimale machtigingen krijgen die ze nodig hebben, gedefinieerd met behulp van AWS IAM-beleid.
Download de nieuwe module:
Implementeer de nieuwe bronnen:
Maak de DAG
Maak een bestand dag.py
het definiëren van de luchtstroom DAG:
De DAG is gedefinieerd om volgens een uurschema te draaien, met twee taken read_bucket
met servicerekening source-bucket-reader-sa
en write_bucket
met servicerekening destination-bucket-writer-sa
, achter elkaar aan rennen. Beide worden uitgevoerd met behulp van de EksPodOperator, die verantwoordelijk is voor het plannen van de taken op Amazon EKS, met behulp van de AWS CLI Docker-afbeelding opdrachten uit te voeren. De eerste taak geeft een overzicht van de bestanden in de bronbucket en schrijft de lijst naar Airflow XCom. De tweede taak leest de lijst van XCom en slaat deze op in de bestemmingsbucket. Merk op dat de service_account_name
parameter maakt onderscheid tussen wat elke taak mag doen.
Maak een bestand dag.tf
om de DAG-code te uploaden naar de Amazon MWAA-configuratiebucket:
Implementeer de wijzigingen:
De Amazon MWAA-omgeving importeert het bestand automatisch uit de S3-bucket.
Voer de DAG uit
Navigeer in uw browser naar de Amazon MWAA-console en selecteer uw omgeving. Selecteer in de rechterbovenhoek Open de luchtstroom-UI . Je zou het volgende moeten zien:
Om de DAG te activeren, in de Acties kolom, selecteer het afspeelsymbool en selecteer vervolgens Activeer DAG. Klik op de DAG-naam om de DAG-run en de resultaten ervan te bekijken.
Navigeer naar de Amazon S3-console en kies de bucket die begint met “bestemming”. Het zou een bestand moeten bevatten list.json
onlangs gemaakt door de write_bucket
taak. Download het bestand om de inhoud ervan te verkennen, een JSON-lijst met één invoer.
Opruimen
Voor de bronnen die u in deze walkthrough hebt gemaakt, zijn AWS-kosten verbonden. Om de gemaakte bronnen te verwijderen, geeft u de volgende opdracht:
En keur de wijzigingen goed in het Terraform CLI-dialoogvenster.
Conclusie
In deze blogpost heb je geleerd hoe je de beveiliging van je datapijplijn op Amazon MWAA en Amazon EKS kunt verbeteren door de rechten van elke afzonderlijke taak te beperken.
Om dieper te duiken, gebruikt u het werkvoorbeeld dat in deze walkthrough is gemaakt om het onderwerp verder te verkennen: Wat gebeurt er als u de service_account_name
parameter van een Airflow-taak? Wat gebeurt er als u de serviceaccountnamen in de twee taken uitwisselt?
Voor de eenvoud hebben we in deze walkthrough een platte bestandsstructuur gebruikt met Terraform- en Python-bestanden in één map. Wij hebben ons niet aan de afspraken gehouden standaard modulestructuur voorgesteld door Terraform, wat over het algemeen wordt aanbevolen. In een realistisch project kan het opsplitsen van het project in meerdere Terraform-projecten of modules ook de flexibiliteit, snelheid en onafhankelijkheid vergroten tussen teams die eigenaar zijn van verschillende delen van de infrastructuur.
Zorg er ten slotte voor dat u de Gegevens over EKS documentatie, die andere waardevolle bronnen biedt voor het uitvoeren van uw datapijplijn op Amazon EKS, evenals de Amazon MWAA en Apache-luchtstroom documentatie voor het implementeren van uw eigen use cases. Kijk hier eens specifiek naar voorbeeldimplementatie van een Terraform-module voor Amazon MWAA en Amazon EKS, die een meer volwassen benadering bevat van Amazon EKS-configuratie en automatische schaling van knooppunten, evenals netwerken.
Als je vragen hebt, kun je een nieuw draadje starten op AWS opnieuw: posten of neem contact op met AWS-ondersteuning.
Over de auteurs
Ulrich Hinze is een oplossingsarchitect bij AWS. Hij werkt samen met softwarebedrijven om cloudgebaseerde oplossingen op AWS te ontwerpen en te implementeren. Voordat hij bij AWS kwam, werkte hij meer dan 8 jaar voor AWS-klanten en -partners in software-engineering, consulting en architectuurrollen.
Patrick Oberherr is een Staff Data Engineer bij Contentful met meer dan 4 jaar ervaring met AWS en meer dan 10 jaar op het gebied van data. Bij Contentful is hij verantwoordelijk voor de infrastructuur en operaties van de datastack die op AWS wordt gehost.
Johannes Gunther is een cloud- en dataconsultant bij Netlight met meer dan 5 jaar ervaring met AWS. Hij heeft klanten in verschillende sectoren geholpen bij het ontwerpen van duurzame cloudplatforms en is AWS-gecertificeerd.
- Door SEO aangedreven content en PR-distributie. Word vandaag nog versterkt.
- PlatoData.Network Verticale generatieve AI. Versterk jezelf. Toegang hier.
- PlatoAiStream. Web3-intelligentie. Kennis versterkt. Toegang hier.
- PlatoESG. carbon, CleanTech, Energie, Milieu, Zonne, Afvalbeheer. Toegang hier.
- Plato Gezondheid. Intelligentie op het gebied van biotech en klinische proeven. Toegang hier.
- Bron: https://aws.amazon.com/blogs/big-data/set-up-fine-grained-permissions-for-your-data-pipeline-using-mwaa-and-eks/
- : heeft
- :is
- :niet
- $UP
- 1
- 10
- 100
- 12
- 16
- 2023
- 27
- 41
- 8
- 9
- a
- in staat
- Over
- boven
- Volgens
- Account
- accounts
- erkennen
- over
- acties
- acyclische
- toegevoegd
- aanhangen
- Voordeel
- voordelen
- Na
- weer
- tegen
- Alles
- langs
- ook
- Amazone
- Amazon Web Services
- an
- en
- Nog een
- elke
- apache
- api
- Aanvraag
- Solliciteer
- nadering
- goedkeuren
- architectuur
- ZIJN
- AS
- gaat uit van
- At
- machtiging
- Automatisch
- webmaster.
- Beschikbaar
- weg
- AWS
- AWS-gecertificeerd
- AWS-klant
- gebaseerde
- omdat
- vaardigheden
- achter
- Achter de schermen
- wezen
- tussen
- Blog
- zowel
- browser
- bedrijfsdeskundigen
- maar
- by
- CAN
- gevallen
- Certified
- veranderd
- Wijzigingen
- keuze
- Kies
- Klik
- klanten
- Cloud
- TROS
- code
- Kolom
- combinatie van
- gemeenschap
- Bedrijven
- compleet
- complex
- ingewikkeldheid
- componenten
- Berekenen
- vertrouwelijkheid
- Configuratie
- troosten
- consultant
- consulting
- bevatten
- bevat
- content
- inhoudsplatform
- Hoek
- te corrigeren
- Kosten
- en je merk te creëren
- aangemaakt
- creëert
- Actueel
- klant
- klantervaring
- Klanten
- DAG
- gegevens
- data engineer
- Gegevensplatform
- gegevensverwerking
- datetime
- beslist
- Besluitvorming
- diepere
- bepalen
- gedefinieerd
- definieert
- het definiëren van
- afhankelijkheden
- Afhankelijkheid
- Afhankelijk
- implementeren
- ingezet
- het inzetten
- inzet
- beschrijving
- ontwerpen
- bestemming
- vernietigd
- Dialoog
- DEED
- anders
- gerichte
- duiken
- diversen
- do
- havenarbeider
- documentatie
- Download
- tekening
- elk
- gemak
- echo
- inspanning
- leeg
- maakt
- bezig
- ingenieur
- Engineering
- zorgen
- toegang
- Milieu
- essentieel
- Ether (ETH)
- precies
- voorbeeld
- uitwisseling
- uitvoeren
- uitgevoerd
- uitvoering
- ervaring
- Verken
- extensies
- vals
- veld-
- Dien in
- Bestanden
- Voornaam*
- plat
- Flexibiliteit
- flexibel
- volgen
- volgend
- Voor
- oppompen van
- functie
- verder
- verzamelen
- algemeen
- krijgen
- GitHub
- Geven
- diagram
- Groep
- Groep
- Gast
- Gast blog
- Handvaten
- gebeurt
- Hebben
- he
- hulp
- geholpen
- hoger
- gastheer
- gehost
- Hoe
- How To
- HTML
- HTTPS
- IAM
- Identiteit
- if
- uitvoeren
- uitvoering
- importeren
- invoer
- verbeteren
- in
- omvatten
- omvat
- Inclusief
- Laat uw omzet
- onafhankelijkheid
- individueel
- industrieën
- Infrastructuur
- binnen
- inzichten
- verkrijgen in plaats daarvan
- integriteit
- wisselwerking
- Interface
- in
- kwestie
- uitgevende
- IT
- HAAR
- zelf
- Jobomschrijving:
- Vacatures
- aansluiting
- jpg
- json
- sleutel
- Soort
- blijven
- kennis
- Kubernetes
- later
- laatste
- geleerd
- minst
- als
- Lijst
- vermelding
- lijsten
- laden
- lokaal
- ingelogd
- Kijk
- behoud van
- maken
- MERKEN
- beheer
- beheerd
- manager
- volwassen
- Mei..
- Bericht
- Metadata
- minimum
- minuten
- module
- Modules
- meer
- veel
- meervoudig
- naam
- Genoemd
- namen
- OP DEZE WEBSITE VIND JE
- noodzakelijk
- Noodzaak
- behoeften
- netwerk
- netwerken
- New
- knooppunt
- nota
- nu
- object
- objecten
- of
- on
- EEN
- Slechts
- open source
- operatie
- Operations
- exploitanten
- Opties
- or
- organisatie
- Overige
- onze
- uit
- uitgang
- het te bezitten.
- pakket
- parameter
- partner
- partnernetwerk
- partners
- onderdelen
- Patch
- pad
- patrick
- permissies
- pijpleiding
- platform
- platforms
- Plato
- Plato gegevensintelligentie
- PlatoData
- Spelen
- peulen
- beleidsmaatregelen
- Portret
- Post
- in de eerste plaats
- privaat
- verwerking
- Product
- Profiel
- project
- projecten
- voorgestelde
- leverancier
- providers
- biedt
- Python
- Contact
- RE
- bereiken
- ontvangen
- onlangs
- aanbevolen
- verminderen
- regio
- verwijderen
- Voorwaarden
- hulpbron
- gebruik van hulpbronnen
- Resources
- verantwoordelijkheden
- verantwoordelijk
- resultaat
- Resultaten
- robuust
- Rol
- rollen
- Regel
- lopen
- lopend
- loopt
- SaaS
- dezelfde
- Bespaar
- Scale
- scaling
- Scenes
- rooster
- gepland
- scheduling
- krassen
- Tweede
- beveiligen
- veiligheid
- zien
- -Series
- service
- Diensten
- reeks
- het instellen van
- Aandelen
- delen
- moet
- getoond
- Shows
- eenvoud
- vereenvoudigen
- single
- enkele omgeving
- Maat
- Klein
- Software
- software engineering
- Oplossingen
- bron
- bronnen
- specifiek
- specifiek
- snelheid
- stack
- Medewerkers
- begin
- gestart
- Start
- starts
- Statement
- Still
- mediaopslag
- opslag opties
- winkels
- structuur
- Studie
- onderwerpen
- succes
- geslaagd
- zeker
- duurzaam
- geschakelde
- symbool
- Systems
- Nemen
- ingenomen
- neemt
- doelwit
- Taak
- taken
- team
- teams
- vertelt
- templates
- Terraform
- tekst
- dat
- De
- De Bron
- hun
- harte
- Deze
- ze
- dit
- Door
- naar
- teken
- tools
- tools
- top
- onderwerp
- Transformatie
- leiden
- waar
- twee
- type dan:
- die ten grondslag liggen
- bijwerken
- op
- .
- gebruikt
- Gebruiker
- User Interface
- toepassingen
- gebruik
- waardevol
- waarde
- variabele
- divers
- versie
- trillend
- Virtueel
- lopen
- walkthrough
- was
- we
- web
- webservices
- GOED
- Wat
- wanneer
- welke
- geheel
- waarvan
- Waarom
- wijd verspreid
- wil
- Met
- werkte
- workflow
- workflows
- werkzaam
- jaar
- u
- Your
- zephyrnet