Compare commits

..

3 Commits

Author SHA1 Message Date
7950098865
wrote more on ansible implementation 2025-02-11 15:44:39 +01:00
75d3e82db5
glossary jinja 2025-02-11 15:03:48 +01:00
8c88e3a1f2
write for technische umsetzung ansible 2025-02-11 15:02:53 +01:00
7 changed files with 75 additions and 0 deletions

View File

@ -158,4 +158,60 @@ Wenn diese Vault-ID nun in der Liste der fest kodierten Nutzvault-IDs vorkommt,
Somit ist gewährleistet, dass selbst bei einer fatalen Fehlkonfiguration kein Datenverlust entseht.
\section{Integration in Ansible}
Es ist Anforderung, dass \ac{1P}-Einträge von Entwickler*innen innerhalb von Ansible-Playbooks
dereferenziert und verwendet werden können.
\ac{1P} unterstützt nativ das Ersetzen von \ac{1P}-Referenzen in Dateien durch Secrets.
Diese Technik nennt sich \enquote{\ac{1PSA}}.
Diese Technologie ist jedoch nicht für die hier vorliegende Aufgabenstellung verwertbar, da die dem zugrunde liegende
Berechtigungsverwaltung auf Vault-Basis steht. Entweder hat ein*e Entwickler*in Zugriff auf einen gesamten Vault, oder er*sie keinen Zugriff auf den gesamten Vault.
Eine feingranularere Steuerung ist hier nicht möglich, jedoch für die hier gegebenen Anforderungen nötig. \cite{bib:1password-secrets-automation}
\ac{1PSA} erfasst \acp{UUID} und ist daher mit dem Konzept von Entwickler*innen-Vaults inkompatibel, da
Entwickler*innen hierbei eigene Kopien der originalen Einträge führen, die jeweils eigene \acp{UUID} haben.
Externe Entwickler*innen haben somit keinen Zugriff auf die originalen, öffentlichen \acp{UUID} und die privaten \acp{UUID}, die im Entwickler*innen-Vault
vorhanden sind, gelten jeweils nur für ein*e Entwickler*in. Das erfordert eine maßgeschneiderte, programmatische Lösung:
\begin{nicepic}
\includegraphics[width=0.75\textwidth]{images/docker-ansible-structure.png}
\captionof{figure}{Relationsdiagramm: Docker-Ansible-Struktur, um \ac{1P}-Einträge zu dereferenzieren}
\caption*{Quelle: Eigene Darstellung}
\label{fig:docker-ansible-structure}
\end{nicepic}
Die hierfür angedachte Architektur erfordert, dass öffentliche \acp{UUID} in Host-Konfigurationen in Docker-Ansible aufgeführt sind.
Also eine UUID, die für alle Entwickler*innen greifbar ist.
Ab hier wird die Nutzergruppe \enquote{Entwickler*innen} in zwei Untergruppen strukturiert:
\begin{description}
\item [Interne Entwickler*innen] \hfill \\
Interne, festangestellte Entwickler*innen haben Vollzugriff auf den \ac{1P} und somit auch Zugriff auf die
in den Host-Konfigurationen vermerkte, öffentliche \ac{UUID} eines Eintrages.
Da diese Entwickler*innen keinen Entwickler*innen-Vault haben, müssen sie direkt auf diese notierte, öffentliche \ac{UUID} zugreifen.
\item [Externe Entwickler*innen] \hfill \\
Externe Entwickler*innen verfügen über einen Entwickler*innen-Vault, nicht jedoch über direkten Zugriff auf die vermerkte, öffentliche \ac{UUID}.
Falls der*die jeweilige Entwickler*in Zugriff auf einen verlinkten Eintrag hat, dann nur auf eine Kopie des Eintrages in dessen*deren jeweiligen Entwickler*innen-Vaults.
Diese Kopie hat eine andere \ac{UUID} als die, die in der Host-Konfiguration steht. Sie ist ja auf technischer Ebene ein anderer Eintrag, nur mit identischem Inhalt.
Die in den Host-Konfigurationen vermerkten, öffentlichen \acp{UUID} müssen also zunächst in eine private, sich im Entwickler*innen-Vault befindliche, \ac{UUID} übersetzt werden.
Hierfür besitzen
\end{description}
Um diese Problemstellung anzugehen, wird ein Ansible Filtermodul entworfen. Ein Filtermodul dient als
Texttransformator und kann in Jinja-Templates, wie sie von Ansible verwendet werden, wie folgt verwendet werden:\\
\texttt{\{\{\ \enquote{hello world} | uppercase \}\}}.\\
\cite{bib:ansible-filter-plugins}
Dieses Beispiel führt das \enquote{uppercase}-Filtermodul an.
Ein Beispiel mit dem im Rahmen dieser Ausarbeitung bereitgestellten Filtermodul würde so aussehen:\\
\texttt{\{\{ smtp.password | resolve\_1p\_secret \}\}}.
\begin{nicepic}
\includegraphics[width=1\textwidth]{images/flowchart-resolve-1p-secret.png}
\captionof{figure}{Flussdiagramm: Businesslogik des 1P-Resolver-Filtermoduls}
\caption*{Quelle: Eigene Darstellung}
\label{fig:flowchart-filtermodule-resolve-1p-secret}
\end{nicepic}
\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.

View File

@ -17,6 +17,7 @@
\acro{YAML}[YAML]{Yet Another Markup Language}
\acro{UUID}[UUID]{Universally Unique Identifier}
\acroplural{UUID}[UUIDs]{Universally Unique Identifiers}
\acro{1PSA}[1PSA]{1Password Secrets Automation}
%
%
\end{acronym}

View File

@ -27,5 +27,7 @@
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.
\item [Jinja-Templating-Engine] \hfill \\
Eine Templating Engine, die das Jina-Format verwendet.
\end{description}

View File

@ -26,3 +26,19 @@
year = {2025},
note = {Zugriff: Februar 2025}
}
@misc{bib:1password-secrets-automation,
author = {{1Password}},
howpublished = "\url{https://developer.1password.com/docs/secrets-automation/}",
title = {{ 1Password Secrets Automation }},
year = {2025},
note = {Zugriff: Februar 2025}
}
@misc{bib:ansible-filter-plugins,
author = {{Red Hat, Inc.}},
howpublished = "\url{https://docs.ansible.com/ansible/latest/plugins/filter.html}",
title = {{ Filter plugins }},
year = {2025},
note = {Zugriff: Februar 2025}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

BIN
main.pdf

Binary file not shown.