Laborator 6. Amazon Web Services

Cunoștințe și abilități ce vor fi dobândite

  • Administrarea resurselor cloud folosind consola grafică.
  • Securitate în cloud.
  • Configurarea rutării în cloud.
  • Accesarea serviciilor de transfer de fișiere (FTP).

Pregătire infrastructură de laborator

  • Vom crea o infrastructură de rețea în cloud-ul Amazon.
  • Fiecare student va folosi aplicația laboratorului. Pentru a vă loga, veți primi parola laboratorului din partea asistentului și veți avea astfel acces la credențialele pentru cloud.

Fiecare student își va denumi resursele astfel student<X>_[nume_resursa]. De exemplu student1_VPC.

Prezentare concepte

Servicii de cloud existente: Amazon Web Services, Google Cloud Platform și Microsoft Azure.

Mai departe discutăm despre AWS; serviciile pe care le vom folosi în cadrul laboratorului:

  • Compute: EC2
  • Networking and Content Delivery: VPC

Alte servicii în cloud-ul Amazon:

  • Storage - Amazon Simple Storage Service (Amazon S3)
  • Database
  • Machine Learning
  • Analytics
  • AR&VR
  • Mobile

EC2 (Amazon Elastic Compute Cloud) oferă capacitate dinamică computațională în cloud. De asemenea, pentru a dezvolta și lansa aplicații nu mai ai nevoie să îți achiziționezi hardware-ul, acest serviciu punându-ți la dispoziție: servere virtuale, configurarea securității și networking, ajustarea spațiului de stocare.


Virtual Private Cloud te ajută să pornești resursele Amazon într-o rețea virtuală definită de tine. Această rețea seamănă cu o rețea tradițională unde poți configura spații de adrese, tabele de rutare, gateways și setări de securitate, dar are în plus beneficiile utilizării unui infrastructuri scalabile precum AWS. Fiecare VPC creat este izolat logic de oricare alt VPC din cloud.

Fiecare cont Amazon vine cu un VPC prestabilit pentru a putea să folosești resursele Amazon fără să îți construiești infrastructura de la zero. O diagrama simplă pentru un VPC avem în alăturată.

Două sau mai multe VPC-uri pot comunica atâta timp cât se află în aceeași regiune. În plus VPC-urile ale căror blocuri de adrese IP se suprapun nu pot comunica.

3 tipuri de adrese IP:

  • adrese IP private
  • adrese IP publice. O adresă publică ce a fost atribuită unei instanțe pe care am închis-o va reveni în pool-ul inițial de adrese. Când vom reporni instanța, aceasta va avea o altă adresă IP publică.
  • adrese IP publice statice sunt adrese IP publice care rămân asociate contului tău Amazon până în momentul în care alegi să renunți la ele.

Care este diferența între adrese IP private și adresele IP publice?

Subnet - interval de adrese IP într-un VPC. Poți să lansezi resursele Amazon într-un subnet pe care îl creezi, la alegere.

În Amazon avem două tipuri de subnets:

  • Publice (atunci când resursele trebuie să aibă acces direct în Internet, de exemplu serverele web). Un subnet este făcut public atunci când există o rută în tabela de rutare care trimite traficul în Internet printr-un Internet Gateway.
  • Private (atunci când resursele nu trebuie să aibă acces direct în Internet, de exemplu bazele de date)

În fiecare subnet, primele 4 adrese IP și ultima adresă IP nu pot fi folosite de utilizatori:

  • Prima este adresă de rețea
  • A doua este rezervată pentru ruter-ul VPC-ului
  • A treia este rezervată de AWS pentru serverul DNS (în general adresa de rețea a subnet-ului plus doi)
  • A patra este rezervată de AWS pentru viitoare utilizări
  • Ultima este adresa de broadcast

Internet Gateway. IGW este o componentă a VPC-ului care permite comunicarea între instanțele din VPC și Internet. Pentru a comunica cu o instanță din subnet-ul public, este necesar ca instanța să aibă alocată o adresă IP publică statică.

Poți crea un singur obiect IGW per VPC.

Tabela de rutare. Fiecare subnet dintr-un VPC trebuie să aibă asociată o tabelă de rutare. Un subnet poate fi asociat numai cu o singură tabelă de rutare la un moment dat, dar o tabelă de rutare poate fi asociată cu mai multe subnet-uri.

Pentru ca instanțele create într-un subnet privat să acceseze Internetul (dar să nu fie accesate din Internet) putem folosi un obiect AWS numit NAT Device (Network Address Translation Device). (exemplu: web serverul este în subnet-ul public și baza de date în subnet-ul privat. Baza de date s-ar putea să aibă nevoie de conexiune la Internet)

