Blog
Dreiklang der Geheimnisverwaltung - VM, Vault, Artifactory

Die Verwaltung von Geheimnissen ist etwas, das in Ihrer Infrastruktur oft schwer zu implementieren ist. Noch schwieriger wird es, wenn Sie mit Artefakten arbeiten müssen, die vertraulich oder privat sind. In diesem Artikel erfahren Sie, wie Sie dieses Problem angehen und wie Sie es lösen können.
Die Herausforderung
Die Herausforderung besteht darin, Artefakte aus der JFrog Artifactory von einer virtuellen Maschine (VM) in der Google Cloud (GCP) abzurufen und dabei eine Art von Authentifizierungs- und Autorisierungsmechanismus (IAM) zu verwenden. Da Fehlkonfigurationen und unerwartete Ereignisse in der Cloud sehr häufig vorkommen(csa-review ), ist es am besten, den Zugriff mit einem Token zu validieren, das, wenn es entdeckt wird, einen begrenzten Wert hat.
Die Auflösung
HashiCorp Vault (HV) wird als Geheimnisverwalter eingesetzt, der Zugangstoken mit einer sehr begrenzten Lebenszeit (TTL) verteilen kann. Dies ist keine Funktionalität, die JFrag Artifactory von sich aus bietet.
Um HashiCorp Vault in die Lage zu versetzen, diesen Wert zu liefern, muss eine Integration mit den beiden anderen beteiligten Parteien erfolgen: JFrog Artifactory und eine VM auf GCP.
Der Konzeptnachweis
In unserem Proof of Concept (PoC) haben wir bewiesen, dass diese Integration sehr einfach ist, sogar in einer Multi-Cloud-Konfiguration, und dass die ephemere Access-Token-Funktionalität von HashiCorp Vault bereitgestellt werden kann.
Nachfolgend stellen wir Ihnen das Design des PoC genauer vor und liefern Code-Schnipsel, um dies für Ihre eigene Lösung zu tun.
Das PoC-Design
Das Ziel des PoC ist es, zu verstehen, wie kompliziert es ist, einen Dienst auf Google Cloud (GCP) laufen zu lassen, der sich mit JFrog Artifactory auf Azure mit einem Zugriffstoken authentifiziert, das von Hashicorp Vault ebenfalls auf Azure in einer anderen Umgebung abgerufen wird.
Der Dienst auf GCP könnte alles sein, was einem Computer ähnelt, der ein Artefakt, in diesem Fall eine kleine Textdatei, aus JFrog Artifactory abrufen oder holen muss.
Für diese PoC-Lösung haben wir Jfrog Artifactory(Version 107.47.11) auf einem Kubernetes Cluster innerhalb von Azure installiert und separat Hashicorp Vault(Version 1.12.2) ebenfalls auf Azure, um eine separate Umgebung zu simulieren.
Die Funktionalität, die wir nachweisen wollen, besteht darin, dass wir ein ephemeres Zugriffstoken von Hashi Corp Vault abrufen, um den Zugriff auf JFrog Artifactory anzufordern, damit das Artefakt von einer virtuellen Maschine in GCP abgerufen werden kann.
Die PoC Schlussfolgerung
JFrog Artifactory hat den Code für die Integration mit Hashicorp Vault auf GitHub in Form eines Plugins veröffentlicht. Es ist wichtig zu erwähnen, dass die Integration von Artifactory und Vault auch ohne das bereitgestellte Plugin einfach zu bewerkstelligen war. Es waren nur einige wenige Zeilen Code erforderlich. Das mitgelieferte Plugin hat es nur ein bisschen einfacher gemacht.
Der meiste Aufwand wurde für die Einrichtung der Lösungskomponenten wie der Infrastruktur, auf der Vault läuft, und die Einrichtung von Artifactory aufgewendet. In einer realen Situation in Ihrem Unternehmen sind diese Komponenten wahrscheinlich bereits vorhanden, konfiguriert und in Betrieb. Daher lautet unsere Schlussfolgerung, dass die Integration aus technischer Sicht sehr einfach sein sollte.

Forschungsfragen
Für diesen PoC gab es einige Fragen, auf die wir eine Antwort haben wollten.
- Ist die Integration zwischen Hashicorp Vault und JFrog Artifactoryout out of the box einfach zu implementieren, oder ist viel eigener Code erforderlich, damit die Integration funktioniert?
- Ist die Integration zwischen Hashicorp Vault auf Azure und einer VM auf GCP in Bezug auf Komplexität und Latenz realistisch oder sind zusätzliche Infrastrukturkomponenten wie VPC oder Squid erforderlich, um die Verbindung zu ermöglichen?
- Ist die Integration zwischen Azure und GCP möglich, mit VPC und Squid dazwischen?
- Unterstützt Hashicorp Vault ephemere Zugriffstoken, oder wie groß ist der Bereich der Time-To-Live (TTL) Konfiguration?
Hindernis - TLS
Das erste Hindernis, auf das wir gestoßen sind, ist die Tatsache, dass Jfrog Artifactory nicht mit aktivierter Transport-Layer-Security (TLS) ausgeliefert wird. Dies ist notwendig, weil es sonst keine Möglichkeit gibt, eine sichere Kommunikationsverbindung zwischen Artifactoy und dem Vault herzustellen.
Jfrog Artifactory verfügt über eine Standardfunktion zur einfachen Integration mit Hashicorp Vault, aber diese Funktion erfordert die Aktivierung von TLS. Wir haben dies getan, indem wir TLS über die YAML-Datei aktiviert haben, die als Konfiguration für die Installation von Artifactory über Helm verwendet werden kann. Durch die Aktivierung dieser Funktion konnten wir die http-Verbindung zur Webanwendung nicht herstellen. Für die Verwendung von https mussten wir eine zertifizierte Behörde konfigurieren, die sich mit einem auf dem lokalen Gerät installierten Zertifikat verbindet. Da dies den Rahmen sprengen würde, haben wir dies nicht in den POC aufgenommen.
Hindernis - Integration
Das zweite Hindernis, auf das wir gestoßen sind, ist die Tatsache, dass Sie im Moment noch ein Zugriffstoken in Jfrog Artifactory erstellen und dieses Token in Hashicorp Vault speichern müssen. Dies geschieht im Moment noch manuell.
Es gibt ein zusätzliches Plugin für Vault, das Jfrog auf seiner GitHub-Seite pflegt, um Vault mit Jfrog Artifactory zu verbinden und Vault die Erstellung und Speicherung von Zugriffstoken zu überlassen. In Ascension erstellt dieses Plugin ein neues Token und sendet es an Jfrog, um Artifactory mitzuteilen, dass dies das neue Zugriffstoken ist, das verwendet werden soll.
Wir haben es nicht zum Laufen gebracht, da es sehr schwierig ist, dieses Plugin in den richtigen Ordner auf dem richtigen Container innerhalb des Vault Kubernetes Clusters zu bekommen. Sie müssen einen zusätzlichen Container erstellen, der das Plugin auf einen separaten Speicher herunterlädt, diesen Speicher mit dem Container verbinden und die Datei im richtigen Plugin-Ordner für den Vault ablegen.
server:
extraInitContainers:
- name: jfrogapp
image: "alpine"
command: [sh, -c]
args:
- cd /tmp &&
wget https://github.com/jfrog/artifactory-secrets-plugin/releases/download/v0.1.2/artifactory-secrets-plugin_0.1.2_linux_amd64.zip -O artifactory-secrets-plugin.zip &&
unzip artifactory-secrets-plugin.zip &&
mv artifactory-secrets-plugin_v0.1.2 /usr/local/libexec/vault/artifactory &&
chmod +x /usr/local/libexec/vault/artifactory
volumeMounts:
- name: plugins
mountPath: /usr/local/libexec/vault
volumes:
- name: plugins
emptyDir: {}
# volumeMounts:
# - mountPath: /usr/local/libexec/vault
# name: plugins
# readOnly: true
volumeMounts:
- mountPath: /usr/local/libexec/vault
name: plugins
standalone:
config: |
plugin_directory = "/usr/local/libexec/vault"
ui = true
listener "tcp" {
tls_disable = 1
address = "[::]:8200"
cluster_address = "[::]:8201"
# Enable unauthenticated metrics access (necessary for Prometheus Operator)
#telemetry {
# unauthenticated_metrics_access = "true"
#}
}
storage "file" {
path = "/vault/data"
}
# Example configuration for using auto-unseal, using Google Cloud KMS. The
# GKMS keys must already exist, and the cluster must have a service account
# that is authorized to access GCP KMS.
#seal "gcpckms" {
# project = "vault-helm-dev"
# region = "global"
# key_ring = "vault-helm-unseal-kr"
# crypto_key = "vault-helm-unseal-key"
#}
# Example configuration for enabling Prometheus metrics in your config.
#telemetry {
# prometheus_retention_time = "30s",
# disable_hostname = true
#}
Beantwortete Fragen
- Die Integration von Artifactory zu Hashicorp Vault ist relativ einfach, für die Integration von Hashicorp Vault zu Artifactory ist ein wenig eigener Code erforderlich.
# Name of file values.yaml (Jfrog Artifactory HELM config) access: accessConfig: security: tls: true - Die VM auf GCP muss nur eine Curl- oder Invoke-Webrequest-Anfrage an den Tresor stellen, um das Token abzurufen, es ist keine Integration erforderlich. Andererseits sind Sie über das offene Internet verbunden, so dass eine geringe Latenz auftreten kann. Dies muss noch weiter getestet werden. (siehe Codeschnipsel)
- Der Zertifikatsteil dieser Lösung erfordert einige Arbeit, da wir eine Zertifizierungsstelle für den Zertifikatsaustausch benötigen. Ein Reverse-Proxy mit Squid kann uns dabei helfen, dieses Ziel zu erreichen.
- Hashi Corp Vault verfügt über eine Funktion, mit der Sie den Lebenszyklus eines Tokens konfigurieren können. Wenn die TTL eines Tokens z.B. 30 Minuten beträgt und die maximale TTL 24 Stunden, können Sie den Token erneuern, bevor die 30 Minuten erreicht sind. Sie können den Token mehrmals erneuern, wenn Sie ihn verwenden. Sobald der Token jedoch die 24 Stunden seiner ersten Erstellung erreicht hat, können Sie ihn nicht mehr erneuern.
Code-Schnipsel
TOKEN=$(curl -H "X-Vault-Token: hvs.fLQP2KrR1i12OIXlZemRY5II"
-X GET http://20.86.213.41:8200/v1/secret/data/artifactory -s |
jq -r '.data.data.access_token')
URL=$(curl -H "X-Vault-Token: hvs.fLQP2KrR1i12OIXlZemRY5II"
-X GET http://20.86.213.41:8200/v1/secret/data/artifactory -s |
jq -r '.data.data.url')
URLFILE=$(echo "$URL""/example-repo-local/test.txt.txt")
curl -u admin:$TOKEN $URLFILE -k
OUTCOME >> dit is een test
Sharing Knowledge
Die Kernwerte von Xebia sind: Menschen zuerst, Wissen teilen, Qualität ohne Kompromisse und Kundennähe. Aus diesem Grund wird dieser Blogeintrag unter der Lizenz Creative Commons Attribution-ShareAlike 4.0 veröffentlicht.
Verfasst von
Maikel van Amen
I am the Walter White of Cloud Security Engineering, breaking bad security measures and ensuring your infrastructure is secure from all kinds of intruders. I focus on Microsoft Azure and love to play with vulnerability management, secret management, and identity and access management - it's like cooking up the perfect recipe! When I'm not cooking up a storm in the Cloud Security lab, you can find me on the football pitch, coaching young players and scoring some goals of my own.
Unsere Ideen
Weitere Blogs
Contact



