Rozmowa · ćwicz na głos, potem czytaj
Pytania, które mogą paść
Siedem pytań z raportu, z pełnymi odpowiedziami. Najpierw zamknij oczy i odpowiedz. Potem porównaj. Diagram do pytania 1 jest też na whiteboardzie.
Pytanie 1
Zaprojektuj AWS account + network model pod karty + PCI.
Cel pytania: czy myślisz zakresem CDE, nie „jedną VPC z public/private”, i czy umiesz powiedzieć, co nie wychodzi.
Odpowiedź na głos (8 minut)
„Dzielę po granicy danych kartowych, nie po zespołach. AWS Organizations, SCP na OU.”
- Konta. Management tylko billing/SCP. Identity (SSO). Log-archive (org trail, Object Lock). Shared/network (TGW, inspection). Dev, staging, prod-app (bez CHD). Osobne konto PCI-prod na CDE. Staging CDE tylko jeśli audytor uzna kopię za konieczną — default: nie klonuję PAN na staging, tylko tokeny.
- Sieć. Prod-app i PCI to osobne VPC. Między nimi nie peering „na wszystko”, tylko PrivateLink na konkretny port (np. tokenize/authorize). Public subnet wyłącznie pod ALB w app. RDS CDE w isolated subnet bez 0.0.0.0/0. Egress CDE przez proxy allow-list (Visa, internal repo). VPC endpoints: STS, KMS, S3, ECR, Logs.
- SCP na PCI: zakaz access keys, zakaz wyłączenia Traila, region allow-list, zakaz publicznych SG/S3, GuardDuty on.
- Tożsamość. Ludzie przez Identity Center, krótkie sesje, MFA. CI: OIDC,
subper repo i environment. Workload poza AWS: Roles Anywhere. Zero standing keys. - Nie wychodzi z PCI VPC: PAN/SAD, materiał kluczy, interaktywny SSH, trasa z dev, obrazki z Docker Huba, logi z payloadem karty. Wychodzi: token, last4, metryki, trail do archive.
Pytanie 2
Jak zrobisz reusable Terraform module na ECS/EKS service, z którego korzysta 20 teamów?
Cel: platform as a product. Kontrakt, wersje, bezpieczne defaulty, migracja runtime.
Odpowiedź
- Interfejs jeden, runtime za flagą. Inputy:
name,image_digest,cpu,memory,port,healthcheck,env,autoscaling,runtime = ecs|eks. Outputy: SG, log group, role ARN, DNS/URL. Caller’s PR nie zawiera YAML-i K8s ani surowego task def. - Defaulty: private, encryption, deletion protection w prod, required tags, IRSA/task role z boundary, datadog sidecar opcjonalny ale SLO label obowiązkowy.
- Czego nie ma w API:
open_world,skip_logs, surowa IAM policy. Wyjątki: osobny obiektexceptionszexpires_at. - Wersjonowanie: semver w registry, changelog, test apply na sandbox przy publikacji modułu (Spacelift to robi). Callers pin
~> 3.2. Major = breaking (np. zmiana outputu). - Migracja ECS→EKS: v3.x wspiera oba. Zespół zmienia jedną zmienną, ten sam obraz. Po soak usuwam ECS z modułu w v4. Nie 20 forków.
- Governance: Spacelift policy na plan (no destroy in prod without approval, no 0.0.0.0/0, pci tag). Dokumentacja: 1 strona „jak dodać serwis” + przykładowy caller.
Sukces: ticket „postawcie nam serwis” znika. Zostaje PR z values.
Pytanie 3
Pipeline pada tylko na jednym serwisie w matrixie — jak idziesz po kolei?
Cel: diagnostyka, nie „zrestartuję runner”. Oni mają 20+ Java/Kotlin.
Odpowiedź — kolejka
- Zawęź blast. Która komórka:
service=cards, java=21, env=staging? Czy fail-fast ukrył inne? (u nas fail-fast false). - Klasyfikuj błąd. Kompilacja / test / cache / auth OIDC / push ECR / deploy. Logi joba, nie zgadywanie.
- Czy tylko CI? Odpal ten sam Gradle na czystym kontenerze z tym samym JDKiem. Jeśli lokalnie pada — to nie pipeline, to kod albo testdane. Oddaj productowi z reprodukcją.
- Jeśli tylko CI:
- cache: job z wyłączonym cache; porównaj. Podejrzenie: dirty Gradle cache z innego serwisu w monorepo.
- OIDC:
sts get-caller-identityw logu. Czy trustsubobejmuje to repo? Czy environment name się rozjechał? - sekrety: brak
CODEARTIFACT/ cert do Nexus tylko w tym repo. - matrix exclude źle napisany — cards na 17, którego nie ma.
- flaky Testcontainers / port bind / czas. Szukaj w historii „pass po rerun”.
- Nie zostawiaj rerun jako fix. Albo wyłącz cache dla tego serwisu, albo napraw test isolation, albo popraw trust policy. W runbooku: jak zabić cache, jak odczytać OIDC claims.
Pytanie 4
Jak zmigrujesz 20 mikroserwisów z ECS na EKS bez tygodnia downtime i bez 20 snowflake’ów?
Skrót z lekcji 4, w formie odpowiedzi:
- Nie otwieram 20 projektów. Otwieram factory: jeden chart/moduł, values per serwis, jeden pipeline z
runtime. - Data plane (RDS, Kafka) zostaje. Zmienia się compute. Żadnego dual-write.
- Ten sam image digest na ECS i EKS.
- Kolejność: bezstanowe non-PCI → consumery Kafka → (osobna decyzja) CDE na osobnym klastrze.
- Per serwis: shadow → 5% → 25% → 100% na ALB. Rollback = waga z powrotem na ECS. Soak dni, nie godzin, przy settlement.
- Stop: SLO, nie data w Jira.
- PCI: osobny cluster, nie namespace na wspólnym. Jeśli nie robiłem EKS na prod — mówię to i zostawiam CDE na ECS dłużej.
Pytanie 5
Product team chce wyjątek IAM „na już”. Co robisz?
Cel: Own it + Be kind bez bycia helpdeskiem. PCI.
Odpowiedź
„Nie mówię nie z urzędu i nie otwieram *:* na Slacku.”
- 15 minut na zrozumienie job-to-be-done. Czytają z S3? Wołają API partnera? Debugują staging? Często potrzeba jest „read na staging”, a prośba brzmi „admin na prod”.
- Ścieżka szczęśliwa: istniejący moduł / permission set / time-bound assume-role z session name = ticket. Self-service, bez mnie.
- Jeśli naprawdę wyjątek:
- najwęższa akcja i zasób, nie
*, Condition: MFA, IP/VPC, time,- expiry (24h / 7 dni) w kodzie (notatka +
aws_iam_policyz datą w nazwie albo scheduled revoke Lambda), - nie w CDE, jeśli da się na kopii/tokenie,
- PR, nie klik. Spacelift policy może wymagać approval security przy
iam:*.
- najwęższa akcja i zasób, nie
- Po fakcie: jeśli ten wyjątek wraca — to brakująca capability platformy. Robię ją. Ticket volume ma spadać.
- Czego nie zrobię „na już”: long-lived key, public SG do RDS, wyłączenie Traila, dostęp z laptopa do PCI VPC, wklejenie PAN do Cursora.
Pytanie 6
Jakie SLO postawisz na platformę CI i na API gateway?
Nie zmyślaj 99.99 wszędzie. Pokaż, że SLO jest narzędziem, nie plakatem.
| CI platform | API gateway / auth path | |
|---|---|---|
| SLI | % jobów, które startują < 2 min; % fail z powodu infra (OIDC, disk, runner), nie testów | % requestów 2xx w budżecie latency (np. p99 < 200–300 ms na autoryzacji, skalibruj z nimi) |
| Okno | 30 dni, osobno godziny pracy vs. weekend — CI może mieć niższy cel w nocy | 30 dni, 24/7, bo karty |
| SLO (rząd) | 99.0–99.5% infra-success. GitHub.com nie jest pod Twoją kontrolą — nie obiecuj 99.99 | 99.9%+ na ścieżce płatności. 43 min/mies. to już dużo pieniędzy |
| Page | Main/prod deploy leży; kolejka runnerów > N minut. Nie: flaky na feature branch | Burn rate szybki na tym SLI. Composite, jeden pager na fire |
| Gdy budżet spalony | Freeze nowości w reusable workflows | Freeze feature deploy na ścieżce auth |
„Dokładne liczby ustaliłbym z error budgetem biznesu i z historią on-call. Dziś nie znam Waszego p99.” To jest dorosłe. Potem podajesz rząd i alert policy.
Pytanie 7
Opowiedz o najgorszym incydencie infra.
Tu nie ma uniwersalnej treści — jest uniwersalna forma. Wypełnij w STAR przed rozmową. Na głos:
- Sytuacja (30 s): system, skala, objaw, impact (klienci / $ / czas).
- Twój call (45 s): co zdecydowałeś Ty, nie zespół. Rollback vs. patch vs. scale vs. revoke.
- Trade-off (20 s): np. dłuższy incident vs. ryzyko złego fixa na CDE.
- Wynik (20 s): MTTR, $ , ile osób obudzonych.
- System po (30 s): monitor, guardrail, runbook. Bez „pracowaliśmy całą noc”.
Dodatkowe, które spadają z JD
- Czym różni się IAM Roles Anywhere od GitHub OIDC? → lekcja AWS.
- Jak czytasz terraform plan, w którym jest replace na KMS? → stop, Terraform.
- Karpenter vs managed node group na CDE? → EKS.
- Jak używasz Cursora wobec sekretów? → AI.