Verbeter de beveiliging van je applicaties op AWS, deel II

Manuele configuratie van publiek en privaat subnet, routes, beveiligings groepen, nat gateway en bastion server via de  AWS console

In onze vorige blog Verbeter de beveiliging van je applicaties op AWS hebben we geprobeerd om duidelijk te maken dat services zoals AWS, Azure, Google Cloud platdform rijke functionaliteit leveren voor onze dagelijkse bedrijfsbenodigdheden voor dataopslag en data verwerking en dat deze platformen eenvoudig kunnen schalen op basis van enkele muis clicks op het moment dat de hoeveelheid data of het aantal gebruikers toeneemt over tijd. 

Veel van de functionaliteit van deze platformen wordt aangeboden aan de eind-gebruiker in de vorm van managed services om het zo eenvoudig mogelijk te maken om systemen te configureren en te starten, hiermee de onderliggende linux configuratie en setup middels shell scripting voor de gebruikers abstraherend. Op basis van gebruik van deze services worden vervolgens de kosten op maandelijkse basis bij ons in rekening gebracht.

Voor de meeste bedrijven is dit een perfect model omdat de kosten voorspelbaar zijn en er geen grote investeringen op voorhand benodigd zijn, je kunt groeien in het gebruik van deze services.

Aan de andere kant zijn deze platformen zo slim als de gebruiker ervan immers ze kunnen niet je netwerk setup, applicatie die erop moeten draaien, toegangsrechten, beveiliging etc. voorspellen. Dit maakt dat het gebruik van deze platformen door gebruikers met geen achtergrondkennis in netwerken, beveiliging etc. een beveiligingsrisico kan inhouden voor uw onderneming. Dit is enkel de reden waarom er architecten en devops zijn welke er voor dienen te zorgen dat de architectuur van de oplossing up to date, beveiligd en in controle is in het geval van een calamiteit.

In plaats van het starten van een instance on the fly is het plannen van uw architectuur erg belangrijk om ervoor te zorgen dat uw meest waardevolle assest beveiligd zijn.

Voorheen spraken we over het splitsen van het netwerk in twee delen, het publieke en private subnet. In het private subnet dienen uw business applicaties te draaien die totaal geisoleerd dienen te zijn van het internet en het publieke subnet is geconnecteerd via een internet gateway aan het internet.  We maakten melding van het gebruik van een NAT Gateway om alle binnenkomende internet verkeer te blokkeren richting het private subnet en gebruik te maken van een Bastion Server als jumbox om via SSH toegang te kunnen verkrijgen tot de instances in het private subnet.

 

In deze blog kijken we naar de details how we een dergelijke architectuur binnen AWS manueel kunnen definieren middels de AWS console.

Alleerste moeten we een Virtual Private Cloud aanmaken.

Allereerst dienen we hiervoor in de AWS console in te loggen, we gaan ervan uit dat u reeds beschikt over een Amazon account anders dient u zichzelf hiervoor eerst te registreren.

In het VPC scherm specificeren we de naam van de VPC en maken we gebruik van de IPv4 block range, afhankelijk van de benodigdheden kan hier ook gekozen worden voor IPv6 in plaats van IPv4.

In ons voorbeeld kunnen we gebruik maken van IP adressen in het bereik 10.10.0.0 tot 10.10.255.255 binnen de VPC. Indien je niet op de hoogte bent van subnets en maskers raadpleeg dan uw administrator of lees hierover meer op het internet.

 

Vervolgens benodigen we een publiek en privaat subnet.

In het VPC dashboard selecteer Subnets and druk op de Create Subnet button.

 

Vul de name tag in en kies de VPC die we voorheen hebben aangemaakt.

Vervolgens kies de availability zone en specificeer de CIDR voor het subnet. Indien je niet weet wat een availability zone is raden we aan om hiervoor de AWS documentatie te raadplegen.

In het bovenstaande voorbeeld  zijn de IP adressen 10.10.0.0 tot 10.10.0.255 beschikbaar voor het publieke subnet.

Vervolgens maken we het private subnet aan middels de Create Subnet button.

 

In bovenstaand voorbeeld zijn de IP adressen 10.10.1.0 tot 10.10.1.255 beschikbaar voor het private subnet.

Je resultaat dient er nu als volgt uit te zien:

 

Vervolgens selecteren we het publieke subnet en middels rechts click Modify auto assign IP settings vinken we de Enable Auto-assign Public IPs check box aan en drukken op de Save button.

 

We willen dat alle instances in het publieke subnet ofwel de internet facing instances automatisch een publiek ip adres per default krijgen toegewezen.

Wanneer dit is uitgevoerd ziet je in het overzicht deze wijziging in de kolom Auto Yes voor het publieke subnet.

 

Vervolgens dienen we een Internet Gateway aan te maken.

Een internet gateway laat communicatie toe tussen instances in een Virtual Private Cloud en het internet. De internet gateway heeft twee toepassingen:

  1. Voorzien in een doel in de Virtual Private Cloud tabellen voor internet gebonden verkeer
  2. Het uitvoeren van netwerk adres translatie voor instances die voorzien zijn van een publiek IPv4 adres omdat hun private ip adres niet beschikbaar kan worden gesteld aan het internet

