Udostępnij za pośrednictwem


Procedury operacyjne dla obciążeń o znaczeniu krytycznym na platformie Azure

Niezawodne i skuteczne operacje muszą być oparte na zasadach automatyzacji wszędzie tam, gdzie to możliwe , i konfiguracji jako kodu. Takie podejście wymaga znacznych inwestycji inżynieryjnych w procesy DevOps. Zautomatyzowane potoki służą do wdrażania artefaktów kodu aplikacji i infrastruktury. Zalety tego podejścia obejmują spójne i dokładne wyniki operacyjne przy minimalnych ręcznych procedurach operacyjnych.

W tym obszarze projektowym opisano sposób implementowania skutecznych i spójnych procedur operacyjnych.

Ważne

Ten artykuł jest częścią serii obciążeń o znaczeniu krytycznym dla platformy Azure Well-Architected Framework . Jeśli nie znasz tej serii, zalecamy rozpoczęcie od tematu Co to jest obciążenie o znaczeniu krytycznym?.

Procesy DevOps

Metodyka DevOps łączy procesy programistyczne i operacyjne oraz zespoły w jedną funkcję inżynieryjną. Obejmuje cały cykl życia aplikacji i używa automatyzacji i narzędzi DevOps do przeprowadzania operacji wdrażania w szybki, wydajny i niezawodny sposób. Procesy DevOps obsługują i utrzymują ciągłą integrację i ciągłe dostarczanie (CI/CD), jednocześnie wspierając kulturę ciągłego ulepszania.

Zespół DevOps dla aplikacji o kluczowym znaczeniu musi być odpowiedzialny za następujące zadania:

  • Tworzenie zasobów aplikacji i infrastruktury oraz zarządzanie nimi za pośrednictwem automatyzacji ciągłej integracji/ciągłego wdrażania.
  • Monitorowanie i obserwowanie aplikacji.
  • Kontrola dostępu oparta na rolach (RBAC) i zarządzanie tożsamościami na platformie Azure dla składników aplikacji.
  • Zarządzanie siecią dla składników aplikacji.
  • Zarządzanie kosztami dla zasobów aplikacji.

Usługa DevSecOps rozszerza model DevOps, integrując monitorowanie zabezpieczeń, inspekcje aplikacji i zapewnianie jakości dzięki programowaniu i operacjom w całym cyklu życia aplikacji. Zespoły DevOps są potrzebne w scenariuszach wymagających zabezpieczeń i wysoce regulowanych, aby zapewnić włączenie zabezpieczeń w całym cyklu życia programowania, a nie na określonym etapie wydania lub bramie.

Zagadnienia dotyczące projektowania

  • Proces wydawania i aktualizacji. Unikaj ręcznych procesów zmiany składników aplikacji lub podstawowej infrastruktury. Procesy ręczne mogą prowadzić do niespójnych wyników.

  • Zależności od centralnych zespołów IT. Procesy DevOps mogą być trudne do zastosowania, gdy istnieją twarde zależności od scentralizowanych funkcji, ponieważ te zależności uniemożliwiają kompleksowe operacje.

  • Zarządzanie tożsamościami i dostępem. Zespoły DevOps mogą rozważyć szczegółowe role RBAC platformy Azure dla różnych funkcji technicznych, takich jak AppDataOps na potrzeby zarządzania bazami danych. Stosowanie modelu zerowego zaufania w rolach DevOps.