NAT Gateway - serviciu AWS de management al traficului. Folosim un NAT Gateway pentru a permite instanțelor dintr-un subnet privat să aibă acces la Internet sau la alte servicii AWS și în același timp pentru a fi inițiate conexiuni din Internet către stațiile din acel subnet.

Un Security Group acționează ca un firewall virtual care controlează traficul pentru una sau mai multe instanțe. Putem adăuga reguli pentru fiecare Security Group care să permită traficul către/de la instanțele asociate.

Prestabilit, fiecare Security Groups permite tot traficul de ieșire. Regulile unui Security Group sunt întotdeauna permisive (nu putem adăuga o regulă de „deny”); Un Security Group este stateful (dacă o instanță face o cerere, răspunsul va ajunge la instanță indiferent de regulile de intrare din Security Group). Modificările făcute asupra regulilor dintr-un Security Group se aplică în timp real.

Un Network ACL (Access Control List) oferă un nivel opțional de securitate pentru VPC și acționează ca un firewall pentru controlul traficului de intrare și de ieșire pentru unul sau mai multe subnet-uri.

Pentru mai multe detalii despre funcționarea VPC-urilor și resursele AWS, urmăriți tutorialul.

Documentație AWS:

VPC Networking Components
VPC and Subnets
Elastic IP Addresses
Amazon EC2

Topologie

Exerciții

Dorim să ne creăm propriul VPC și să obținem o rețea funcțională conform topologiei de mai sus. Următoarele exerciții constituie pașii de parcurgere pentru ca la final să putem folosi rețeaua.

Deși fiecare student primește câte un username separat, organizația AWS folosită (sponsorizată de către Bitdefender) este numai una, iar aceasta definește namespace-ul tuturor resurselor. De aici rezultă principala limitare, faptul că o să puteți vedea și interacționa cu TOATE obiectele create de către fiecare student (i.e., resursele sunt partajate între utilizatori).

Mai mult, veți putea vedea și niște resurse prefixate cu admin_. Acestea sunt folosite pentru găzduirea aplicației de gestiune a conturilor, încercați să nu vă atingeți de ele (deși am implementat restricții de acces, dacă cineva reușește să șteargă / facă aplicația nefuncțională well… o să ne mai vedem și la toamnă / anul :P).

Permisiuni atribuite utilizatorilor student: doar de creare resurse, modificat unde este necesar, taguit doar cu prefixul student<X>_, fără drept de ștergere și alte acțiuni ne-necesare laboratorului.

01. [10p] Creare VPC

În secțiunea Networking & Content Delivery (dati scroll mai jos) alegem VPC. Există 2 moduri de a crea un VPC în contul tău Amazon: folosind un utilitar automat (care face majoritatea acțiunilor fără ca utilizatorul să controleze) sau alegând specificațiile manual.

În VPC Dashboard, alegem secțiunea Your VPCs și opțiunea Create VPC.

Numele VPC-ului va fi student<X>_VPC. Mai departe, vom alege un bloc de adrese IP, de preferat 192.168.$X$.0/24, unde $X$ - id-ul studentului. Opțiunea Tenancy va fi setată ca Default.

02. [10p] Creare adresă IP publică

Dorim să ne creăm propria adresă IP publică statică pentru a o asocia mai târziu unei instanțe din topologia noastră. În VPC Dashboard, alegem secțiunea Elastic IPs și opțiunea Allocate New Address (păstrăm setările default) și apăsăm Allocate.

Este un cost pentru fiecare adresă IP publică statică care nu este alocată unei instanțe.

Acum avem în lista de adrese IP publice statice din contul nostru, adresa IP alocată mai devreme.

03. [10p] VPC Subnets

Pentru a lansa instanțe într-un VPC trebuie să avem cel puțin un subnet. În VPC Dashboard, alegem secțiunea Subnets și opțiunea Create Subnet.

Este de preferat să alocăm subnet-uri în mai multe ”Zone de disponibilitate”/Availability Zones pentru redundanță. În laboratorul de astăzi, vom crea toate obiectele în același Availability Zone.

Mai departe, vom crea 4 subnets, unul public (pentru instanța Frontend) și 3 private (pentru instanțele Red, Green, Blue).

Alegem VPC-ul creat la Exercițiul 1 și alegem același Availability Zone pentru toate subnet-urile (de exemplu, eu-west-1a). Mai departe, alegem masca de rețea corespunzătoare (/28 pentru subnet-ul public și /26 pentru subnet-urile private):

  • 192.168.$X$.0/26
  • 192.168.$X$.64/26
  • 192.168.$X$.128/26
  • 192.168.$X$.192/28, unde $X$ - id-ul studentului

Recomandăm ca numele pentu subnet-uri să fie sugestive. Pentru exercițiul nostru:

  • student<X>_PUBLIC (aici vom adăuga instanța Frontend)
  • student<X>_RED
  • student<X>_GREEN
  • student<X>_BLUE, unde X - id-ul studentului

