Przejdź do treści
BigTree108

Chmura Azure i DevOps

Infrastruktura jako kod, pipeline'y wdrażające kilka razy dziennie, bazowy poziom bezpieczeństwa w modelu „odmowa domyślna” (deny-by-default) i przewidywalny rachunek. Tak budujemy środowisko chmurowe i tak prowadzimy własne.

Sama praca DevOps

  • Pipeline'y. Build, testy, skan bezpieczeństwa i wdrożenie w GitHub Actions, z federacyjnymi poświadczeniami zamiast przechowywanych sekretów i każdą akcją przypiętą przez hash.
  • Infrastruktura jako kod. Terraform dla wszystkiego, sprawdzany jako plan przed zastosowaniem, z cyklicznym wykrywaniem dryfu konfiguracji, które zgłasza, co ktoś zmienił ręcznie.
  • Wdrażanie baz danych. Zmiany schematu jako wersjonowane migracje uruchamiane w pipeline, więc wdrożenie, które dostarcza kod bez jego schematu, nie może się zdarzyć.
  • Monitoring i alerty. Logi, metryki i ślady w jednym obszarze roboczym, z alertami, które docierają do człowieka tylko wtedy, gdy programista może coś z nimi zrobić.
  • Kontrola kosztów. Dobrane do potrzeb poziomy usług, rozliczanie według zużycia tam, gdzie obciążenie skacze, i miesięczny rachunek, który ktoś naprawdę czyta.

W czym budujemy

Każdy zasób jest deklarowany w Terraform i wdrażany z GitHub Actions z federacyjnymi poświadczeniami. Nic nie jest „sklikane” w portalu, ani w naszych środowiskach, ani w Państwa.

  • Obliczenia

    Azure Functions na izolowanym workerze .NET 10 dla API i 40 zadań cyklicznych; Container Apps Jobs uruchamiają wdrożenia baz danych i migracje EF Core.

  • Dane

    Azure SQL z zabezpieczeniami na poziomie wierszy i kolumnami Always Encrypted na kluczach zarządzanych przez klienta w Key Vault; Blob Storage dla dokumentów i podpisanych plików PDF.

  • Frontendy

    Dwie aplikacje Static Web Apps, portal i ta strona, obie serwowane z restrykcyjną polityką Content Security Policy i prerenderowane tam, gdzie roboty indeksujące potrzebują HTML.

  • Tożsamość

    Entra ID dla osób i grup, tożsamości zarządzane przypisane przez użytkownika dla każdego obciążenia, OIDC z GitHub Actions. Brak długo żyjących poświadczeń w pipeline.

  • Obserwowalność

    Application Insights i Log Analytics z regułami alertów docierającymi do zespołu jako wiadomości w Teams. Alertami stają się tylko sygnały, z którymi programista może coś zrobić.

  • Zarządzanie i zgodność

    Polityki grup zasobów, blokady zarządzania, ochrona przed czyszczeniem (purge protection) i ustawienia diagnostyczne, wszystko deklarowane w Terraform, z uzasadnieniem przy każdej regule.

Dyscyplina kosztowa

Nasze zasady inżynieryjne układają priorytety w stałej kolejności: najpierw koszt, potem bezpieczeństwo, potem nowoczesność, potem wydajność. Pułap kosztów ustalamy, zanim narysujemy architekturę, i każdą decyzję projektową sprawdzamy względem niego. W praktyce oznacza to rozliczanie według zużycia zamiast stale działających serwerów tam, gdzie obciążenie skacze, poziom bazy danych dobrany do potrzeb, a nie ten rekomendowany przez dostawcę, oraz alerty zbudowane z usług, które już są w subskrypcji, zamiast płatnego produktu do dyżurów.

Bazowy poziom bezpieczeństwa

  • Zapory domyślnie odmawiają dostępu; do SQL można dotrzeć tylko z podsieci Functions.
  • Sekrety istnieją tylko w Key Vault i są odczytywane przez tożsamości zarządzane.
  • Kolumny z danymi osobowymi i finansowymi są chronione przez Always Encrypted, więc nawet administrator bazy danych nie może ich odczytać.
  • Akcje i obrazy kontenerów są przypięte przez hash; aktualizacje zależności przychodzą jako recenzowane pull requesty, a ostrzeżenie bezpieczeństwa jest bezwarunkowym powodem do aktualizacji.
  • CodeQL działa przy każdym pushu, plany Terraform są walidowane przed zastosowaniem, a dryf konfiguracji jest wykrywany według harmonogramu.

Nasz dorobek w chmurze

Zbudowano ponad 20 pipeline'ów CI/CD, wydania co dwa tygodnie zamieniono w codzienne wdrożenia, czas wydania skrócono z czterech godzin do 25 minut, a wydatki na Azure na jednej platformie zmniejszono o 30 procent. Liczby z naszej historii realizacji.

Rekrutujemy pod to, a nie improwizujemy

DevOps to rola, pod którą rekrutujemy świadomie: w naszej historii ofert pracy był inżynier DevOps i osobna osoba prowadząca rozmowy techniczne z DevOps, więc kandydatów ocenia ktoś, kto wykonuje tę pracę, a nie generalista czytający listę kontrolną.

Chcą Państwo mieć środowisko Azure w kodzie i mniejszy rachunek?

Prosimy o przesłanie dostępu tylko do odczytu do subskrypcji lub opisu tego, co gdzie działa. Pisemną ocenę i plan otrzymają Państwo w ciągu jednego dnia roboczego.