Zalecenia dotyczące projektowania

  • Zdefiniuj ustawienia konfiguracji i aktualizacje jako kod. Zastosuj zarządzanie zmianami za pomocą kodu, aby umożliwić spójne procesy wydawania i aktualizacji, w tym zadania, takie jak rotacja klucza lub wpis tajny i zarządzanie uprawnieniami. Używaj procesów aktualizacji zarządzanych przez potok, takich jak zaplanowane uruchomienia potoków, a nie wbudowanych mechanizmów automatycznej aktualizacji.

  • Nie używaj centralnych procesów ani potoków aprowizacji na potrzeby tworzenia wystąpienia zasobów aplikacji ani zarządzania nimi. W ten sposób wprowadzono zależności aplikacji zewnętrznych i dodatkowe wektory ryzyka, takie jak te skojarzone z hałaśliwymi scenariuszami sąsiadów.

    Jeśli musisz użyć scentralizowanych procesów aprowizacji, upewnij się, że wymagania dotyczące dostępności zależności są w pełni zgodne z wymaganiami krytycznymi dla misji. Zespoły centralne muszą zapewnić przejrzystość, aby można było osiągnąć całościową operacjonalizację kompleksowej aplikacji.

  • Dedykuj część zdolności inżynieryjnych podczas każdego przebiegu, aby zwiększyć podstawowe ulepszenia platformy i zwiększyć niezawodność. Zalecamy przydzielenie do tych ulepszeń 20–40 procent pojemności.

  • Opracuj typowe kryteria inżynieryjne, architektury referencyjne i biblioteki, które są zgodne z podstawowymi zasadami projektowania. Wymuszanie spójnej konfiguracji linii bazowej pod kątem niezawodności, zabezpieczeń i operacji za pomocą podejścia opartego na zasadach, które korzysta z Azure Policy.

    Możesz również użyć typowych kryteriów inżynieryjnych i skojarzonych artefaktów, takich jak zasady platformy Azure i zasoby programu Terraform, na potrzeby typowych wzorców projektowych, w innych obciążeniach w szerszym ekosystemie aplikacji w organizacji.

  • Stosowanie modelu zerowego zaufania w krytycznych środowiskach aplikacji. Używaj technologii takich jak Microsoft Entra Privileged Identity Management, aby zapewnić spójność operacji i wykonywanie ich tylko za pośrednictwem procesów ciągłej integracji/ciągłego wdrażania lub zautomatyzowanych procedur operacyjnych.

    Członkowie zespołu nie powinni mieć stałego dostępu do zapisu w żadnym środowisku. Warto wprowadzić wyjątki w środowiskach deweloperskich, aby ułatwić testowanie i debugowanie.

  • Definiowanie procesów awaryjnych na potrzeby dostępu just in time do środowisk produkcyjnych. Upewnij się, że konta ze szkła awaryjnego istnieją w przypadku poważnych problemów z dostawcą uwierzytelniania.

  • Rozważ użycie metodyki AIOps, aby stale ulepszać procedury operacyjne i wyzwalacze.

Operacje aplikacji

Zalecenia dotyczące projektowania aplikacji i platformy mają wpływ na procedury operacyjne. Istnieją również możliwości operacyjne zapewniane przez różne usługi platformy Azure, szczególnie w przypadku wysokiej dostępności i odzyskiwania.

Zagadnienia dotyczące projektowania

  • Wbudowane operacje usług platformy Azure. Usługi platformy Azure zapewniają wbudowane (domyślnie włączone) i konfigurowalne możliwości platformy, takie jak nadmiarowość strefowa i replikacja geograficzna. Niezawodność aplikacji zależy od tych operacji. Niektóre konfigurowalne możliwości wiążą się z dodatkowymi kosztami, takimi jak konfiguracja wdrożenia z wieloma zapisami dla usługi Azure Cosmos DB. Unikaj tworzenia niestandardowych rozwiązań, chyba że jest to absolutnie konieczne.

  • Operacyjny dostęp i czas wykonywania. Większość wymaganych operacji jest uwidaczniana i dostępna za pośrednictwem interfejsu API usługi Azure Resource Manager lub Azure Portal. Jednak niektóre operacje wymagają pomocy od inżynierów pomocy technicznej. Na przykład przywracanie z okresowej kopii zapasowej bazy danych usługi Azure Cosmos DB lub odzyskiwanie usuniętego zasobu może być wykonywane tylko przez inżynierów pomoc techniczna platformy Azure za pośrednictwem zgłoszenia do pomocy technicznej. Ta zależność może mieć wpływ na przestój aplikacji. W przypadku zasobów bezstanowych zalecamy ponowne wdrożenie zamiast czekać na próbę odzyskania usuniętych zasobów przez inżynierów pomocy technicznej.

  • Wymuszanie zasad. Azure Policy zapewnia ramy wymuszania i inspekcji punktów odniesienia zabezpieczeń i niezawodności w celu zapewnienia zgodności z typowymi kryteriami inżynieryjnymi dla aplikacji o znaczeniu krytycznym. W szczególności Azure Policy stanowi kluczową część płaszczyzny sterowania usługi Azure Resource Manager, uzupełniając kontrolę RBAC przez ograniczenie akcji, które mogą wykonywać autoryzowani użytkownicy. Za pomocą Azure Policy można wymuszać istotne konwencje zabezpieczeń i niezawodności w usługach platformy.

  • Modyfikowanie i usuwanie zasobów. Możesz zablokować zasoby platformy Azure , aby zapobiec ich modyfikacji lub usunięciu. Blokady powodują jednak narzut związany z zarządzaniem w potokach wdrażania. W przypadku większości zasobów zalecamy niezawodny proces kontroli dostępu opartej na rolach z ograniczonymi ograniczeniami, a nie blokadami zasobów.

