Compare commits

..

2 Commits

Author SHA1 Message Date
01a0a603d3 wrote stuff on object mapping 2025-02-07 13:48:24 +01:00
edaee1db5a touchups 2025-02-03 09:13:29 +01:00
8 changed files with 68 additions and 33 deletions

View File

@@ -23,12 +23,13 @@ nicht-funktioniale Anforderungen zu unterteilen ist.
\begin{tabular}{|p{14cm}|} \begin{tabular}{|p{14cm}|}
\hline \hline
\textbf{Funktionale Anforderungen} \\ \hline \textbf{Funktionale Anforderungen} \\ \hline
Entwickler*innen erhalten verschiedene Zugänge, definiert in einer YAML-Datei. \\ \hline Entwickler*innen erhalten verschiedene Zugang zu verschiedenen \ac{1P}-Einträgen (Zugänge),
definiert in einer YAML-Datei. \\ \hline
Wildcard-Matching auf den \ac{1P}-Eintragstitel für zusammenhängende Einträge. \\ \hline Wildcard-Matching auf den \ac{1P}-Eintragstitel für zusammenhängende Einträge. \\ \hline
\ac{1P}-Einträge sollen einzeln zuweisbar sein. \\ \hline \ac{1P}-Einträge sollen Entwickler*innen einzeln zuweisbar sein. \\ \hline
Nicht im YAML gelistete Zugänge sollen bei Anwendung entfernt werden. \\ \hline Nicht in der Konfugration gelistete Zugänge sollen bei Anwendung entfernt werden. \\ \hline
Ansible Secrets müssen aus \ac{1P} dereferenziert werden können. \\ \hline Ansible-Secrets müssen aus \ac{1P} dereferenziert werden können. \\ \hline
Einträge sollen auch manuell einsehbar sein. \\ \hline Einträge sollen für Entwickler*innen einsehbar sein. \\ \hline
\textbf{Nicht-funktionale Anforderungen} \\ \hline \textbf{Nicht-funktionale Anforderungen} \\ \hline
Das System muss Berechtigungen von Entwickler*innen verwalten. \\ \hline Das System muss Berechtigungen von Entwickler*innen verwalten. \\ \hline
Das System muss benutzerfreundlich sein. \\ \hline Das System muss benutzerfreundlich sein. \\ \hline

View File

@@ -4,7 +4,7 @@
\section{Problemstellung} \section{Problemstellung}
In der Arbeitsumgebung des Partnerunternehmens besteht zum Zeitpunkt der Themenfindung der hier beleuchteten Arbeit kein In der Arbeitsumgebung des Partnerunternehmens besteht zum Zeitpunkt der Themenfindung der hier beleuchteten Arbeit kein
Management für Secrets und Logindaten zwischen Entwickler*innenn. Logindaten zu den Projekten des Unternehmens liegen schlicht in einem \ac{1P}-Vault. Management für Secrets und Logindaten zwischen Entwickler*innen. Logindaten zu den Projekten des Unternehmens liegen schlicht in einem \ac{1P}-Vault.
\ac{1P} ist der vom Unternehmen verwendete Passwortmanager. Auf diesen Vault haben sämtliche internen Entwickler*innen Zugriff, jedoch keine externen Entwickler*innen. \ac{1P} ist der vom Unternehmen verwendete Passwortmanager. Auf diesen Vault haben sämtliche internen Entwickler*innen Zugriff, jedoch keine externen Entwickler*innen.
Das ist so, weil anderenfalls dLesezugriff auf sämtliche Einträge dieses Vaults gegeben werden müssten. Das ist so, weil anderenfalls dLesezugriff auf sämtliche Einträge dieses Vaults gegeben werden müssten.
\ac{1P} unterstützt keine Freigaben einzelner Einträge an andere Nutzer, ohne diese Einträge in einen eigenen Vault zu kopieren. \ac{1P} unterstützt keine Freigaben einzelner Einträge an andere Nutzer, ohne diese Einträge in einen eigenen Vault zu kopieren.

View File

