Datenbankanmeldedaten rotieren, ohne Container neu zu starten - AWS Prescriptive Guidance

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Datenbankanmeldedaten rotieren, ohne Container neu zu starten

Erstellt von Josh Joy () AWS

Umwelt: Produktion

Technologien: Container und Mikroservices; Datenbanken; Infrastruktur DevOps; Sicherheit, Identität, Compliance; Management und Unternehmensführung

AWSDienstleistungen: AmazonECS; Amazon Aurora; AWS Fargate; AWS Secrets Manager; Amazon VPC

Übersicht

In der Amazon Web Services (AWS) Cloud können Sie AWS Secrets Manager verwenden, um Datenbankanmeldedaten während ihres gesamten Lebenszyklus zu rotieren, zu verwalten und abzurufen. Benutzer und Anwendungen rufen Geheimnisse mit einem Aufruf des Secrets Manager abAPI, sodass sensible Informationen nicht mehr im Klartext hartcodiert werden müssen.

Wenn Sie Container für Microservice-Workloads verwenden, können Sie Anmeldeinformationen sicher in AWS Secrets Manager speichern. Um die Konfiguration vom Code zu trennen, werden diese Anmeldeinformationen üblicherweise in den Container eingefügt. Es ist jedoch wichtig, dass Sie Ihre Anmeldeinformationen regelmäßig und automatisch wechseln. Es ist auch wichtig, die Möglichkeit zu unterstützen, Anmeldeinformationen nach dem Widerruf zu aktualisieren. Gleichzeitig müssen Anwendungen die Möglichkeit haben, Anmeldeinformationen abwechselnd auszutauschen und gleichzeitig mögliche Auswirkungen auf die Verfügbarkeit im Downstream-Bereich zu reduzieren.

Dieses Muster beschreibt, wie Sie Ihre mit Secrets Manager gesicherten AWS Secrets in Ihren Containern rotieren, ohne dass Ihre Container neu gestartet werden müssen. Darüber hinaus reduziert dieses Muster die Anzahl der Abfragen von Anmeldeinformationen für Secrets Manager mithilfe der clientseitigen Caching-Komponente von Secrets Manager. Wenn Sie die clientseitige Caching-Komponente verwenden, um die Anmeldeinformationen innerhalb der Anwendung zu aktualisieren, muss der Container nicht neu gestartet werden, um rotierte Anmeldeinformationen abzurufen.

Dieser Ansatz funktioniert für Amazon Elastic Kubernetes Service (AmazonEKS) und Amazon Elastic Container Service (AmazonECS).

Zwei Szenarien werden behandelt. Im Einzelbenutzer-Szenario werden die Datenbankanmeldeinformationen bei der geheimen Rotation aktualisiert, indem die abgelaufenen Anmeldeinformationen erkannt werden. Der Anmeldeinformations-Cache wird angewiesen, das Geheimnis zu aktualisieren, und dann stellt die Anwendung die Datenbankverbindung wieder her. Die clientseitige Caching-Komponente speichert die Anmeldeinformationen innerhalb der Anwendung im Cache und verhindert, dass bei jeder Suche nach Anmeldeinformationen der Secrets Manager kontaktiert werden muss. Die Anmeldeinformationen werden innerhalb der Anwendung rotiert, ohne dass die Aktualisierung der Anmeldeinformationen durch einen Neustart des Containers erzwungen werden muss.

Im zweiten Szenario wechselt das Geheimnis abwechselnd zwischen zwei Benutzern. Zwei aktive Benutzer reduzieren das Risiko von Ausfallzeiten, da die Anmeldeinformationen eines Benutzers immer aktiv sind. Die Rotation der Anmeldeinformationen für zwei Benutzer ist hilfreich, wenn Sie eine große Bereitstellung mit Clustern haben, in denen es zu einer geringen Verzögerung bei der Weitergabe von Anmeldeinformationen kommen kann.

Voraussetzungen und Einschränkungen

Voraussetzungen

Einschränkungen

Architektur

Zielarchitektur

Szenario 1 — Rotation von Anmeldeinformationen für einen einzelnen Benutzer