Observăm în lista de subnet-uri cele 4 subnet-uri create mai devreme:

De asemenea, putem vedea și tabelele de rutare pentru fiecare subnet.

04. [10p] Internet Gateway

În VPC Dashboard, alegem secțiunea Internet Gateways și opțiunea Create Internet Gateway.

Numele pe care îl alocăm IGW nou creat este student<X>_IGW. Trebuie să îl alocăm VPC-ului creat la Exercițiul 1(Actions → Attach to VPC → Alegem din listă student<X>_VPC → Attach).

Am discutat mai devreme despre public subnets. Subnet-ul 192.168.$X$.192/28 va fi subnet-ul public, care va putea accesa direct Internetul prin intermediul IGW. Pentru asta, trebuie să ne asigurăm că tabela de rutare a subnet-ului pointează către IGW-ul creat.

05. [15p] Tabela rutare

În VPC Dashboard, alegem secțiunea Route Tables și opțiunea Create Route Table.

Fiecare VPC are o tabela de rutare default (Dați tabelei de rutare default numele student<X>_DEFAULT_RTB). Dorim să creăm o altă tabelă de rutare. Denumim tabela de rutare: student<X>_RTB și alegem VPC-ul creat la Exercițiul 1.

Mai departe vom modifica această tabelă de rutare pentru a pointa către IGW. Din partea de jos a paginii, alegem secțiunea Routes → Edit routes → Add route (destinație 0.0.0.0/0, target Internet Gateway si o sa va apara o intrare de tip student<X>_IGW pe care o selectati) → Save routes.

În acest moment tabela de rutare nu este asociată niciunui subnet (verificăm în secțiunea de jos Subnet Associations), deci toate subnet-urile create în VPC sunt asociate aceleiași tabele de rutare (default route table).

Ne dorim ca doar instanțele din subnetul public să aibă acces la Internet prin IGW (Edit subnet associations → Alegem subnetul student/<X>_192.168.$X$.192_PUBLIC → Save).

Până aici doar instanțele create în subnet-ul public, asociat IGW vor avea acces la Internet. Ne dorim ca și instanțele pe care le vom crea în subnet-urile private (respectiv Red, Green, Blue) să aibă acces la Internet.

06. [15p] NAT Gateway

Va trebui să adăugăm un NAT Gateway în subnet-ul public (are nevoie de acces la Internet) și de asemenea, să îi alocăm o adresă IP publică statică. (creată la Exercițiul 2).

Înainte să creăm NAT GW, mergem în Secțiunea Subnets și copiem Subnet ID-ul subnet-ului public (așa cum am văzut mai devreme, NAT Gateway-ul trebuie adăugat în subnet-ul public pentru a avea conexiune la Internet).

În VPC Dashboard, alegem secțiunea NAT Gateways și opțiunea Create NAT Gateway.

Aici, specificăm subnet-ul (copiat mai devreme) și alegem adresa IP publică statică creată la Exercițiul 2.

Nu uitați să denumiți fiecare resursă nou-creată folosind prefixul student<X>_, unde X este ID-ul username-ului vostru.

După crearea NAT GW, actualizăm tabela de rutare asociată subnet-urilor private să pointeze către NAT GW. Alegem Edit route tables. Adăugăm o rută în tabela de rutare default: Routes → Edit routes → Add route → destinație 0.0.0.0/0, target nat) → Save routes.

În acest moment, orice instanță creată într-unul din subnet-urile private va putea accesa Internetul.

07. [30p] Instanțe EC2

În EC2 Dashboard (in sus avem Services→ Compute → EC2) , alegem secțiunea Instances și opțiunea Launch Instance.

Alegem o imagine de mașină virtuală (AMI - Amazon Machine Image) din secțiunea Choose AMI. Folosiți imaginea RL_AWS2, de la My AMIs (meniul din stânga).

Pentru Instance Type alegem astfel:

  • Pentru instanța Frontend - t3a.xlarge (avem nevoie de 4 interfețe de rețea)
  • Pentru Red, Green și Blue - t2.micro (permite maxim 2 interfețe de rețea, dar noi oricum folosim doar una)

Prima dată creăm cele 3 instanțe Red, Green, Blue. Vom incepe cu instanta Red. În secțiunea Configure Instance Details:

  • Alegem VPC-ul student<X>_VPC
  • Alegem subnet-ul corespunzător stației Red

Selectăm secțiunea Configure Security Group și alegem astfel:

  • pentru Frontend, alegem Create a new security group, punem un nume descriptiv (student<X>_sec_public) și modificăm a.î. regula de Inbound la SSH să fie permisă doar pentru IP-urile din Politehnică (141.85.0.0/16). Regulile de whitelist după IP sunt o practică recomandată pentru protejarea serverelor împotriva atacatorilor externe.
  • Pentru celelalte instanțe alegem Select an existing security group și selectăm grupul creat anterior.