@@ -7,7 +7,7 @@ Ziel ist es, eine Umgebung zu schaffen, in der beliebigen Entwickler*innen besti
\ac{1P}-Einträge zugewiesen werden können. \ac{1P}-Einträge zugewiesen werden können.
Der Pflegeaufwand sollte hierbei überschaubar bleiben. Der Pflegeaufwand sollte hierbei überschaubar bleiben.
Das heisst, dass z.B. ganze Gruppen von Einträgen Entwickler*innen zugewiesen werden können. Das heisst, dass z.B. ganze Gruppen von Einträgen Entwickler*innen zugewiesen werden können.
Wenn z.B. einem Projekt viele Einträge zugeordnet sind, sollten diese idealerweise mit einer einzigen Configzeile Wenn z.B. einem Projekt viele Einträge zugeordnet sind, sollten diese idealerweise mit einer einzigen Konfigurationszeile
einem*r Entwickler*in zugeordnet werden können. einem*r Entwickler*in zugeordnet werden können.
Außerdem sollte eine Möglichkeit ausgearbeitet werden, um \ac{1P}-Einträge in Ansible auszulesen, Außerdem sollte eine Möglichkeit ausgearbeitet werden, um \ac{1P}-Einträge in Ansible auszulesen,
damit keine Secrets mehr in den beiliegenden Konfigurationsdateien stehen, die das Freigeben damit keine Secrets mehr in den beiliegenden Konfigurationsdateien stehen, die das Freigeben

View File

