Zentralisierte Konfiguration
Tipp
Diese Inhalte sind ein Auszug aus dem E-Book „Architecting Cloud Native .NET Applications for Azure“, verfügbar in der .NET-Dokumentation oder als kostenlos herunterladbare PDF-Datei, die offline gelesen werden kann.
Im Gegensatz zu einer monolithischen App, in der alles innerhalb einer einzelnen Instanz ausgeführt wird, besteht eine cloudnative Anwendung aus unabhängigen Diensten, die über virtuelle Computer, Container und geografische Regionen verteilt werden. Das Verwalten von Konfigurationseinstellungen für Dutzende von voneinander abhängigen Diensten kann eine Herausforderung darstellen. Doppelte Kopien von Konfigurationseinstellungen an verschiedenen Standorten sind fehleranfällig und schwierig zu verwalten. Eine zentralisierte Konfiguration ist eine wichtige Voraussetzung für verteilte cloudnative Anwendungen.
Wie in Kapitel 1 erläutert, erfordern die Empfehlungen für die Zwölf-Faktoren-App eine strikte Trennung zwischen Code und Konfiguration. Die Konfiguration muss außerhalb der Anwendung gespeichert und bei Bedarf eingelesen werden. Das Speichern von Konfigurationswerten als Konstanten oder Literalwerte im Code ist ein Verstoß. Die gleichen Konfigurationswerte werden oft von vielen Diensten in derselben Anwendung verwendet. Außerdem müssen wir dieselben Werte in verschiedenen Umgebungen unterstützen, z. B. in der Entwicklungs-, Test- und Produktionsumgebung. Die bewährte Methode besteht darin, sie in einem zentralen Konfigurationsspeicher zu speichern.
Die Azure-Cloud bietet mehrere großartige Optionen.
Azure App Configuration
Azure App Configuration ist ein vollständig verwalteter Azure-Dienst, der nicht geheime Konfigurationseinstellungen an einem sicheren, zentralen Speicherort speichert. Gespeicherte Werte können von mehreren Diensten und Anwendungen gemeinsam genutzt werden.
Der Dienst ist einfach zu verwenden und bietet mehrere Vorteile:
- Flexible Schlüssel-Wert-Darstellungen und -Zuordnungen
- Kennzeichnen mit Azure-Bezeichnungen
- Dedizierte Benutzeroberfläche für die Verwaltung
- Verschlüsselung vertraulicher Informationen
- Abfragen und Batchabruf
Azure App Configuration behält Änderungen an den Schlüssel-Wert-Einstellungen sieben Tage lang bei. Mit dem Feature „Momentaufnahme“ können Sie den Verlauf einer Einstellung rekonstruieren und sogar ein Rollback für eine fehlerhafte Bereitstellung durchführen.
Bei App Configuration werden die einzelnen Einstellungen zwischengespeichert, um übermäßige Aufrufe des Konfigurationsspeichers zu vermeiden. Beim Aktualisierungsvorgang wird abgewartet, bis der zwischengespeicherte Wert einer Einstellung abgelaufen ist, bevor die Einstellung aktualisiert wird. Dies gilt auch, wenn sich der zugehörige Wert im Konfigurationsspeicher ändert. Die Standarddauer für den Ablauf des Caches beträgt 30 Sekunden. Sie können die Ablaufzeit außer Kraft setzen.
App Configuration verschlüsselt alle Konfigurationswerte während der Übertragung und im Ruhezustand. Schlüsselnamen und Bezeichnungen werden als Indizes zum Abrufen von Konfigurationsdaten verwendet und nicht verschlüsselt.
App Configuration bietet zwar verstärkte Sicherheit, aber Azure Key Vault ist weiterhin der beste Ort zum Speichern von Anwendungsgeheimnissen. Key Vault bietet Verschlüsselung auf Hardwareebene, granulare Zugriffsrichtlinien und Verwaltungsvorgänge wie die Zertifikatsrotation. Sie können App Configuration-Werte erstellen, die auf in Key Vault gespeicherte Geheimnisse verweisen.
Azure-Schlüsseltresor
Key Vault ist ein verwalteter Dienst zum sicheren Speichern und Zugreifen auf Geheimnisse. Als Geheimnis wird alles bezeichnet, für das Sie den Zugriff streng kontrollieren möchten, z.B. API-Schlüssel, Kennwörter oder Zertifikate. Ein Tresor ist eine logische Gruppe von Geheimnissen.
Mit Key Vault lässt sich das Risiko einer unbeabsichtigten Weitergabe von Geheimnissen erheblich senken. Dank Key Vault müssen Anwendungsentwickler Sicherheitsinformationen nicht mehr in der Anwendung speichern. Auf diese Weise müssen Sie diese Informationen nicht mehr in Ihrem Code speichern. Ein Beispiel: Angenommen, eine Anwendung muss eine Verbindung mit einer Datenbank herstellen. Anstatt die Verbindungszeichenfolge im App-Code zu speichern, können Sie diese sicher in Key Vault speichern.
Ihre Anwendungen können mithilfe von URIs sicher auf benötigte Informationen zugreifen. Diese URIs bieten den Anwendungen die Möglichkeit, bestimmte Versionen eines geheimen Schlüssels abzurufen. Sie müssen keinerlei benutzerdefinierten Code schreiben, um die geheimen Informationen zu schützen, die in Key Vault gespeichert sind.
Der Zugriff auf Key Vault setzt eine ordnungsgemäße Authentifizierung und Autorisierung des Aufrufers voraus. In der Regel verwendet jeder cloudnative Microservice eine Kombination von ClientId/ClientSecret. Es ist wichtig, diese Anmeldeinformationen außerhalb der Quellcodeverwaltung aufbewahren. Es wird empfohlen, sie in der Umgebung der Anwendung festzulegen. Der direkte Zugriff auf Key Vault von AKS kann über Key Vault FlexVolume erreicht werden.
Konfiguration in eShop
Die eShopOnContainers-Anwendung enthält lokale Dateien mit den Anwendungseinstellungen für jeden Microservice. Diese Dateien werden in die Quellcodeverwaltung eingecheckt, enthalten jedoch keine Produktionsgeheimnisse wie Verbindungszeichenfolgen oder API-Schlüssel. In der Produktion können einzelne Einstellungen mit Umgebungsvariablen pro Dienst überschrieben werden. Das Einschleusen von Geheimnissen in Umgebungsvariablen ist eine gängige Methode für gehostete Anwendungen, bietet jedoch keinen zentralen Konfigurationsspeicher. Zur Unterstützung der zentralen Verwaltung von Konfigurationseinstellungen enthält jeder Microservice eine Einstellung, mit der Sie zwischen der Verwendung lokaler Einstellungen oder der Verwendung von Azure Key Vault-Einstellungen umschalten können.
Referenzen
- Die eShopOnContainers-Architektur
- Orchestrieren von Microservices und Anwendungen mit mehreren Containern für hohe Skalierbarkeit und Verfügbarkeit
- Azure API Management
- Übersicht über Azure SQL-Datenbank
- Azure Cache for Redis
- MongoDB-API von Azure Cosmos DB
- Azure Service Bus
- Azure Monitor – Übersicht
- eShopOnContainers: Erstellen eines Kubernetes-Clusters in AKS
- eShopOnContainers: Azure Dev Spaces
- Azure Dev Spaces