Zalecenia dotyczące projektowania

  • Automatyzowanie procedur trybu failover. W przypadku aktywnego/aktywnego modelu użyj modelu kondycji i zautomatyzowanych operacji skalowania, aby upewnić się, że nie jest wymagana interwencja trybu failover. W przypadku modelu aktywnego/pasywnego upewnij się, że procedury trybu failover są zautomatyzowane lub co najmniej skodyfikowane w potokach.

  • Określanie priorytetów użycia natywnego skalowania automatycznego platformy Azure dla usług, które je obsługują. W przypadku usług, które nie obsługują natywnego skalowania automatycznego, użyj zautomatyzowanych procesów operacyjnych do skalowania usług. Użyj jednostek skalowania z wieloma usługami, aby osiągnąć skalowalność.

  • Używaj natywnych dla platformy możliwości tworzenia kopii zapasowych i przywracania, zapewniając, że są one zgodne z wymaganiami celu punktu odzyskiwania/celu punktu odzyskiwania i przechowywania danych. Zdefiniuj strategię długoterminowego przechowywania kopii zapasowych zgodnie z potrzebami.

  • Używaj wbudowanych funkcji do zarządzania certyfikatami SSL i odnawiania, takich jak te udostępniane przez usługę Azure Front Door.

  • W przypadku zespołów zewnętrznych ustanów proces odzyskiwania dla zasobów, które wymagają pomocy. Jeśli na przykład platforma danych jest niepoprawnie modyfikowana lub usuwana, metody odzyskiwania powinny być dobrze zrozumiałe, a proces odzyskiwania powinien zostać zainstalowany. Podobnie ustanów procedury zarządzania zlikwidowanymi obrazami kontenerów w rejestrze.

  • Przećwiczyć operacje odzyskiwania z wyprzedzeniem, w odniesieniu do zasobów nieprodukcyjnych i danych, w ramach standardowych przygotowań do ciągłości działalności biznesowej.

  • Identyfikowanie alertów krytycznych i definiowanie docelowych odbiorców i systemów. Zdefiniuj jasne kanały, aby dotrzeć do odpowiednich uczestników projektu. Wysyłaj tylko alerty z możliwością działania, aby uniknąć białego szumu i uniemożliwić uczestnikom operacyjnym ignorowanie alertów i brak ważnych informacji. Zaimplementuj ciągłe ulepszanie, aby zoptymalizować alerty i usunąć zaobserwowany biały szum.

  • Zastosuj nadzór oparty na zasadach i Azure Policy, aby zapewnić odpowiednie wykorzystanie możliwości operacyjnych i niezawodną konfigurację odniesienia we wszystkich usługach aplikacji.

  • Unikaj używania blokad zasobów w efemerycznych zasobach regionalnych. Zamiast tego polegaj na odpowiednim użyciu potoków kontroli dostępu opartej na rolach i ciągłej integracji/ciągłego wdrażania w celu kontrolowania aktualizacji operacyjnych. Blokady zasobów można zastosować, aby zapobiec usunięciu długotrwałych zasobów globalnych.

Zarządzanie aktualizacjami

Projekt o krytycznym znaczeniu zdecydowanie popiera zasadę efemerycznych zasobów aplikacji bezstanowych. W przypadku zastosowania tej zasady zazwyczaj można przeprowadzić aktualizację przy użyciu nowych potoków wdrażania i dostarczania standardowego.