@@ -64,7 +64,7 @@ Diese Einträge können über feste Eintrags-IDs und über Regex bezogen auf die
\begin{nicepic} \begin{nicepic}
\includegraphics[width=0.75\textwidth]{images/dev-stuff-python.png} \includegraphics[width=0.75\textwidth]{images/dev-stuff-python.png}
\captionof{figure}{Relationsdiagramm: Ansatz 2 | Python-Toolbox} \captionof{figure}{Relationsdiagramm: Ansatz 3 | Python-Toolbox}
\caption*{Quelle: Eigene Darstellung} \caption*{Quelle: Eigene Darstellung}
\label{fig:ansatz-3-mit-python} \label{fig:ansatz-3-mit-python}
\end{nicepic} \end{nicepic}
@@ -110,8 +110,44 @@ und auf welche nicht, übernimmt \textit{sync-dev-vault.py}. Die Funktionen der
\label{fig:programmstruktur-secret-synchronizer} \label{fig:programmstruktur-secret-synchronizer}
\end{nicepic} \end{nicepic}
Die Funktionsweise des Programmes ist wie folgt:
\begin{enumerate}
\item{Wende die Schritte $2..n$ auf alle zu synchronisierenden Entwickler*innen $d \in D$ an.}
\item{Lösche alle Einträge in $e_d \in d$.}
\item{Kopiere alle vorgesehenen Einträge $e_m \in \text{Master-Vault}$ nach $d$ und ergänze das Feld \enquote{Originale Eintrags-ID} mit dem \ac{UUID} von $e_m$.}
\item{Erstelle ein ID-Mapping-Objekt von $e_d$ zu $e_m$ in $d$.}
\end{enumerate}
\subsubsection{Performanzprobleme und Optimierung}
Eine Schwierigkeit, die sich im Rahmen der Umsetzung offenbart hat, ist, dass das \ac{1P}-CLI sehr langsam ist.
Soll die Liste aller Einträge eines Vaults ausgelesen werden, dauert das nach Erfahrungen des Autors etwa eine Sekunde, da es sich hierbei um \emph{eine} Anfrage handelt.
Diese Listenansicht zeigt jedoch nur begränzte Informationen der Einträge.
Möchte man ein bestimmtes Feld eines Eintrages \(z.B. \enquote{Originale Eintrags-ID}\) in Erfahrug bringen, müssen alle Informationen eines Eintrages
abgefragt werden. Hier ist ein CLI-API-Aufruf pro Eintrag erforderlich. Sind einem*r Entwickler*in z.B. 30 Einträge zugeordnet, so dauert das Finden eines Eintrags
mit einer bestimmten originalen ID im Durchschnitt $n=30; \frac{n}{2} = 15$ Sekunden. Im langsamsten Fall wären es $n=30$ Sekunden.
Ein Kopierforgang stellt zwei Aufrufe dar (=\textit{lesen,erstellen}), also dauert das Kopieren von 30 Einträgen $n=30; 2n = 60$ Sekunden.
Das \ac{1P}-CLI kann zwar für Detail-Aufrufe mehrere Eintrags-IDs auf Standard-Input annehmen und bearbeiten, jedoch zeigen Versuche des Autors dies zu implementieren, dass das nicht die
Zeitkomplexität von $O(n)$ verändert. Das heisst, eine Anfrage für 10 Einträge zu stellen, dauert in etwa zehn mal so lange,
wie zehn Anfragen für jeweils einen Eintrag zu stellen.
Eine spätere Ergänzung, um die programmatische Auslesung der Einträge in $O(n)$ anstatt $O(n^2)$ zu gewährleisten, ist die Unterhaltung von Mapping-Objekten in Entwickler*innen-Vaults.
Je Entwickler*innen-Vault wird abschließend der Synchronisierung ein Mapping-Objekt erstellt.
Diese Mapping-Objekte halten die Informationen vorrätig, welche öffentliche \ac{1P}-\ac{UUID} zu welcher privaten \ac{1P}-\ac{UUID} gehört.
Ohne diese Mapping-Objekte müssten für jeden Eintrag in Entwickler*innen-Vaults der nach einer öffentlichen \ac{UUID} identifiziert wird (=Fremdschlüssel \enquote{Originale Eintrags-ID}), alle Einträge im Entwickler*innen-Vault
abgefragt werden, bis ein Eintrag mit \enquote{Originaler Eintrag-ID = <x>} gefunden wird.
Mit diesen Mapping-Objekten kann ein beliebiger Eintrag anhand einer öffentlichen ID
binnen zwei Anfragen erfasst werden: Anfragen des Mapping-Objektes und Anfragen des privaten Objektes.
Das entspricht einer Zeitkomplexität von $O(2n) = O(n)$.
Desweiteren kann \ac{1P} Eintragsdaten lokal zwischenspeichern.
Diese Option lässt sich mit dem Flag \textit{--cache} auf Leseoperationen verwenden
und beschleunigt das Auslesen der angefragten Informationen, soweit diese im Cache existieren.
Auf Unix-ähnlichen Betriebssystemen ist dieses Verhalten
standardmäßig aktiviert. \cite{bib:1password-cli-caching}
\subsubsection{Sicherheitsbedenken} \subsubsection{Sicherheitsbedenken}
Die Konfigurationsdatei definiert Zielvaults, nach ihren kryptsichen IDs. Anhand dieser IDs sieht ein*e Administrator*in keine Vaultnamen. Die Konfigurationsdatei definiert Zielvaults, nach ihren \acp{UUID}. Anhand dieser IDs sieht ein*e Administrator*in keine Vaultnamen.
Wenn nun aus etwaigen Gründen dort die ID eines Nutzvaults des Partnerunternehmems aufgeführt wäre, würde das Wenn nun aus etwaigen Gründen dort die ID eines Nutzvaults des Partnerunternehmems aufgeführt wäre, würde das
Werkzeug alle sich dort befindlichen Zugänge löschen. Das wäre ein Super-GAU in Form von Datenverlust. Werkzeug alle sich dort befindlichen Zugänge löschen. Das wäre ein Super-GAU in Form von Datenverlust.

View File

@@ -15,7 +15,8 @@
\acro{GUI}[GUI]{Graphical User Interface} \acro{GUI}[GUI]{Graphical User Interface}
\acro{MASA}[MASA]{Medienagenten Secret Authority} \acro{MASA}[MASA]{Medienagenten Secret Authority}
\acro{YAML}[YAML]{Yet Another Markup Language} \acro{YAML}[YAML]{Yet Another Markup Language}
%\acroplural{CMS}[CMSe]{Content Management Systeme} \acro{UUID}[UUID]{Universally Unique Identifier}
\acroplural{UUID}[UUIDs]{Universally Unique Identifiers}
% %
% %
\end{acronym} \end{acronym}

View File

