Polityki IAM: język uprawnień AWS

Wiesz już, że IAM kontroluje dostęp. Ale jak dokładnie mówisz AWS „pozwól Janowi czytać z S3, ale nie pozwól mu nic usuwać"? Przez polityki IAM (IAM Policies), czyli dokumenty w formacie JSON.

Nie musisz pisać ich od zera (AWS ma setki gotowych), ale musisz umieć je czytać. Na egzaminie dostajesz fragment polityki i pytanie „co ta polityka pozwala/zabrania?".

Anatomia polityki IAM

Każda polityka składa się z jednego lub więcej statements (deklaracji). Każdy statement ma:

ElementCo oznaczaPrzykład
EffectAllow (pozwól) lub Deny (zabroń)"Effect": "Allow"
ActionJakie operacje"Action": "s3:GetObject"
ResourceNa jakich zasobach"Resource": "arn:aws:s3:::my-bucket/*"
ConditionDodatkowe warunki (opcjonalne)Np. tylko z określonego IP

Przykłady polityk

Pozwala czytać obiekty z jednego konkretnego bucketa S3:

{"Version": "2012-10-17", "Statement": [{"Effect": "Allow", "Action": ["s3:GetObject", "s3:ListBucket"], "Resource": ["arn:aws:s3:::my-app-data", "arn:aws:s3:::my-app-data/*"]}]}

Zwróć uwagę: dwa zasoby. Jeden dla samego bucketa (ListBucket), drugi dla obiektów w nim (GetObject z /*).

Pełny dostęp do EC2 (ale TYLKO do EC2):

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

Gwiazdka (*) w Action oznacza „wszystkie operacje EC2". Gwiazdka w Resource oznacza „wszystkie zasoby EC2". Ten user może tworzyć, usuwać, zmieniać instancje, VPC, security groups itd.

Zabroń działania poza regionem eu-central-1:

{"Version": "2012-10-17", "Statement": [{"Effect": "Deny", "Action": "*", "Resource": "*", "Condition": {"StringNotEquals": {"aws:RequestedRegion": "eu-central-1"}}}]}

Ta polityka używa Condition. Jeśli ktoś próbuje uruchomić cokolwiek poza Frankfurtem, dostanie Deny. Świetne do compliance (np. GDPR).

Jak AWS ewaluuje polityki?

Gdy user próbuje wykonać akcję, AWS sprawdza polityki w określonej kolejności:

  1. Explicit Deny - jeśli jakakolwiek polityka mówi Deny, to Deny. Koniec. Deny zawsze wygrywa.
  2. Explicit Allow - jeśli jakakolwiek polityka mówi Allow (i nie ma Deny), to Allow.
  3. Default Deny - jeśli żadna polityka nie mówi Allow, domyślnie jest Deny.
⚠️ EXAM ALERT
Zapamiętaj złotą zasadę: Deny ZAWSZE wygrywa z Allow. Jeśli user ma w jednej polityce Allow na s3:DeleteObject, ale w innej Deny na s3:DeleteObject, wynik = Deny. To jedno z najczęstszych pytań na egzaminie.

Rodzaje polityk

  • AWS Managed Policies - gotowe polityki od AWS (np. AmazonS3ReadOnlyAccess). Wygodne, ale szerokie.
  • Customer Managed Policies - Twoje własne polityki. Bardziej precyzyjne, rekomendowane.
  • Inline Policies - przypisane bezpośrednio do jednego usera/grupy/roli. Nie da się ich reużyć. Używaj tylko w wyjątkowych sytuacjach.
🏢 Scenariusz: Junior developer

Nowy junior dołącza do zespołu. Potrzebuje:

  • Odczytu logów z S3
  • Uruchamiania i zatrzymywania (nie tworzenia/usuwania!) instancji EC2
  • Przeglądania metryk w CloudWatch

Zamiast dawać mu AdministratorAccess (co wielu robi „dla wygody"), tworzysz customer managed policy z dokładnie tymi 3 uprawnieniami. Jeśli junior potrzebuje czegoś więcej, zgłasza request i dodajesz konkretną akcję. To jest least privilege w praktyce.

💡 Pro tip
AWS Policy Simulator (policysim.aws.amazon.com) pozwala testować polityki bez ryzyka. Możesz sprawdzić „czy user X z polityką Y może wykonać akcję Z?" zanim zastosujesz politykę na produkcji.

W politykach używasz ARN do identyfikacji zasobów. Format ARN:

arn:aws:service:region:account-id:resource

Przykłady:

  • arn:aws:s3:::my-bucket - bucket S3 (region i account pusty, bo S3 jest globalne)
  • arn:aws:ec2:eu-central-1:123456789:instance/i-abc123 - konkretna instancja EC2
  • arn:aws:iam::123456789:user/jan - user IAM (IAM jest globalne, więc region pusty)

Na egzaminie nie musisz znać ARN-ów na pamięć, ale musisz umieć je czytać i rozumieć, do czego się odnoszą.

🧠 Podsumowanie
  • Polityka IAM = dokument JSON z Effect, Action, Resource
  • Deny zawsze wygrywa z Allow
  • Domyślnie wszystko jest zablokowane (default deny)
  • 3 typy polityk: AWS Managed, Customer Managed, Inline
  • ARN = unikalne ID zasobu w AWS
  • Policy Simulator pozwala testować polityki bezpiecznie
🧪 Sprawdź się

User ma dwie polityki: jedna Allow na s3:DeleteObject, druga Deny na s3:DeleteObject. Jaki jest wynik?

A Deny (Deny zawsze wygrywa)
B Allow (Allow ma priorytet)
C Zależy, która polityka była pierwsza
Explicit Deny ZAWSZE wygrywa z Allow, niezależnie od kolejności. To fundamentalna zasada ewaluacji polityk IAM.

Nowo utworzony IAM User bez żadnych polityk próbuje uruchomić instancję EC2. Co się stanie?

A Uruchomi instancję (nowi userzy mają pełny dostęp)
B Dostanie błąd „Access Denied"
C AWS zapyta admina o zgodę
Default Deny! Nowy user bez polityk nie ma żadnych uprawnień. Musisz explicite przyznać uprawnienia przez politykę.

Który typ polityki IAM jest rekomendowany do wielokrotnego użytku?

A Inline Policy
B Root Policy
C Customer Managed Policy
Customer Managed Policies to polityki tworzone przez Ciebie, które możesz przypisywać do wielu userów, grup i ról. Inline policies są przypisane na stałe do jednego podmiotu i nie da się ich reużyć.