Zagadnienia dotyczące projektowania

  • Dopasowanie do planów działania platformy Azure. Dostosuj obciążenie do planów działania platformy Azure, aby zasoby platformy i zależności środowiska uruchomieniowego były regularnie aktualizowane.

  • Automatyczne wykrywanie aktualizacji. Konfigurowanie procesów do monitorowania i automatycznego wykrywania aktualizacji. Użyj narzędzi, takich jak GitHub Dependabot.

  • Testowanie i walidacja. Przetestuj i zweryfikuj nowe wersje pakietów, składników i zależności w kontekście produkcyjnym przed wydaniem. Nowe wersje mogą zawierać zmiany powodujące niezgodność.

  • Zależności środowiska uruchomieniowego. Traktuj zależności środowiska uruchomieniowego, tak jak każda inna zmiana w aplikacji. Starsze wersje mogą wprowadzać luki w zabezpieczeniach i mogą mieć negatywny wpływ na wydajność. Monitoruj środowisko uruchomieniowe aplikacji i aktualizuj je.

  • Higiena składników i utrzymanie domu. Likwiduj lub usuń zasoby, które nie są używane. Na przykład monitoruj rejestry kontenerów i usuwaj stare wersje obrazów, których nie używasz.

Zalecenia dotyczące projektowania

  • Monitoruj te zasoby i aktualizuj je:

    • Platforma hostingu aplikacji. Na przykład należy regularnie aktualizować wersję platformy Kubernetes w usłudze Azure Kubernetes Service (AKS), szczególnie biorąc pod uwagę, że obsługa starszych wersji nie jest trwała. Należy również zaktualizować składniki uruchamiane na platformie Kubernetes, takie jak cert-manager i azure Key Vault CSI, i wyrównać je do wersji kubernetes w usłudze AKS.
    • Biblioteki zewnętrzne i zestawy SDK (.NET, Java, Python).
    • Dostawcy narzędzia Terraform.
  • Unikaj ręcznych zmian operacyjnych w celu zaktualizowania składników. Rozważ użycie zmian ręcznych tylko w sytuacjach awaryjnych. Upewnij się, że masz proces uzgadniania wszelkich ręcznych zmian z repozytorium źródłowym, aby uniknąć dryfu i cyklu problemu.

  • Ustanów zautomatyzowaną procedurę usuwania starych wersji obrazów z Azure Container Registry.

Zarządzanie wpisami tajnymi

Wygaśnięcie klucza, wpisu tajnego i certyfikatu jest częstą przyczyną awarii aplikacji. Zarządzanie wpisami tajnymi dla aplikacji o krytycznym znaczeniu musi zapewnić wymagane zabezpieczenia i zapewnić odpowiedni poziom dostępności, aby dostosować się do wymagań dotyczących maksymalnej niezawodności. Należy regularnie wykonywać rotację kluczy, wpisów tajnych i certyfikatów przy użyciu usługi zarządzanej lub w ramach zarządzania aktualizacjami oraz stosować procesy związane ze zmianami kodu i konfiguracji.

Wiele usług platformy Azure obsługuje uwierzytelnianie Microsoft Entra zamiast polegać na parametrach połączenia /kluczach. Użycie identyfikatora Microsoft Entra znacznie zmniejsza obciążenie operacyjne. Jeśli używasz rozwiązania do zarządzania wpisami tajnymi, należy ją zintegrować z innymi usługami, obsługiwać nadmiarowość strefową i regionalną oraz zapewnić integrację z identyfikatorem Microsoft Entra na potrzeby uwierzytelniania i autoryzacji. Key Vault udostępnia te funkcje.

Zagadnienia dotyczące projektowania

