Modul 11 — Cloud platformy

53. AWS základy: EC2, S3, IAM

První kroky v Amazon Web Services — virtuální servery EC2, objektové úložiště S3 a systém oprávnění IAM, na kterém stojí bezpečnost celého účtu.

Odhadovaná délka studia: 55 minut · Stav: nehotovo

Technologie: AWS

Úvod a kontext

V předchozích lekcích jsme probrali obecné principy cloud computingu a
modely IaaS/PaaS/SaaS. Amazon Web Services (AWS) je nejrozšířenější
veřejný cloud a dobrým vstupním bodem pro pochopení toho, jak se
abstraktní principy promítají do konkrétní služby. Tato lekce se
soustředí na tři služby, se kterými se setká téměř každý DevOps
inženýr pracující s AWS: EC2 (virtuální servery), S3 (objektové
úložiště) a IAM (řízení přístupu a oprávnění).

Teorie

EC2 — Elastic Compute Cloud

EC2 poskytuje virtuální servery ("instance") na vyžádání. Klíčové
pojmy:

  • AMI (Amazon Machine Image) — šablona s operačním systémem a
    předinstalovaným softwarem, ze které se instance spouští.
  • Instance type — velikost stroje (počet vCPU, RAM) — např.
    t3.micro (malý, burstable), m5.large (obecné použití),
    c5.xlarge (výpočetně orientovaný).
  • Security Group — virtuální firewall na úrovni instance, definuje
    povolený příchozí a odchozí provoz (podrobněji v příští lekci o
    síťování).
  • Key pair — SSH klíč, kterým se instance při vytvoření "osadí"
    pro pozdější přihlášení bez hesla.
  • EBS (Elastic Block Store) — perzistentní diskový svazek připojený
    k instanci; přežívá i vypnutí a smazání instance, pokud to tak
    nastavíte.

Instance lze zastavit (přestanete platit za výpočet, ale ne za
připojený disk) nebo ukončit (terminate — instance i její dočasná
data zaniknou).

S3 — Simple Storage Service

S3 je objektové úložiště — neukládá soubory do adresářové struktury
jako klasický souborový systém, ale jako objekty (data + metadata)
uvnitř plochých kontejnerů zvaných buckets. Typické vlastnosti:

  • Bucket má globálně jedinečný název v rámci celého AWS.
  • Objekty se adresují klíčem (key), např. logs/2024/01/app.log
    vypadá to jako cesta, ale interně je to jen řetězec.
  • S3 nabízí několik tříd úložiště podle frekvence přístupu —
    STANDARD (časté přístupy), STANDARD_IA (méně časté),
    GLACIER (archivace, pomalá obnova, nejlevnější).
  • Přístup k bucketu se řídí bucket policy (JSON dokument) a/nebo
    IAM oprávněními — veřejně čitelný bucket je časté zdrojové riziko
    úniku dat, proto AWS defaultně blokuje veřejný přístup a je nutné ho
    vědomě povolit.

IAM — Identity and Access Management

IAM řídí, kdo (identita) co (akce) na čem (zdroj) smí
udělat v rámci AWS účtu. Základní stavební kameny:

  • User — identita jednotlivce (osoby nebo služby) s vlastními
    přihlašovacími údaji.
  • Group — sada uživatelů se sdílenými oprávněními.
  • Role — sada oprávnění, kterou si dočasně "obléká" jiná identita
    (uživatel, EC2 instance, jiná AWS služba) — role se nepřihlašuje
    heslem, ale přebírá se (assume role) a je preferovaný způsob, jak
    udělovat práva službám (EC2 instanci nikdy nedávejte pevné
    přístupové klíče, vždy roli).
  • Policy — JSON dokument popisující konkrétní povolené nebo
    zakázané akce, např.:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:GetObject", "s3:PutObject"],
      "Resource": "arn:aws:s3:::muj-bucket/*"
    }
  ]
}

Klíčový bezpečnostní princip je least privilege — každé identitě
(uživateli, roli, službě) udělit jen ta oprávnění, která nutně
potřebuje pro svou práci, ne širší.

Praktický příklad

Spuštění EC2 instance a práce s S3 přes AWS CLI (nástroj aws,
nakonfigurovaný přístupovými klíči nebo profilem):

# spuštění instance t3.micro s daným AMI a klíčem
aws ec2 run-instances \
  --image-id ami-0abcdef1234567890 \
  --instance-type t3.micro \
  --key-name muj-klic \
  --security-group-ids sg-0123456789abcdef0 \
  --count 1

# výpis běžících instancí
aws ec2 describe-instances \
  --filters "Name=instance-state-name,Values=running" \
  --query "Reservations[].Instances[].[InstanceId,PublicIpAddress]"

# vytvoření S3 bucketu a nahrání souboru
aws s3 mb s3://muj-projekt-zalohy-2024
aws s3 cp zaloha.tar.gz s3://muj-projekt-zalohy-2024/zalohy/

# vytvoření IAM role pro EC2 s přístupem jen ke čtení z konkrétního bucketu
aws iam create-role \
  --role-name ec2-cteni-s3 \
  --assume-role-policy-document file://trust-policy.json

aws iam put-role-policy \
  --role-name ec2-cteni-s3 \
  --policy-name cteni-bucket \
  --policy-document file://s3-read-policy.json

trust-policy.json určuje, kdo smí roli přebrat (v tomto případě
služba EC2):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": { "Service": "ec2.amazonaws.com" },
      "Action": "sts:AssumeRole"
    }
  ]
}

Instance spuštěná s touto rolí pak může volat S3 API bez jakýchkoliv
pevně uložených přístupových klíčů na disku — AWS SDK a CLI na
instanci si dočasné přihlašovací údaje odvodí automaticky z role.

Shrnutí

EC2 poskytuje virtuální servery řízené přes AMI, instance typy,
security groups a EBS disky. S3 je objektové úložiště organizované do
bucketů s klíči místo adresářů, s několika třídami dostupnosti podle
ceny a frekvence přístupu. IAM řídí oprávnění pomocí uživatelů, skupin,
rolí a JSON policy dokumentů — klíčovým principem je least privilege a
preferování rolí (dočasných oprávnění) před pevnými přístupovými klíči,
zvlášť pro služby jako EC2.

Kontrolní otázky

  1. Jaký je rozdíl mezi zastavením (stop) a ukončením (terminate)
    EC2 instance z hlediska dat a nákladů?
  2. Proč se S3 označuje jako objektové úložiště a ne jako souborový
    systém?
  3. Co znamená princip least privilege a jak se v IAM prakticky
    uplatňuje?
  4. Mini cvičení: napište IAM policy JSON, který povolí identitě pouze
    akci s3:GetObject (ne zápis ani mazání) na bucketu
    verejne-dokumenty.

Lekce na sebe nejsou zamčené — libovolnou lekci můžete otevřít i označit jako hotovou v jakémkoliv pořadí.