In het VPC dashboard selecteer Internet Gateways en druk op de  Create Internet Gateway button.

Kies een name tag en druk op de Yes, Create button.

 

Vervolgens dienen we de Internet Gateway te verbinden aan de Virtual Private Cloud, rechter muis druk op de Internet Gateway en selecteer Attach to VPC.

 

Vervolgens druk op Yes, Attach button nadat je de juiste VPC hebt gekozen.

Ons resultaat dient er vergelijkbaar uit te zien:

 

Vervolgens dienen we een Route aan te maken voor het publieke subnet die internet verkeer toestaat via de Internet Gateway.

In het VPC Dashboard, druk op de Create Route Table button

 

Vul de Name tag in and kies je VPC alvorens de Yes, Create button in te drukken.

Je resultaat dient er vergelijkbaar uit te zien als hieronder:

 

Selecteer de nieuwe  Route Table en ga na het onderste gedeelte van het scherm Routes tab.

Voeg een nieuwe route toe middels door op de Edit button te drukken.

Type in het Destination veld 0.0.0.0/0 en kies de Internet Gateway onder Target en druk op de Save button.

 

Vervolgens druk op de Subnet  Associations tab en druk op de Edit button. We associeren het Publieke Subnet met de Route Table en drukken op de Save button.

Bovenstaande regel specificeerd dat elke device van het internet kan connecteren aan ons Publieke subnet via de Internet Gateway. Opmerking: We zouden hier ook slechts beperkte ip-addressen kunnen toelaten.

 

Vervolgens dienen we een Private Route Table aan te maken welke het private subnet verbind met de NAT Server.

Nog steeds in de VPC dashboard onder Route Tables druk op de Create Route Table button.

Vul in de Name tag en kies onze VPC alvorens op de Yes, Create button te drukken.

Vervolgens dienen we de Private Route Table te verbinden met het Private subnet en het Private subnet the verbinden met de NAT Gateway, maar voor dat we dit kunnen doen dienen we eerst de NAT Gateway aan te maken.

Selecteer de zo-even aangemaakte Route Table en kies in het onderste deel van het scherm de Subnet Associations tab en druk op de Edit button, vervolgens selecteren we Private subnet en drukken op de Save button.

 

Vervolgens kunnen we de NAT Gateway aanmaken.

In het VPC Dashboard kies NAT Gateways en druk op de  button Create NAT Gateway

 

In het Subnet kiezen we voor het Publieke subnet en we voegen een elastic toe aan de NAT Gateway door op de button Create New EIP te drukken. Hiermee wordt een elastic ip toegevoed onder VPC Dashboards - Elastic IPs.

Vervolgens drukken we op de Create a NAT Gateway button.

Het kost enige tijd om de NAT Gateway the instantieren, waardoor de status Pending toont alvorens te veranderen in Available indien gereed.

Je resultaat dient overeenkomstig te zijn met onderstaande afbeelding:

 

Als vervolgestappen dienen we een Public en Private Security Group the configureren, waarbij de Public Security Group communicatie toelaat van een extern ip adres via poort 22 naar de Bastion Server en de Private Security Group communicatie toelaat tussen de instances in the Public Security Group en de instances in het Private subnet. Voor de Bastion Server kun je gebruik maken van een Amazon Linux AMI met de VPC zoals voorheen aangemaakt en het Public subnet gebruik makend van de Auto assign public IP enabled en de default storage en de Public Security Group. Je kunt een dergelijke instance starten via het EC2 dashboard.

Je kunt deze laatste stappen zelfstanding uitvoeren als oefening om de architectuur te complementeren, daarnaast kun je ook je eigen instances toevoegen aan het Private subnet.

Conclusie:

Ook al is de AWS console erg gebruiksvriendelijk, het is niet erg praktisch in gebruik om een architectuur mee te configureren vanwege de vele stappen van configuratie, je raakt hierdoor snel het overzicht kwijt omdat het ontbreekt aan een visuele representatie van de gedefinieerde architectuur. Ook is het afbreken van een eenmaal gedefinieerde architectuur niet eenvoudig vanwege de onderlinge verwijzigen tussen de verschillende configuratie tabellen, e.e.a. levert zo te weinig flexibiliteit om snel architecturen op te bouwen en weer af te breken.

In onze volgende blog zullen we ingaan op automation gebruik makende van de AWS rest api, via deze api wordt het veel eenvoudiger om onze architecturen te managen dan middels de AWS console wat ons in staat stelt om binnen enkele seconden een complete architectuur op te bouwen en weer af te breken. Automation stelt ons in staat gebruik te maken van templating of met andere woorden hergebruik voor overige architecturen wat organisaties in staat stelt om waardevolle tijd te besparen en daarmee dus geld en meer flexibiliteit aan de dag te leggen.

Ronald Span

Founder of Scalar Data, over 20 years of experience in a variety of national and international IT projects in different roles, development, consultancy, pre-sales, management and business development. Scalar Data is helping organizations to implement their big data strategy.