sensible Daten mit Azure Key Vault sicher verwalten

apptech - deep dive - azure key vault

Der Azure Key Vault ist ein Clouddienst, welcher als zentralisierter Speicher von sensible Anwendungsinformationen dient und eine kontrollierte Verteilung dieser ermöglicht.

Das Ziel ist es, das Risiko einer unbeabsichtigten Weitergabe von Geheimnissen auf ein Minimum zu reduzieren.

Dies geschieht oftmals zwangsläufig, wenn beispielsweise Programme sich an anderen Diensten anmelden müssen, wie z.B. an einem SQL Server. In solch einem Fall lägen die Anmeldeinformationen im Programmcode offen und wären somit für einen Angreifer im Klartext ersichtlich.

Ein häufiges Beispiel sind die „web.config“ und „app.config“ Dateien, welche aus Web- bzw. Windowsapplikationen bekannt sind und Anmeldedaten lesbar speichern.

Entwickler hatten bisher die Möglichkeit, die enthaltenen Connection Strings durch IIS Tools verschlüsseln zu können, um die sensiblen Daten nach außen hin zu schützen.

Dieser Schutz ist jedoch nur so lange gegeben, bis ein Angreifer sich administrativen Zugang zu dem System verschafft und somit die geschützten Connection Strings wieder entschlüsseln kann.

Mit dem Azure Key Vault bekommen Entwickler die Möglichkeit, sensible Informationen auszulagern und über URIs abzurufen, so dass diese zu keinem Zeitpunkt für Angreifer offen liegen.

Zusammenfassend stellt die folgende Tabelle die Vor- und Nachteile gegenüber:

Methoden
Gegebene Sicherheit / Vorteile
Nachteile

Unverschlüsselte Connection Strings

verschlüsselte Connection Strings

Abruf über Azure Key Vault

keine Vorteile bzgl. Sicherheit

ausreichende Sicherheit, da sensible Daten verschlüsselt vorliegen

hohe Sicherheit, da ein Angreifer mehrere Hürden überwinden muss, um Abfragen von Geheimnissen tätigen zu können.

sensible Daten sind im Klartext einsehbar

Sicherheit nur so lange gegeben, sofern der Angreifer keinen administrativen Zugriff auf das System erlangt

Sofern der Dienst in der Cloud betrieben wird, werden die Abfragen immer mit Kosten verbunden sein.

Es besteht außerdem das Risiko eines Betriebsstopps, sobald keine Internetverbindung besteht.

Neben dem beschriebenen Secret Management, umfassen die Vorteile des Key Vaults auch noch das sogenannte Key Management, welches zum Generieren und Verwalten von Schlüsseln eingesetzt werden kann, sowie dem Certificate Management, mit welchem SSL bzw. TLS Zertifikate bereitgestellt, verwaltet und deployed werden können.

Über die Erweiterung Azure Stack, lässt sich die Key Vault Funktion auch On-Premise betreiben, um die Verfügbarkeit der gesicherten Informationen auch im Falle eines Internetausfalls zu gewährleisten.

Anlegen einer Ressourcengruppe

Dazu muss zunächst in Azure eine Ressourcengruppe angelegt werden. Dies kann über mehrere Wege geschehen, wie z.B. per Powershell, oder sogar Python und Java. Das hier aufgeführte Bespiel nutzt das Boardmittel von Azure, der sogenannten Azure Cloud Shell.

In der rechten oberen Ecke im Azure Portal lässt sich diese öffnen und im Browser bedienen.

akv-01

Am unteren Bildschirmrand erscheint nun ein Fenster - hier "Bash" auswählen

akv-02

Es kann sein, dass dem aktuellen Benutzer bisher kein Speicherplatz zugewiesen wurde. Dies kann im folgenden Fenster nachgeholt werden über die Schaltfläche „Create“.

akv-03

Eine Ressourcengruppe ist ein logischer Container, welcher Azure Ressourcen bereitstellt und verwaltet. In diesem Beispiel wird die Ressourcengruppe KeyVaultSample am Standort germanywestcentral erstellt.

HINWEIS: Die Befehlsbeispiele lassen sich im Browser per Strg + Shift + V einfügen.

akv-04

az group create --name "KeyVaultSample" --location germanywestcentral

Erstellen einer Key Vault Instanz

Als nächstes wird innerhalb der Ressourcengruppe eine Key Vault (Schlüsseltresor)-Instanz erstellt, welche in diesem Beispiel KeyAtVaultTest-01 genannt wurde.

