Anbindung der Archivierung an ein File-Archiv über SFTP Schnittstelle

Übersicht

Die Anbindung an das File-Archiv über die SFTP Schnittstelle wird durch zwei Microservices realisiert, dem archive-writer und dem archive-searcher.

Vorbedingungen SFTP Anbindung

Um eine gesicherte Datenübertragung zu ermöglichen ist es nötig, das SSH-Protokol zu nutzen. Dafür müssen zusätzliche Konfigurationen für den archive-writer und archive-searcher gemacht werden. Sowohl der Client als auch der SFTP-Server benötigen einen privaten und öffentlichen SSH-Schlüssel. Diese werden ausgetauscht, damit der Server den Client erkennt und andersherum.

Folgende Dateien sind zu erstellen:

  • known_hosts
    • enthält die IP des SFTP-Servers mit seinem PublicKey
    • Publickey wird z.B. bei RebexTinySftpServer automatisch erstellt und muss nur aus dessen Verzeichnis gelesen werden
    • Format: <IP-Adresse> <Verschlüssungstyp> <PublicKey des SFTP-Servers>
  • Public Key des Clients
    • Name der Datei: ${SFTP_PRIVATE_KEY_FILE_NAME}.pub
    • Format: OpenSSH
  • Private Key des Clients
    • Name der Datei: ${SFTP_PRIVATE_KEY_FILE_NAME}
    • Format: OpenSSH

Diese Dateien müssen in den Ordner /home/.ssh/ des jeweiligen Containers gemountet werden.

Konfiguration des SFTP-Server

Neben der Erstellung des Private- und PublicKeys wird es ggf. notwendig sein, eine authorized_keys-Datei hinzuzufügen. Diese enthält den PublicKey der Clients - NICHT den Key des Servers. Bei mehreren Clients wird ein ClientKey pro Zeile erfasst:

  • im OpenSSH-Format: <Verschlüssungstyp> <PublicKey des Clients> <Kommentar (optional>

Bei Bedarf: Generierung eines Keys

Unter Windows wird üblicherweise ein SSH-Key mithilfe des Tools PuTTYGen erstellt. Um ein Key zu generieren muss man lediglich das Tool starten, auf Generate klicken und mit der Maus Bewegungen erzeugen.

Um den PrivateKey im richtigen Format zu speichern, klickt man auf Conversions > Export OpenSSH Key und speichert diese ohne jegliche Dateiendung ab. Für den PublicKey muss im oberen Teil des Fensters der Text herauskopiert werden und in eine neue Datei mit dem Namen des PrivateKeys und der Endung .pub kopiert werden.

Falls ein SSH-Key mit der Endung .ppk schon vorhanden ist, handelt es sich hierbei um ein Dateiformat von PuTTYGen. PuTTYGen kann diesen Key laden und, wie vorher beschrieben, in das OpenSSH-Format umwandeln.

Archiv-Writer

Der Microservice konsumiert die Nachrichten aus der Persistence Queue und archiviert die Nachrichten und sendet die Nachrichten zum Indizieren in die Index Queue.

Die Konfiguration des Microservices geschieht über die im “docker-compose”-Datei angegebene “application.yml”.

Releases

Der Service wird in den folgenden Versionen als Docker Container aus dem Repo docker-nob-erp.next-level-apps.com/archive-writer bereitgestellt.

2021-06-28

Ticket Beschreibung
BTOB-7497 Initiale Entwicklung zur File-System Archivierung via SFTP

Konfiguration

Für die Konfiguration der Placeholder siehe Installation.

consumer-queue: persistence_queue
production-queue:
  index: index_queue
  error: error_queue
default-suffix: .txt
writer:
  file-ending: .json
sftp:
  host: ${SFTP_HOST}
  port: ${SFTP_PORT}
  user: ${SFTP_USER}
  password: ${SFTP_PASSWORD}
  private-key-file-name: ${SFTP_PRIVATE_KEY_FILE_NAME}
  remote-directory: ${SFTP_REMOTE_DIRECTORY}
spring:
  rabbitmq:
    host: ${RABBITMQ_HOST}
    port: ${RABBITMQ_PORT}
    username: ${RABBITMQ_USER}
    password: ${RABBITMQ_PASSWORD}

Archiv-Searcher

Funktion

Der Microservice nimmt Anfragen von der B2B zum Suchen der Nachrichten-Details/Dateien aus dem Archiv entgegen und lädt diese per Archiv-Datei-Id aus dem Archiv.

Releases

Der Service wird in den folgenden Versionen als Docker Container aus dem Repo docker-nob-erp.next-level-apps.com/archive-searcher bereitgestellt.

2021-06-28

Ticket Beschreibung
BTOB-7513 Initiale Entwicklung zur Suche im File-System Archivierung via SFTP

Konfiguration

Für die Konfiguration der Placeholder siehe Installation.

sftp:
  host: ${SFTP_HOST}
  port: ${SFTP_PORT}
  user: ${SFTP_USER}
  password: ${SFTP_PASSWORD}
  private-key-file-name: ${SFTP_PRIVATE_KEY_FILE_NAME}
  remote-directory: ${SFTP_DIRECTORY}
reader:
  file-ending: .json
View Me   Edit Me