Osnove AWS IAM (Identity and Access Management) servisa

Šta je IAM?

Ono što je ustav u državi (najviši pravni akt) to je IAM servis u AWS-u. On određuje ko je ko i ko kakva prava ima, te važi na nivou cijele države odnosno važi na nivou cijelog AWS-a. Stoga važno je da zapamtimo da je AWS IAM globalni servis, što znači da se on konfiguriše na nivou cijelog AWS-a a ne na nivou AWS Regiona.

IAM odnosno Identity and Access Management je kao što mu samo ime kaže servis za upravljanje identitetima i pristupima. Ovim servisom vi zapravo uređujete način korištenja vašeg AWS cloud okruženja, kroz upravljanje korisnicima kojima određujete nivoe i prava pristupa i korištenja AWS servisa i kroz međusobnu interakciju između servisa. Zbog svoje funkcije, IAM predstavlja osnovni servis za korištenje AWS-a, koji nudi centralizovanu kontrolu nad svime navedenim.

U AWS-u IAM servis je odgovoran za dva osnovna procesa, a to su autentifikacija i autorizacija.

Autentifikacija

Autentifikacija ili utvrđivanje identiteta je prvi od dva procesa za koji je IAM servis odgovoran. Svrha ovog procesa jeste davanje AWS-u, kao cloud provajderu, odgovor na pitanje: „Da li si ti baš onaj za koga se izdaješ da jesi?“, odnosno da se utvrdi identitet korisnika koji želi da upravlja AWS-om.

AWS ima dva načina za utvrđivanje identiteta korisnika a to su:

  • Putem korisničkog imena i lozinke (uz mogućnosti korištenja i token-a, što bi u tom slučaju značilo da se koristi multi-faktorska autentifikacija – MFA)
  • Putem ključeva za pristup kao što su Access Key i Secret Access key (koji se u najvećoj mjeri koriste za pristup putem CLI).
Autorizacija 

Često korisnici znaju pomiješati autentifikaciju i autorizaciju, pa je važno znati da su ovo dva apsolutno različita procesa. U odnosu na autentifikaciju, autorizacija je proces koji AWS-u daje odgovor na pitanje: Da li ima neko pravo ili odobrenje da realizuje željenu akciju?

Autorizacija kao proces za koji je IAM odgovoran se odnosi na utvrđivanje da li neki korisnik ili neki cloud servis ima pravo odnosno odobrenje da pristupi, upravlja, izmjeni ili izvrši neku drugu željenu aktivnost nad nekim procesom ili servisom. Proces utvrđivanja prava i ovlašćenja se vrši upravo preko IAM servisa koji na osnovu dodjeljenih uloga (IAM Role) i politika (IAM policies) utvrđuje i daje odgovor na pitanje.


Glavne komponente IAM servisa

AWS Root user

Izuzetno je važno razlikovati Root korisnika od običnog IAM korisnika. Root user je osnovni-vlasnički nalog vašeg AWS-a, koji je kreiran prilikom same registracije na AWS i on ima potpun i neograničen pristup svim aspektima vašeg AWS naloga. Dok je IAM user, korisnički nalog zaposlenog u vašoj kompaniji (o čemu će poslije biti riječi).

IAM Users

IAM korisnik je nalog krajnjeg korisnika vašeg AWS-a (na primjer programera u vašoj kompaniji), najčešće, a što je i najbolja praksa, jeste da svaki zaposleni ili saradnik vaše organizacije ima vlastiti IAM korisnički nalog odnosno IAM user-a, koji ste mu vi kreirali i tom prilikom ili nekad posle dodijelili određena prava za upravljanje AWS-om u odnosu na njegov položaj i ulogu u organizaciji.

IAM Groups

IAM user-e možemo organizovati u IAM grupe. Isto kao što možemo dodijeliti prava za upravljanje AWS-om svakom pojedinačnom korisniku, tako možemo dodijeliti prava za upravlje AWS-om svakoj grupi, na taj način svi članovi IAM grupe imaju prava dodjeljena toj grupi. Najčešće grupišemo korisnike prema njihovim položajima i ulogama u organizaciji, s tim da treba napomenuti da jedan IAM korisnik može biti član više IAM grupa.

Primjer: Recimo da se vaš startup koji razvijate u cloud-u sastoji iz tri tima: menadžmenta, programera i DevOps inžinjera, a svi oni iz nekog razloga trebaju pristup AWS-u. Najbolji način da organizujete to jeste da kreirate tri grupe sa nazivima vaših timova i date ovlašćenja ona koja su im potrebna za nesmetan rad u cloud-u. Pored toga vjerovatno da će lider DevOps tima trebati ovlašćenja Dev tima pa tako da njega treba ubaciti u obje grupe. Pogledajte prikaz ispod.