Diagramm, das die Prozesse von Secrets Manager zur Anwendung und von Fargate bis Aurora zeigt.

Im ersten Szenario werden einzelne Datenbankanmeldedaten regelmäßig von Secrets Manager rotiert. Der Anwendungscontainer läuft in Fargate. Wenn die erste Datenbankverbindung hergestellt ist, ruft der Anwendungscontainer die Datenbankanmeldedaten für Aurora ab. Die Secrets Manager Manager-Caching-Komponente speichert dann die Anmeldeinformationen für den future Verbindungsaufbau zwischen. Nach Ablauf der Rotationsperiode laufen die Anmeldeinformationen ab und die Datenbank gibt einen Authentifizierungsfehler zurück. Die Anwendung ruft dann die rotierten Anmeldeinformationen ab, macht den Cache ungültig und aktualisiert den Anmeldeinformationen-Cache über die clientseitige Caching-Komponente von Secrets Manager.

In diesem Szenario kann es zu einer minimalen Unterbrechung kommen, während die Anmeldeinformationen rotiert werden und veraltete Verbindungen die veralteten Anmeldeinformationen verwenden. Dieses Problem kann durch die Verwendung des Zwei-Benutzer-Szenarios behoben werden.

Szenario 2 — Rotation der Anmeldeinformationen für zwei Benutzer

Diagramm, Fargate Fargate-Cluster, Aurora und Secrets Manager mit Anmeldeinformationen für Alice und Bob zeigt.

Im zweiten Szenario werden zwei Datenbankbenutzeranmeldeinformationen (die von Alice und Bob) regelmäßig von Secrets Manager gewechselt. Der Anwendungscontainer läuft in einem Fargate-Cluster. Wenn die erste Datenbankverbindung hergestellt ist, ruft der Anwendungscontainer die Aurora-Datenbankanmeldedaten für den ersten Benutzer (Alice) ab. Die Secrets Manager Manager-Caching-Komponente speichert dann die Anmeldeinformationen für den future Verbindungsaufbau zwischen.

Obwohl es zwei Benutzer und Anmeldeinformationen gibt, wird nur ein aktiver Berechtigungsnachweis von Secrets Manager verwaltet. In diesem Fall läuft die Caching-Komponente regelmäßig ab und ruft die neuesten Anmeldeinformationen ab. Wenn die Secrets Manager Manager-Rotationsperiode länger als das Cache-Timeout ist, übernimmt die Caching-Komponente die rotierten Anmeldeinformationen für den zweiten Benutzer (Bob). Wenn beispielsweise der Cache-Ablauf in Minuten und der Rotationszeitraum in Tagen gemessen wird, ruft die Caching-Komponente die neuen Anmeldeinformationen im Rahmen ihrer regelmäßigen Cache-Aktualisierung ab. Auf diese Weise wird die Ausfallzeit minimiert, da die Anmeldeinformationen jedes Benutzers für eine Secrets Manager Manager-Rotation aktiv sind.

Automatisierung und Skalierung

Sie können dieses Muster mithilfe von Infrastruktur als Code bereitstellen. AWS CloudFormation Dadurch wird der Anwendungscontainer erstellt und erstellt, die Fargate-Aufgabe erstellt, der Container in Fargate bereitgestellt und Secrets Manager mit Aurora eingerichtet und konfiguriert. Anweisungen zur step-by-step Bereitstellung finden Sie in der Readme-Datei.

Tools

Tools

  • AWSSecrets Manager ermöglicht das Ersetzen von hartcodierten Anmeldeinformationen, einschließlich Kennwörtern, durch einen API Aufruf von Secrets Manager, um das Geheimnis abzurufen. Da Secrets Manager das Secret automatisch nach einem Zeitplan rotieren kann, können Sie langfristige Geheimnisse durch kurzfristige ersetzen und so das Risiko von Kompromissen verringern.

  • Docker hilft Entwicklern dabei, jede Anwendung als leichten, portablen und autarken Container zu packen, zu versenden und auszuführen.

Code

Beispiel für Python-Code