Ne vom ocupa mai târziu de restul de reguli.

Apăsăm Review and Launch → Launch. La acest nivel nu ne interesează setările pentru Storage și Tags.

Avem nevoie de o pereche de chei pentru a ne putea conecta la instanța pe care o creăm (alegem Create a new key pair și îi dăm numele student<X>_RL_lab. Descărcați cheia privată).

Îi dăm un nume instanței nou create (am început cu Red). Continuăm cu Green și Blue într-un mod similar.

Pentru următoarele instanțe alegem să folosim Security Group-ul si perechea de chei pe care le-am creat anterior.

Din Meniul din stânga, secțiunea Network&Security, alegem Network interfaces. Ne dorim ca instanța Frontend să aibă câte o interfață și în rețelele cu Red, Green, Blue.

Mai întâi denumim interfețele de rețea create o dată cu instanțele pentru a fi mai ușor de lucrat cu ele.

Alegem Create Network Interface. Adăugăm descrieri sugestive și alegem subnet-ul potrivit pentru fiecare interfață nou creată. De asemenea, alegem security group-ul creat anterior. Obținem:

Ne întoarcem în secțiunea Instances. Instanței Frontend îi adăugăm cele trei interfețe de rețea create mai devreme (Actions → Networking → Attach Network Interface).

Nu uitați să denumiți fiecare resursă nou-creată folosind prefixul student<X>_, unde X este ID-ul username-ului vostru.

Fiecare instanță va avea atașată automat o interfață de rețea implicită (Primary network interface) cu subnet-ul pe care l-ați ales din wizard.

Din păcate, AWS nu tag-uiește numele acestei interfețe cu cel al instanței, așa că va trebui să căutați și să dați manual numele acestei interfețe pentru a nu le încurca între voi imediat după ce creați o instanță. Puteți s-o găsiți ușor apăsând click pe eth0 din descrierea instanței (la Instances, click pe resursă și apar jos aceste detalii).

Pentru a ne putea conecta la stația Frontend, trebuie să îi alocăm o adresă IP publică statică (așa cum am învățat la începutul laboratorului) - vezi exercițiul 2. Asociem adresa IP publică statică interfeței de rețea corespunzătoare subnet-ului public.

Subnet-ul public are conexiune la Internet direct prin intermediul Internet Gateway-ului.

Ne conectăm prin ssh la instanța Frontend folosind comanda (în cazul Linux):

ssh -i [private_key] ec2-user@[ip_public]

Schimbați permisiunile asupra cheii private (chmod 700 RL_lab.pem)

Pe Windows, dacă folosiți Putty, va trebui să convertiți cheia SSH într-un format acceptat urmând ghidul de aici.

Pentru a ne putea conecta prin ssh de pe Frontend și la celelalte instanțe, va trebui să copiem cheia privată de pe stația locală pe Frontend:

# pe Linux:
scp -i [private_key] [private_key] ec2-user@[ip_public]:~

(pe Windows, puteți folosi WinSCP)

Verificați conectivitatea la Internet pe cele 4 instanțe (Frontend, Red, Green, Blue).

Pentru ca tinem la feedback, va rugam sa completati acest formular de feedback anonim

08. [BONUS - 5p] ICMP

Observați că nu putem să dăm ping de pe oricare stație către oricare stație (între Red, Green și Blue).

Pentru a permite traficul de ICMP, adăugăm o nouă regulă în Security Group-ul student<X>_SecurityGroup prin care specificăm tipul de trafic și sursa.

Verificați conectivitatea între Red, Green și Blue.

09. [BONUS - 10p] Download FTP folosind curl

Vom folosi curl pentru a descărca un fișier prin FTP. Pe stația Frontend rulează un server FTP și pe stația Red vom folosi comanda curl pentru a descărca fișierul localizat în /home/student/big.bin de pe frontend:

curl ftp://student:student@<ip_frontend>/big.bin -o big.bin

Este nevoie să configurăm una sau mai multe reguli în Security Group pentru a permite descărcarea de fișiere prin FTP.

Adăugăm două reguli Custom TCP Rule, una pentru port range-ul 20-21, respectiv 1025-1048 și la sursă alegem security group-ul în care se află instanțele noastre.

În acest moment, putem descărca fișierul de pe oricare din instanțele Red, Green, Blue.

10. [BONUS - 5p] Blocare FTP

Ne dorim să blocăm FTP pentru stațiile Green și Blue.

Modificăm regulile din Security Group astfel încât să permitem doar stației Red să se conecteze prin FTP la server.

Verificați că puteți descărca fișierul testFTP.dat doar de pe stația Red.

rl/labs/06.txt · Last modified: 2019/11/05 05:54 by octavian.grigorescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0