Compare commits
3 Commits
01a0a603d3
...
7950098865
Author | SHA1 | Date | |
---|---|---|---|
7950098865 | |||
75d3e82db5 | |||
8c88e3a1f2 |
@ -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.
|
||||
|
@ -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}
|
||||
|
@ -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}
|
||||
|
||||
|
@ -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}
|
||||
}
|
||||
|
BIN
images/docker-ansible-structure.png
Normal file
BIN
images/docker-ansible-structure.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 41 KiB |
BIN
images/flowchart-resolve-1p-secret.png
Normal file
BIN
images/flowchart-resolve-1p-secret.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 103 KiB |
Loading…
x
Reference in New Issue
Block a user