@@ -15,5 +15,17 @@
Eine arrivierte Container-Engine für Anwendungsentwicklung. Eine arrivierte Container-Engine für Anwendungsentwicklung.
\item [Toolbox] \hfill \\ \item [Toolbox] \hfill \\
Eine Ansammlung an Werkzeugen, wie zum Beispiel Skripte. Eine Ansammlung an Werkzeugen, wie zum Beispiel Skripte.
\item [Öffentliche 1P-UUID] \hfill \\
Die 1P-UUID, die zu einem originalen Eintrag gehört, und nicht zu einer Referenz.
Externe Entwickler*innen haben also keinen direkten Zugriff auf einen solchen Eintrag, sondern müssen stattdessen eine Referenz auf diesen Eintrag verwenden.
Eine solche UUID kann beispielsweise in Ansible-Konfigurationdateien stehen
und von jedem*r Entwickler*in verwendet werden.
\item [Private 1P-UUID] \hfill \\
Die 1P-UUID, die zu einem Referenz-Eintrag gehört, und nicht zu einem originalen Eintrag. Diese Einträge sind emphemerisch und existieren ausschließlich
in den einzelnen Developer-Vaults und sind Entwickler*innen-spezifisch.
\item [Listenansicht / Listenaufruf] \hfill \\
Eine Anfrage, die eine Liste von Objekten oder Einträgen zurückgibt.
\item [Detailansicht / Detailaufruf] \hfill \\
Eine Anfrage, \emph{ein} Objekt oder \emph{einen} Eintrag zurückgibt oder manipuliert.
\end{description} \end{description}

View File

@@ -2,29 +2,6 @@
# Note that authors are "and"-seperated. The comma is part of the name. Like in "Etienne, Leon". # Note that authors are "and"-seperated. The comma is part of the name. Like in "Etienne, Leon".
# So if you have multiple authors, use "Peter and Werner and Mario and Johann"... # So if you have multiple authors, use "Peter and Werner and Mario and Johann"...
@article{bib:leossfc,
author = {Maral, Gérard and de Ridder, Jean-Jacques and Evans, Barry G. and Richharia, Madhavendra},
title = {Low earth orbit satellite systems for communications},
journal = {International Journal of Satellite Communications},
volume = {9},
number = {4},
pages = {209-225},
publisher = {Wiley Online Library},
doi = {https://doi.org/10.1002/sat.4600090403},
url = {https://onlinelibrary.wiley.com/doi/abs/10.1002/sat.4600090403},
eprint = {https://onlinelibrary.wiley.com/doi/pdf/10.1002/sat.4600090403},
abstract = {Abstract It may be that we are now entering the era of LEO constellation satellite communications after thirty years of domination by the GEO systems. This paper heralds the coming of the new era with a tutorial approach to the system design and trade-offs of LEO constellation system design. It discusses orbital configurations, network topologies and routeing considerations, multiple access schemes and link performance design. In so doing it brings out the major design parameters and how they interact with each other. Also considered are the service applications for the LEO constellation systems, and the important difference between real-time and delayed communication systems is highlighted. Examples of single and multi-beam (cellular) coverage system link designs are presented for L-Ka frequency bands. Future papers will consider aspects of the LEO spacecraft and launchers.},
year = {1991}
}
# Example Website
@misc{bib:typo3-frontpage,
author = {{TYPO3 Association}},
howpublished = "\url{https://typo3.org/}",
title = {{ TYPO3 — the Professional, Flexible Content Management System }},
year = {2024},
note = {Zugriff: Mai 2024}
}
@misc{bib:ansible, @misc{bib:ansible,
author = {{Red Hat, Inc.}}, author = {{Red Hat, Inc.}},
@@ -41,3 +18,11 @@
year = {2019}, year = {2019},
note = {Zugriff: Januar 2025} note = {Zugriff: Januar 2025}
} }
@misc{bib:1password-cli-caching,
author = {{1Password}},
howpublished = "\url{https://developer.1password.com/docs/cli/reference/#cache-item-and-vault-information}",
title = {{ Cache item and vault information }},
year = {2025},
note = {Zugriff: Februar 2025}
}

BIN
main.pdf

Binary file not shown.