Lekcja 1 · Dzień 2

AWS na produkcji, nie z tutoriala

JD wymaga płynności w VPC, IAM, ECS i EKS, Lambda, RDS oraz IAM Roles Anywhere. Ćwiczenie z raportu: narysuj multi-account layout dla fintechu z PCI i powiedz, co nie może wychodzić z PCI VPC.

Multi-account — najwyższa ściana segmentacji

AWS w whitepaperze o PCI DSS 4.0 mówi wprost: osobne konto to najsilniejsza granica segmentacji, jaką masz w chmurze. Zasoby w koncie A są logicznie izolowane od konta B nawet wewnątrz Organizations. SCP, IAM, billing — wszystko się rozdziela. Kompromis konta nie-PCI nie daje automatycznie IAM do CDE.

Dla fintechu kartowego, który w JD ma konta dev / staging / prod / PCI, rozsądny layout (zgodny z AWS Organizations + PCI scoping, nie z ich niepublicznym diagramem):

AWS Organizations ├── Management (root, billing, SCP) ← zero workloadów ├── Security / Identity OU │ ├── Identity (IAM Identity Center, IdP) │ └── Security tooling (GuardDuty admin, Security Hub) ├── Infrastructure OU │ ├── Shared services (DNS, CI runners?, obrazki) │ ├── Network (TGW / inspection VPC) │ └── Log archive (CloudTrail org, VPC Flow, Config) immutable ├── Workloads OU │ ├── Dev │ ├── Staging │ └── Prod-app ← aplikacja bez CHD └── PCI / CDE OU ← osobne SCP, osobny trail └── PCI-prod ← issuance, PAN, autoryzacja (ew. PCI-stage tylko jeśli audytor się zgodzi na kopię CDE)

CI identity: GitHub OIDC provider i role do assume — zwykle w każdym koncie docelowym, albo centralnie z assume-role w dół. Long-lived keys w GitHub Secrets to anty-wzorzec; JD tego nie mówi wprost, ale „IAM Roles Anywhere i cert-based auth” plus OIDC to ten sam temat: zero standing credentials.

SCP na PCI OU (przykłady, które warto umieć wymienić): zakaz tworzenia IAM user access keys, zakaz wyłączenia CloudTrail, zakaz publicznych S3/SG 0.0.0.0/0 na bazach, region allow-list, zakaz usuwania KMS z deletion window, GuardDuty on.

Design VPC, o którym mają usłyszeć

Zdanie, które brzmi jak produkcja „CDE ma własne konto i własne VPC. Z prod-app wchodzimy tylko PrivateLinkiem na konkretny port. Flow logi i DNS query logi idą do log-archive, którego PCI konto nie może skasować. Nie ma SSH. Break-glass to SSM na time-bound roli z approval.”

IAM: least privilege, role vs user, boundary, Roles Anywhere

Role vs user

Ludzie: IAM Identity Center (SSO), permission sets, krótkie sesje. Maszyny: role. IAM user z access key — wyjątek z expiry i ticketem, nie default. W PCI to często twardy zakaz (SCP).

Permission boundary

Maksimum, jakie tożsamość może sobie nadać, nawet jeśli ktoś jej przysłał *:*. Platforma daje product teamom rolę do self-service z boundary: „możesz tworzyć Lambdy i kolejki w swoim namespace, nie możesz ruszać KMS CDE ani IAM oprócz swoich ról”. To jest odpowiedź na ticket hell.

IAM Roles Anywhere — jest w wymaganiach JD

Problem: workload poza AWS (on-prem, partner, HSM, czasem self-hosted runner) potrzebuje AWS API, a nie chcesz wkładać długich kluczy.

Mechanizm (dokumentacja AWS):

  1. Wystawiasz trust anchor — AWS Private CA albo własna CA.
  2. Workload ma certyfikat X.509 podpisany przez tę CA.
  3. Credential helper woła Roles Anywhere, dostaje tymczasowe credsy (jak STS).
  4. Profil mapuje cert (CN/SAN, atrybuty) na IAM role.

To jest kuzyn GitHub OIDC: tam JWT od GitHuba, tu cert od CA. Oba zabijają long-lived keys. Na rozmowie rozróżnij:

GitHub Actions → AWSRoles Anywhere
Dowód tożsamościOIDC JWTX.509
Typowy use-caseCIPoza AWS: DC, partner, urządzenie
TrustIdP token.actions.githubusercontent.comTrust anchor CA
Waruneksub = repo/branch/environmentatrybuty certu

Jeśli nie używałeś Roles Anywhere: powiedz analogię (IRSA w EKS, instance profile, OIDC) i zaprojektuj. Nie zmyślaj pól API.

ECS vs EKS — kiedy co

Oni mają ECS dziś i migrują na EKS. Musisz umieć koszty, networking, rolling deploy, secrets — bez religii.

ECS (Fargate/EC2)EKS
Control planeAWS, prawie niewidocznyPłacisz ~0,10 USD/h za cluster + twoja operacja (upgrade, addony)
Networkingawsvpc: ENI per task, SG per task. Proste, drogie przy gęstości.VPC CNI (pod = IP z VPC) albo overlay. NetworkPolicy, SG for pods.
DeployRolling z minimumHealthyPercent / circuit breaker. CodeDeploy blue/green opcjonalnie.Deployment/ReplicaSet, Argo/Flux, ingress. Więcej ruchomych części.
SecretsSSM/Secrets Manager → env/files w task defCSI driver, External Secrets, IRSA. Łatwiej o wyciek przez sidecar.
AutoscalingService auto scaling (CPU/ALB/custom)HPA + Karpenter/CA. Karpenter jest w raporcie jako temat operacyjny.
PCIMniej powierzchni (brak etcd, kubelet API). Łatwiejszy zakres.Więcej komponentów in-scope, chyba że CDE ma osobny cluster.
DevEx / rynekDobrze na 20 serwisów o podobnym kształcieSidecary, standard rynku, multi-tenant cells, hiring

Kiedy zostawić ECS/Lambda: crony, spikey workers, proste API bez sidecara, workload PCI, którego nie chcesz wkładać do wspólnego klastra. Kiedy EKS: jednolity deploy, service mesh/sidecary, autoscaling podów, platforma dla 20 zespołów. Szczegóły migracji: lekcja 4.

Lambda: cold start, concurrency, IAM do RDS, EventBridge

RDS: multi-AZ, backup, parameter groups, kto łączy się z PCI

Co nie może wychodzić z PCI VPC

To jest ćwiczenie z raportu. Lista, którą warto powiedzieć na głos:

Co może wychodzić: ztokenizowany PAN / last4, kwota, merchant ID, status autoryzacji, metryki bez payloadu, alert „auth_p99 > 200ms”.

Ćwiczenie (8 minut na głos)

Kartka. Narysuj: management, identity, log-archive, shared, prod-app, PCI. Dwie VPC, TGW albo PrivateLink, ALB tylko w app, RDS isolated w PCI. Powiedz trzy SCP i trzy rzeczy, które nie opuszczają CDE. Porównaj z whiteboardem.