Istnieją trzy typowe podejścia do zarządzania wpisami tajnymi. Każde podejście odczytuje wpisy tajne z magazynu wpisów tajnych i wprowadza je do aplikacji w innym czasie.

  • Pobieranie w czasie wdrażania. Zaletą tego podejścia jest to, że rozwiązanie do zarządzania wpisami tajnymi musi być dostępne tylko w czasie wdrażania, ponieważ nie ma bezpośrednich zależności po tym czasie. Przykłady obejmują wstrzykiwanie wpisów tajnych jako zmiennych środowiskowych do wdrożenia platformy Kubernetes lub do wpisu tajnego kubernetes.

    Tylko jednostka usługi wdrażania musi mieć dostęp do wpisów tajnych, co upraszcza uprawnienia RBAC w systemie zarządzania wpisami tajnymi.

    Istnieją jednak wady tego podejścia. Wprowadza złożoność kontroli dostępu opartej na rolach w narzędziach DevOps w odniesieniu do kontrolowania dostępu jednostki usługi i w aplikacji w odniesieniu do ochrony pobranych wpisów tajnych. Ponadto korzyści zabezpieczeń rozwiązania do zarządzania wpisami tajnymi nie są stosowane, ponieważ takie podejście opiera się tylko na kontroli dostępu na platformie aplikacji.

    Aby zaimplementować aktualizacje lub rotację wpisów tajnych, należy przeprowadzić pełne ponowne wdrożenie.

  • Pobieranie aplikacji podczas uruchamiania. W tym podejściu wpisy tajne są pobierane i wstrzykiwane podczas uruchamiania aplikacji. Zaletą jest możliwość łatwego aktualizowania lub rotacji wpisów tajnych. Nie musisz przechowywać wpisów tajnych na platformie aplikacji. Aby pobrać najnowszą wartość, wymagane jest ponowne uruchomienie aplikacji.

    Typowe opcje magazynowania obejmują dostawcę usługi Azure Key Vault dla sterowników CSI magazynu wpisów tajnych i akv2k8s. Dostępne jest również natywne rozwiązanie platformy Azure, Key Vault ustawienia aplikacji, do których odwołuje się odwołanie.

    Wadą tego podejścia jest utworzenie zależności środowiska uruchomieniowego od rozwiązania do zarządzania wpisami tajnymi. Jeśli rozwiązanie do zarządzania wpisami tajnymi spowoduje awarię, składniki aplikacji, które są już uruchomione, mogą być w stanie kontynuować obsługę żądań. Każda operacja ponownego uruchomienia lub skalowania w poziomie prawdopodobnie spowoduje niepowodzenie.

  • Pobieranie środowiska uruchomieniowego. Pobieranie wpisów tajnych w czasie wykonywania z poziomu samej aplikacji jest najbezpieczniejszym podejściem, ponieważ nawet platforma aplikacji nigdy nie ma dostępu do wpisów tajnych. Aplikacja musi uwierzytelniać się w systemie zarządzania wpisami tajnymi.

    Jednak w przypadku tego podejścia składniki aplikacji wymagają bezpośredniej zależności i połączenia z systemem zarządzania wpisami tajnymi. Utrudnia to testowanie składników indywidualnie i zwykle wymaga użycia zestawu SDK.

Zalecenia dotyczące projektowania

  • Jeśli to możliwe, użyj Microsoft Entra uwierzytelniania, aby nawiązać połączenie z usługami zamiast używać parametrów połączenia lub kluczy. Użyj tej metody uwierzytelniania razem z tożsamościami zarządzanymi platformy Azure, aby nie trzeba było przechowywać wpisów tajnych na platformie aplikacji.

  • Skorzystaj z ustawienia wygaśnięcia w Key Vault i skonfiguruj alerty dotyczące nadchodzących wygasań. Wykonaj wszystkie aktualizacje klucza, wpisu tajnego i certyfikatu przy użyciu standardowego procesu wydania.

  • Wdróż wystąpienia Key Vault w ramach sygnatury regionalnej, aby ograniczyć potencjalny wpływ awarii pojedynczego sygnatury wdrożenia. Użyj oddzielnego wystąpienia dla zasobów globalnych. Aby uzyskać informacje o tych zasobach, zobacz typowy wzorzec architektury dla obciążeń o znaczeniu krytycznym.

  • Aby uniknąć konieczności zarządzania poświadczeniami jednostki usługi lub kluczami interfejsu API, użyj tożsamości zarządzanych zamiast jednostek usługi, aby uzyskać dostęp do Key Vault zawsze, gdy jest to możliwe.

  • Zaimplementuj wzorce kodowania, aby upewnić się, że wpisy tajne są ponownie pobierane po wystąpieniu błędu autoryzacji w czasie wykonywania.

  • Zastosuj w pełni zautomatyzowany proces rotacji kluczy, który jest uruchamiany okresowo w ramach rozwiązania.

  • Użyj powiadomienia o zbliżającym się wygaśnięciu klucza na platformie Azure Key Vault, aby uzyskać alerty dotyczące nadchodzących wygasań.