Dieses Muster verwendet die clientseitige Python-Caching-Komponente für Secrets Manager, um die Authentifizierungsdaten abzurufen, wenn die Datenbankverbindung hergestellt wird. Durch die clientseitige Caching-Komponente wird vermieden, dass Sie jedes Mal den Secrets Manager kontaktieren müssen.

Wenn die Rotationsperiode nun abgelaufen ist, laufen die zwischengespeicherten Anmeldeinformationen ab und die Verbindung mit der Datenbank führt zu einem Authentifizierungsfehler. Für My lautet SQL der Authentifizierungsfehlercode 1045. In diesem Beispiel wird Amazon Aurora for My verwendetSQL, Sie könnten jedoch auch eine andere Engine wie Postgre SQL verwenden. Bei einem Authentifizierungsfehler fängt der Code zur Behandlung von Datenbankverbindungsausnahmen den Fehler ab. Anschließend informiert es die clientseitige Caching-Komponente von Secrets Manager, den Secret zu aktualisieren und anschließend die Datenbankverbindung erneut zu authentifizieren und wiederherzustellen. Wenn Sie Postgre SQL oder eine andere Engine verwenden, müssen Sie den entsprechenden Authentifizierungsfehlercode nachschlagen.

Die Containeranwendung kann jetzt das Datenbankkennwort mit dem rotierten Passwort aktualisieren, ohne den Container neu zu starten.

Fügen Sie den folgenden Code in Ihren Anwendungscode ein, der Datenbankverbindungen verarbeitet. Dieses Beispiel verwendet Django und untergliedert das Datenbank-Backend mit einem Datenbank-Wrapper für Verbindungen. Wenn Sie eine andere Programmiersprache oder Datenbankverbindungsbibliothek verwenden, finden Sie in Ihrer Datenbankverbindungsbibliothek nach, wie Sie das Abrufen von Datenbankverbindungen in Unterklassen unterteilen.

    def get_new_connection(self, conn_params):         try:             logger.info("get connection")             databasecredentials.get_conn_params_from_secrets_manager(conn_params)             conn =super(DatabaseWrapper,self).get_new_connection(conn_params)             return conn         except MySQLdb.OperationalError as e:             error_code=e.args[0]             if error_code!=1045:                 raise e               logger.info("Authentication error. Going to refresh secret and try again.")             databasecredentials.refresh_now()             databasecredentials.get_conn_params_from_secrets_manager(conn_params)             conn=super(DatabaseWrapper,self).get_new_connection(conn_params)             logger.info("Successfully refreshed secret and established new database connection.")             return conn

AWS CloudFormation und Python-Code

Epen

AufgabeBeschreibungErforderliche Fähigkeiten

Installieren Sie die Caching-Komponente.

Laden Sie die clientseitige Caching-Komponente von Secrets Manager für Python herunter und installieren Sie sie. Den Download-Link finden Sie im Abschnitt Verwandte Ressourcen.

Developer

Zwischenspeichern Sie die funktionierenden Anmeldeinformationen.

Verwenden Sie die clientseitige Caching-Komponente von Secrets Manager, um die funktionierenden Anmeldeinformationen lokal zwischenzuspeichern.

Developer

Aktualisieren Sie den Anwendungscode, um die Anmeldeinformationen bei einem nicht autorisierten Fehler bei der Datenbankverbindung zu aktualisieren.

Aktualisieren Sie den Anwendungscode, um Secrets Manager zum Abrufen und Aktualisieren von Datenbankanmeldeinformationen zu verwenden. Fügen Sie die Logik zur Behandlung nicht autorisierter Fehlercodes hinzu und rufen Sie dann die neu rotierten Anmeldeinformationen ab. Weitere Informationen finden Sie im Abschnitt Python-Beispielcode.

Developer

Zugehörige Ressourcen

Ein Secrets Manager Manager-Geheimnis erstellen

Erstellen Sie einen Amazon Aurora Aurora-Cluster

Erstellen Sie die ECS Amazon-Komponenten

Laden Sie die clientseitige Caching-Komponente von Secrets Manager herunter und installieren Sie sie

Anlagen

Um auf zusätzliche Inhalte zuzugreifen, die mit diesem Dokument verknüpft sind, entpacken Sie die folgende Datei: attachment.zip