Mit diesem Schritt wird auch die Key Vault URI ausgehändigt, über welche sich später die Geheimnisse abrufen lassen. Die zugeteilte URI ist immer nach dem selben Schema aufgebaut (https://.vault.azure.net/) – die hier ausgestellte URI lautet demnach: https://keyvaultattest-01.vault.azure.net/.

akv-05

az keyvault create --name "KeyVaultAtTest-01" --resource-group "KeyVaultSample" --location germanywestcentral

Ein Geheimnis hinzufügen

Im nächsten Schritt kann dem Key Vault nun ein Geheimnis hinzugefügt werden. Geheimnisse bestehen immer aus einem Namen, über welchen die Informationen später abgerufen werden und dem Geheimnis selbst.

In diesem Beispiel, heißt das Geheimnis PasswordSample, und das hinterlegte Passwort ABCDE12345abcde12345.

akv-06

az keyvault secret set --vault-name "KeyVaultAtTest-01" --name "PasswordSample" --value "ABCDE12345abcde12345"

Um das gesetzte Geheimnis nun abrufen können, müssen in Azure selbst, weitere Vorbereitungen getroffen werden. Diese sind notwendig, um später Token erzeugen zu können, welche benötigt werden um die Geheimnisse ausgehändigt zu bekommen.

Hierzu muss zunächst eine App angelegt werden, was im Portal über den Menüpunkt „Azure Active Directory“ geschieht.

akv-07

Dort angekommen erhält man auf der linken Seite über den Menüpunkt "App registrations" die Möglichkeit, per "New registration" eine App anzulegen.

akv-08

Im darauf erscheinenden Formular wird zunächst der Name (hier KeyVaultTestApplication) und die unterstützten Accounttypen festgelegt, welche im Anschluss die Geheimnisse abrufen dürfen. Hier empfiehlt sich die erste Option, welche nur Accounts aus der Firmeneigenen Struktur (Single tenant) zulässt.

Abschließend kann die App per „Register“ angelegt werden

akv-09

Der soeben erstellten App wurde nun automatisch eine Client-ID, Tenant-ID und eine Object-ID zugewiesen. Um ein Token erzeugen zu können bzw. ein Geheimnis abzufragen, wird die Client-ID und die Tenant-ID benötigt, welche im Übersichtsfenster der App angezeigt werden.

Der App selbst muss im nächsten Schritt ein Secret zugewiesen werden, welches benötigt wird, um ein Token erzeugen zu können. Die geschieht auf der linken Seite über den Menüpunkt „Certificates & secrets“

akv-10

Über den Menüpunkt „New client secret“ gelangt man zum Formular, über welches sich Einstellungen zum Secret festlegen lassen:

akv-11

Dort angekommen, lässt sich dem Secret eine Beschreibung (hier KeyVaultTestApplicationSecret) und ein Ablaufdatum zuweisen. Per „Add“ wird das Secret anschließend generiert:

akv-12

Es empfiehlt sich, dass nun angezeigte Secret zu notieren / kopieren, da es zu einem späteren Zeitpunkt nicht mehr einsehbar ist.

akv-13

Ressource mit App verknüpfen

Als nächstes muss die zu Beginn erstellte Ressource (in diesem Beispiel KeyVaultAtTest-01) mit der soeben angelegten App verknüpft werden. Dazu navigiert man im Azure Portal zunächst auf den Menüpunkt „All resources“ und wählt anschließend seine Ressource aus.

akv-14
akv-15

Es erscheint ein Menü, über welches sich Einstellungen zu der Ressource vornehmen lassen. Über die Option „Access policies“ können Nutzer und Apps berechtigt werden, welche auf die Ressource zugreifen können.

akv-16

Per „Add Access Policy“ können über das erscheinende Formular neue Berechtigungen verteilt werden.

akv-17

Hier müssen zunächst die Berechtigungen ausgewählt werden, in diesem Beispiel wurden alle erteilt. Im Feld „Select principal“ kann anschließend die App gesucht und ausgewählt werden. Abschließend wird per „Add“ die Policy angelegt.

akv-18

Im nächsten Schritt ist zu beachten, dass diese Änderung nochmals gespeichert werden muss, andernfalls verfallen die vorherigen Einstellungen wieder.

akv-19

Somit sind alle grundlegenden Einstellungen zur Nutzung des Key Vaults getroffen worden. Um zu testen ob alles funktioniert, kommt das Tool Postman zum Einsatz, welches in der Lage ist Anfragen an Web APIs zu stellen und Antworten auszuwerten

Key Vault Geheimnis abfragen

Bevor vom Key Vault ein Geheimnis abgefragt werden kann, wird ein Token benötigt, welches wie folgt mit Postman ausgehändigt werden kann.

Über das „+“-Symbol im Hauptmenü, kann ein neuer Tab geöffnet werden.

akv-20

Hier muss zunächst im Dropdownmenü die POST-Methode ausgewählt werden.

akv-21

Im Reiter „Body“ muss dann die Option „form-data“ ausgewählt werden.

akv-22

An dieser Stelle kommen die zuvor notierte Client-ID, Tenant-ID und das App Secret zum Einsatz. In der URL Leiste wird zuerst die Microsoft eigene URL eingetragen, welche Token aushändigt. Diese ist wie folgt aufgebaut:

https://login.windows.net//oauth2/token

Im „form-data“-Bereich muss zusätzlich noch der Body, entsprechend der folgenden Tabelle, aufgebaut werden:

KEY VALUE
grant_type client_credentials
client_id <Client-ID>
resource https://vault.azure.net
client_secret <App Secret>

 

Anschließend kann über den Button „Send“ nun ein Token angefragt werden.

akv-23

Das Token wird dann im Ausgabefeld angezeigt, welches für den nächsten Schritt herauskopiert werden muss.

akv-24

Um nun ein Geheimnis aus dem Key Vault abzufragen, wird in Postman wie zuvor über das „+“-Symbol ein neuer Tab geöffnet.

akv-25

Im Dropdownmenü wird nun die GET-Methode benötigt, um Informationen aus dem Key Vault zu empfangen. Die URL wurde zuvor beim Erstellen der Key Vault Instanz ausgehängt und ist wie folgt aufgebaut:

http://<Key_Vault_Instanzname>.vault.azure.net/secrets/<Geheimnisname>

In diesem Beispiel lautet die URL demnach:

https://keyvaultattest-01.vault.azure.net/secrets/PasswordSample

Unter dem Reiter „Params“ muss zusätzlich noch, entsprechend der folgenden Tabelle, die API-Version übergeben werden.

KEY VALUE
api-version 7.0

 

akv-26

Unter dem Reiter „Authorization“ muss abschließend noch der Token Typ im Dropdownmenü auf „Bearer Token“ umgestellt und im rechten Feld das zuvor kopierte Token eingetragen werden. Über den Button „Send“ wird nun das Geheimnis aus dem Key Vault abgefragt.

akv-27

Dieses befindet sich in der ersten Zeile unten im Ausgabefeld.

akv-28