diff --git a/chapters/technische-umsetzung/main.tex b/chapters/technische-umsetzung/main.tex index 71e2242..06a463a 100644 --- a/chapters/technische-umsetzung/main.tex +++ b/chapters/technische-umsetzung/main.tex @@ -210,45 +210,47 @@ Ein Beispiel mit dem im Rahmen dieser Ausarbeitung bereitgestellten Filtermodul \label{fig:flowchart-filtermodule-resolve-1p-secret} \end{nicepic} -Die generelle Funktionsweise des Filtermoduls ist es, drei Arten von Eingabeformaten zu unterstützen. -Diese sind: -\subsection*{Kein erkanntes Format} -Wird kein bekanntes Format, wird der Wert unverändert zurückgegeben. Das ermöglicht Rückwärtskompatibilät, dass -nach-wie-vor hardgecodede Secrets weiterhin funktionieren, und nicht versehentlich als \ac{UUID} interpretiert werden. +\subsection{Akzeptierte Formate} +Das Filtermodul akzeptiert mehrere, verschiedene Eingabeformate und ist rückwärtskompatibil. -\subsection*{1P:<...>} -Beginnt der Wert mit \enquote{1P:}, so wird alles nach danach als \ac{UUID} interpretiert. +\subsubsection*{Kein erkanntes Format} +Wird kein bekanntes Format erkannt, wird der Wert unverändert zurückgegeben. Das ermöglicht Rückwärtskompatibilät, +sodass nach-wie-vor hardgecodede Secrets funktionieren, und nicht versehentlich als \ac{UUID} interpretiert werden. +Das gewährleistet eine flüssigere Migration der Host-Konfigurationen, da somit bestehende Dateien weiterhin valide sind. + +\subsubsection*{1P:<...>} +Beginnt der Wert mit \enquote{1P:}, so wird alles Nachfolgende als \ac{UUID} interpretiert. Es wird versucht, das Feld \enquote{password} aus diesem Eintrag zu dereferenzieren. -\subsection*{Objektformat} -Wird ein Yaml-Objekt übergeben, werden die Keys \enquote{1P\_secret\_uuid} und \enquote{1P\_field\_id} erwartet, -die die \ac{UUID} und eine Feld-ID für den Eintrag erwarten. Das ermöglicht z.B. auch den Benutzernamen (\textit{1P\_field\_id: username}) eines -Eintrages abzufragen, anstelle nur des Passworts. Ist keine Feld-ID gegeben, wird auf den Standardwert \enquote{password} zurückgefallen. +\subsubsection*{Objektformat} +Wird ein Yaml-Objekt übergeben, so werden die Keys \enquote{1P\_secret\_uuid} und \enquote{1P\_field\_id} erwartet. +Diese definieren die Werte der Eintrags-\ac{UUID} und der Feld-ID in der ein Secret steht. Das ermöglicht z.B. auch den Benutzernamen (\textit{1P\_field\_id: username}) eines +Eintrages abzufragen, anstelle nur des Passworts. Ist keine Feld-ID gegeben, so wird auf das Standardfeld \enquote{password} zurückgefallen. \subsection{Übersetzung der UUIDs} -Um die für eine*n Entwickler*in gegebene, private \ac{UUID} für eine öffentliche, sich in der Host-Konfiguration gesetzte -\ac{UUID} zu ermitteln, frägt das Filtermodul zunächst den Mapping-Eintrag aus dem Entwickler*innen-Vault ab und schlägt -hierin die öffentliche \ac{UUID} nach. +Um die private \ac{UUID} zu ermitteln, die zu der öffentlichen \ac{UUID} gehört, die in der Host-Konfiguration steht, +frägt das Filtermodul den Mapping-Eintrag aus dem jeweiligen Entwickler*innen-Vault an und schlägt die öffentliche \ac{UUID} darin nach. +Die daraus resultierende \ac{UUID} kann von einem*r externen Entwickler*in angefragt werden. \subsection{Unterscheidung zwischen internen und externen Entwickler*innen} -Ist in der Docker-Ansible-Konfigurationsdatei eine Entwickler*innen-Vault-\ac{UUID} definiert, wird von einem*r externe*n Entwickler*in ausgegangen. +Ist in der Docker-Ansible-Konfigurationsdatei eine Entwickler*innen-Vault-\ac{UUID} definiert, so wird von einem*r externe*n Entwickler*in ausgegangen. Ist stattdessen definiert, dass die in den Host-Konfigurationen angegebenen, öffentlichen \acp{UUID} direkt angefragt werden sollen, wird -von einem*r interne*n Entwickler*in ausgegangen. Sind beide Konfigurationen gegeben, wird ein Inkompatibilitätsfehler erhoben. +von einem*r interne*n Entwickler*in ausgegangen. Sind beide Konfigurationen zugleich gegeben, wird ein Inkompatibilitätsfehler erhoben. Ist ein*e interne*r Entwickler*in angenommen, so wird der Mapping-Schritt übersprungen. Der verbleibende Prozess bleibt unberührt. \subsection{Kommunikation mit 1Password} Ist eine \ac{UUID} ermittelt, auf die der*ie Nutzer*in Zugriff hat, wird diese über das \ac{1P}-CLI angefragt. -Das geht via \textit{op item get } mit dem Zusatz \textit{--format json}, um die Ausgabe programmatisch auswertbar zu machen. +Dieser Aufruf ist: \textit{op item get } mit dem Zusatz \textit{--format json}, um die Ausgabe programmatisch auswerten zu können. \subsection{Performanz und Benchmarks} Um diese Konfiguration zu testen, werden in einem Testszenario fünf Werte aus \ac{1P} ausgelesen: \begin{itemize} - \item[Datenbank-Host] - \item[Datenbank-Port] - \item[Datenbank-Benutzername] - \item[Datenbank-Passwort] - \item[Datenbank-Name] + \item Datenbank-Host + \item Datenbank-Port + \item Datenbank-Benutzername + \item Datenbank-Passwort + \item Datenbank-Name \end{itemize} Diese Einträge abzufragen dauert durch das imperformante \ac{1P}-CLI rund 17 Sekunden. diff --git a/main.pdf b/main.pdf index 3ca6e7f..a022be2 100644 Binary files a/main.pdf and b/main.pdf differ