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:
| Element | Co oznacza | Przykład |
|---|---|---|
| Effect | Allow (pozwól) lub Deny (zabroń) | "Effect": "Allow" |
| Action | Jakie operacje | "Action": "s3:GetObject" |
| Resource | Na jakich zasobach | "Resource": "arn:aws:s3:::my-bucket/*" |
| Condition | Dodatkowe 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:
- Explicit Deny - jeśli jakakolwiek polityka mówi Deny, to Deny. Koniec. Deny zawsze wygrywa.
- Explicit Allow - jeśli jakakolwiek polityka mówi Allow (i nie ma Deny), to Allow.
- Default Deny - jeśli żadna polityka nie mówi Allow, domyślnie jest Deny.
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.
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.
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 EC2arn: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ą.
- 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
User ma dwie polityki: jedna Allow na s3:DeleteObject, druga Deny na s3:DeleteObject. Jaki jest wynik?
Nowo utworzony IAM User bez żadnych polityk próbuje uruchomić instancję EC2. Co się stanie?
Który typ polityki IAM jest rekomendowany do wielokrotnego użytku?