Zagadnienia specyficzne dla IaaS podczas korzystania z maszyn wirtualnych

Jeśli musisz użyć maszyn wirtualnych IaaS, niektóre procedury i praktyki opisane wcześniej w tym dokumencie mogą się różnić. Korzystanie z maszyn wirtualnych zapewnia większą elastyczność w opcjach konfiguracji, systemach operacyjnych, dostępie do sterowników, dostępie do systemu operacyjnego niskiego poziomu i rodzajach oprogramowania, które można zainstalować. Wady są zwiększone koszty operacyjne i odpowiedzialność za zadania, które są zwykle wykonywane przez dostawcę usług w chmurze podczas korzystania z usług PaaS.

Zagadnienia dotyczące projektowania

  • Poszczególne maszyny wirtualne nie zapewniają wysokiej dostępności, nadmiarowości strefy ani nadmiarowości geograficznej.
  • Poszczególne maszyny wirtualne nie są automatycznie aktualizowane po ich wdrożeniu. Na przykład wdrożona SQL Server 2019 w systemie Windows Server 2019 nie zostanie automatycznie zaktualizowana do nowszej wersji.
  • Usługi uruchomione na maszynie wirtualnej wymagają specjalnego traktowania i dodatkowych narzędzi, jeśli chcesz je wdrożyć i skonfigurować za pomocą infrastruktury jako kodu.
  • Platforma Azure okresowo aktualizuje swoją platformę. Te aktualizacje mogą wymagać ponownego uruchomienia maszyny wirtualnej. Aktualizacje, które wymagają ponownego uruchomienia, są zwykle ogłaszane z wyprzedzeniem. Zobacz Konserwacja maszyn wirtualnych na platformie Azure i Obsługa powiadomień o planowanej konserwacji.

Zalecenia dotyczące projektowania

  • Unikaj ręcznych operacji na maszynach wirtualnych i implementuj odpowiednie procesy w celu wdrażania i wdrażania zmian.

    • Automatyzowanie aprowizacji zasobów platformy Azure przy użyciu rozwiązań infrastruktury jako kodu, takich jak szablony usługi Azure Resource Manager (ARM), Bicep, Terraform lub inne rozwiązania.
  • Upewnij się, że procesy operacyjne na potrzeby wdrażania maszyn wirtualnych, aktualizacji i kopii zapasowych oraz odzyskiwania są wykonywane i prawidłowo przetestowane. Aby przetestować odporność, wstrzykuj błędy do aplikacji, zanotuj błędy i zniweluj te błędy.

  • Upewnij się, że strategie są na miejscu, aby przywrócić ostatni znany stan dobrej kondycji, jeśli nowsza wersja nie działa poprawnie.

  • Utwórz częste kopie zapasowe dla obciążeń stanowych, upewnij się, że zadania tworzenia kopii zapasowych działają skutecznie i implementują alerty dla procesów tworzenia kopii zapasowych, które zakończyły się niepowodzeniem.

  • Monitoruj maszyny wirtualne i wykrywaj błędy. Dane pierwotne do monitorowania mogą pochodzić z różnych źródeł. Przeanalizuj przyczyny problemów.

  • Upewnij się, że zaplanowane kopie zapasowe są uruchamiane zgodnie z oczekiwaniami i że w razie potrzeby są tworzone okresowe kopie zapasowe. Aby uzyskać szczegółowe informacje, możesz użyć centrum kopii zapasowych .

  • Określanie priorytetów użycia Virtual Machine Scale Sets, a nie maszyn wirtualnych w celu włączenia funkcji, takich jak skalowanie, skalowanie automatyczne i nadmiarowość strefy.

  • Określanie priorytetów użycia standardowych obrazów z Azure Marketplace, a nie obrazów niestandardowych, które należy zachować.

  • Użyj narzędzia Azure VM Image Builder lub innych narzędzi, aby zautomatyzować procesy kompilowania i konserwacji dostosowanych obrazów zgodnie z potrzebami.

Poza tymi konkretnymi zaleceniami zastosuj najlepsze rozwiązania dotyczące procedur operacyjnych dla scenariuszy aplikacji o znaczeniu krytycznym zgodnie z potrzebami.

Następny krok

Zapoznaj się ze wzorcem architektury scenariuszy aplikacji o znaczeniu krytycznym: