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.
Anmeldeinformationen mit AWS Secrets Manager verwalten
Erstellt von Durga Prasad Cheepuri () AWS
Erstellt von: AWS | Umgebung: PoC oder Pilot | Technologien: Datenbanken; Sicherheit, Identität, Compliance |
AWSDienstleistungen: AWS Secrets Manager |
Übersicht
Dieses Muster führt Sie durch die Verwendung von AWS Secrets Manager zum dynamischen Abrufen von Datenbankanmeldeinformationen für eine Java Spring-Anwendung.
Wenn Sie eine angepasste Anwendung erstellt haben, die Informationen aus einer Datenbank abruft, mussten Sie bisher normalerweise die Anmeldeinformationen (das Secret) für den Zugriff auf die Datenbank direkt in die Anwendung einbetten. Als es an der Zeit war, die Anmeldeinformationen zu wechseln, mussten Sie Zeit investieren, um die Anwendung so zu aktualisieren, dass sie die neuen Anmeldeinformationen verwendet, und dann die aktualisierte Anwendung zu verteilen. Wenn Sie über mehrere Anwendungen mit gemeinsamen Anmeldeinformationen verfügten und Sie es versäumten, eine davon zu aktualisieren, schlug die Anwendung fehl. Aufgrund dieses Risikos entschieden sich viele Benutzer dafür, ihre Anmeldeinformationen nicht regelmäßig zu wechseln, wodurch ein Risiko durch ein anderes ersetzt wurde.
Secrets Manager ermöglicht es Ihnen, hartcodierte Anmeldeinformationen in Ihrem Code (einschließlich Kennwörtern) durch einen API Aufruf zu ersetzen, um das Geheimnis programmgesteuert abzurufen. Dadurch wird sichergestellt, dass das Geheimnis nicht von jemandem, der Ihren Code untersucht, kompromittiert werden kann, da das Geheimnis einfach nicht vorhanden ist. Sie können Secrets Manager auch so konfigurieren, dass das Secret automatisch nach einem von Ihnen angegebenen Zeitplan rotiert wird. Auf diese Weise können Sie langfristige Geheimnisse durch kurzfristige ersetzen, wodurch das Risiko von Kompromissen erheblich reduziert wird. Weitere Informationen finden Sie in der AWSSecrets Manager Manager-Dokumentation.
Voraussetzungen und Einschränkungen
Voraussetzungen
Ein AWS Konto mit Zugriff auf Secrets Manager
Eine Java Spring-Anwendung
Architektur
Quelltechnologie-Stack
Eine Java Spring-Anwendung mit Code, der auf eine Datenbank zugreift, wobei die DB-Anmeldeinformationen über die Datei application.properties verwaltet werden.
Zieltechnologie-Stack
Eine Java Spring-Anwendung mit Code, der auf eine Datenbank zugreift, wobei die DB-Anmeldeinformationen in Secrets Manager verwaltet werden. Die Datei application.properties enthält die Geheimnisse von Secrets Manager.
Secrets Manager Manager-Integration mit einer Anwendung
Tools
Secrets Manager — AWSSecrets Manager ist ein AWS Dienst, der Ihnen die Verwaltung von Geheimnissen erleichtert. Geheimnisse können Datenbankanmeldedaten, Passwörter, API Schlüssel von Drittanbietern und sogar beliebiger Text sein. Sie können diese Secrets zentral speichern und den Zugriff darauf kontrollieren, indem Sie die Secrets Manager-Konsole, die Secrets Manager Manager-Befehlszeilenschnittstelle (CLI) oder den Secrets Manager API und verwenden. SDKs
Epen
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Speichern Sie die DB-Anmeldeinformationen als geheim in Secrets Manager. | Speichern Sie Amazon Relational Database Service (AmazonRDS) oder andere DB-Anmeldeinformationen als geheim in Secrets Manager, indem Sie die Schritte unter Creating a Secret in der Secrets Manager-Dokumentation befolgen. | Systemadministrator |
Legen Sie die Berechtigungen für die Spring-Anwendung für den Zugriff auf Secrets Manager fest. | Legen Sie die entsprechenden Berechtigungen fest, je nachdem, wie die Java Spring-Anwendung Secrets Manager verwendet. Um den Zugriff auf den Secret zu kontrollieren, erstellen Sie eine Richtlinie auf der Grundlage der Informationen in der Secrets Manager-Dokumentation in den Abschnitten Verwenden identitätsbasierter Richtlinien (IAMRichtlinien) und ABAC für Secrets Manager und Verwenden ressourcenbasierter Richtlinien für Secrets Manager. Folgen Sie den Schritten im Abschnitt Abrufen des geheimen Werts in der Secrets Manager-Dokumentation. | Systemadministrator |
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Fügen Sie JAR Abhängigkeiten hinzu, um Secrets Manager zu verwenden. | Einzelheiten finden Sie im Abschnitt Zusätzliche Informationen. | Java-Entwickler |
Fügen Sie die Details des Geheimnisses zur Spring-Anwendung hinzu. | Aktualisieren Sie die Datei application.properties mit dem geheimen Namen, den Endpunkten und der Region. AWS Ein Beispiel finden Sie im Abschnitt Zusätzliche Informationen. | Java-Entwickler |
Aktualisieren Sie den Code zum Abrufen von DB-Anmeldeinformationen in Java. | Aktualisieren Sie in der Anwendung den Java-Code, der die DB-Anmeldeinformationen abruft, um diese Details aus Secrets Manager abzurufen. Beispielcode finden Sie im Abschnitt Zusätzliche Informationen. | Java-Entwickler |
Zugehörige Ressourcen
Zusätzliche Informationen
Hinzufügen von JAR Abhängigkeiten für die Verwendung von Secrets Manager
Maven:
<groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-secretsmanager</artifactId> <version>1.11. 355 </version>
Gradle:
compile group: 'com.amazonaws', name: 'aws-java-sdk-secretsmanager', version: '1.11.355'
Aktualisierung der Datei application.properties mit den Details des Geheimnisses
spring.aws.secretsmanager.secretName=postgres-local spring.aws.secretsmanager.endpoint=secretsmanager.us-east-1.amazonaws.com spring.aws.secretsmanager.region=us-east-1
Aktualisierung des Codes zum Abrufen von DB-Anmeldeinformationen in Java
String secretName = env.getProperty("spring.aws.secretsmanager.secretName"); String endpoints = env.getProperty("spring.aws.secretsmanager.endpoint"); String AWS Region = env.getProperty("spring.aws.secretsmanager.region"); AwsClientBuilder.EndpointConfiguration config = new AwsClientBuilder.EndpointConfiguration(endpoints, AWS Region); AWSSecretsManagerClientBuilder clientBuilder = AWSSecretsManagerClientBuilder.standard(); clientBuilder.setEndpointConfiguration(config); AWSSecretsManager client = clientBuilder.build(); ObjectMapper objectMapper = new ObjectMapper(); JsonNode secretsJson = null; ByteBuffer binarySecretData; GetSecretValueRequest getSecretValueRequest = new GetSecretValueRequest().withSecretId(secretName); GetSecretValueResult getSecretValueResponse = null; try { getSecretValueResponse = client.getSecretValue(getSecretValueRequest); } catch (ResourceNotFoundException e) { log.error("The requested secret " + secretName + " was not found"); } catch (InvalidRequestException e) { log.error("The request was invalid due to: " + e.getMessage()); } catch (InvalidParameterException e) { log.error("The request had invalid params: " + e.getMessage()); } if (getSecretValueResponse == null) { return null; } // Decrypted secret using the associated KMS key // Depending on whether the secret was a string or binary, one of these fields will be populated String secret = getSecretValueResponse.getSecretString(); if (secret != null) { try { secretsJson = objectMapper.readTree(secret); } catch (IOException e) { log.error("Exception while retrieving secret values: " + e.getMessage()); } } else { log.error("The Secret String returned is null"); return null; } String host = secretsJson.get("host").textValue(); String port = secretsJson.get("port").textValue(); String dbname = secretsJson.get("dbname").textValue(); String username = secretsJson.get("username").textValue(); String password = secretsJson.get("password").textValue(); }