IAM Roles

IAM Role služi da se bilo kom identitetu daje set ovlašćenja da komunicira i upravlja AWS resursima. IAM Role najčešće se koristi na davanje ovlašćenja jednom AWS servisu da upravlja i komunicira sa drugim AWS servisom.

Primjer: Recimo da naša cloud virtuelna mašina odnosno EC2 instanca treba da upisuje podatke u relacionu bazu podataka kao što je Amazon RDS, potrebno je definisati unutar IAM servisa novu IAM Role-u za EC2 instancu kojom odobravamo pristup i unos podataka u određenu Amazon RDS bazu.

IAM Policies

Set ovlašćenja za upravljanje AWS resursima za koji se dodjeljuje IAM User, IAM Group ili IAM Role naziva se IAM Policy. Pomenuta ovlašćenja su u formi dokumenta odnosno koda pisanog u JSON-u koja nazivamo IAM policy documents ili samo policy.

Primjer: Evo kako izgleda jednostavan primjer IAM policy-ja koji omogućava da korisnik koristi sve AWS cloud servise neograničeno:

{
        “Version”: “2012-10-17”,
        “Statement”: [
            {
                “Effect”: “Allow”,
                “Action”: “*”,
                “Resource”: “*”
            }
        ]
    }

Kako IAM funkcioniše

Najbolji način da shvatimo kako funkcioniše IAM u pozadini je da prođemo jedan jednostavan primjer.

Recimo da imamo korisnika Jelenu, koja je full stack developer u našoj kompaniji. I koja želi da kreira S3 bucket* sa nazivom “photos_2020”. Ona koristi CLI da upravlja AWS-om, što znači da na svom računaru ima sačuvan API i Secret key (npr. na lokaciji -/.aws/credentials). 

I Faza: Korisnička strana

Sa Jelenine strane proces je vrlo jednostavan i sastoji se iz jednog koraka, odnosno jedne komande:

aws s3 mb s3://photos_2020

II Faza: AWS strana

Dok sa AWS strane proces je duži. Evo šta se dešava u pozadini:

  1. AWS CLI će prvo provjeriti da li su prisutni neki kredencijali
  2. AWS CLI kreirati poziv da bi proslijedio kredencijale
  3. AWS IAM provjerava da li je Jelena autentifikovana odnosno stvarno ona osoba za koju se izdaje (npr. provjerava API key/secret kombinaciju da li je tačna i da li ista postoji u IAM bazi podataka)
  4. AWS IAM provjerava da li je Jelena autorizovana da realizuje ovu aktivnosti, konkretno da li joj je dodjeljeno ovlašćenje da kreira novi bucket u S3 servisu (s3:CreateBucket ovlašćenje)
  5. AWS S3 API zaprima poziv (komandu) da se za korisnika unutar S3 servisa kreira novi bucket pod nazivom “photos_2020” i vraća odgovor ka korisnikovom terminalu nakon što izvrši zadato.

III Faza: Korisnik strana

Na kraju naša progamerka u svom terminalu dobija odgovor da je kreiran novi bucket pod nazivom “photos_2020” i on izgleda ovako:

200 OK

Objašenjenje za S3 bucket: Najjednostavnije rečeno S3 je servis za skladištenje na AWS-u, kao virtuelni disk na kome možemo da čuvamo različit sadržaj. (S3) Buckets nisu ništa drugo do obični folderi unutar S3 servisa tj. diska, koji nam služe da organizujemo sadržaj, baš kao što to radimo na našim računarima.


Najvažnije zapamtiti i naučiti:

  • IAM je globalni servis
  • IAM pruža centralizovanu kontrolu nad AWS nalogom
  • Root nalog ima potpun i neograničen pristup korisnicima
  • Glavne komponente IAM servisa su: Users, Groups, Roles i Policies
  • IAM User predstavlja krajnjeg korisnika koji upravlja cijelim ili samo jednim dijelom AWS-a
  • Više IAM korisnika čini jednu IAM grupu, IAM grupa ne može biti sačinjena od drugih IAM Grupa
  • IAM Role se koristi da se nekom identitetu (npr. AWS servisu) omogući pristup nekom AWS servisu
  • IAM Policies su zapravo dokumenta, koja daju ovlašćenja za upravljanje AWS-om
  • IAM Policy dokument je napisan u JSON-u

Kibernetička bezbjednost, cloud tehnologije i tech povezani blogovi, kreator Branko Petrović (2019 – 2024