Kürzlich standen wir vor der Herausforderung Passwörter in einer Logic App zu verwenden. Damit diese nicht lesbar in der JSON Datei liegen, sollten sie im Key Vault abgelegt werden. Da das bei uns für einige Verwirrung gesorgt hat, schreibe ich hier unsere Erkenntnisse nieder.

Was sind Logic Apps und Key Vaults?

Logic Apps sind ein Dienst, der ohne Programmierkenntnisse die Automatisierung und Orchestrierung von Aufgaben, Geschäftsprozessen und Workflows unterstützt. So kann man bspw. SharePoint Workflows erstellen, Daten vom FTP Server in Azure Storage verschieben, oder Events aus Salesforce oder SAP lösen weitere Aktionen in anderen Systemen aus.

Key Vaults sind Tresore für Schlüssel und Zertifikate. Diese dienen dem sicheren Speichern und Zugreifen auf Secrets. Key Vaults können Softwarebasiert, oder gestützt durch Hardware Security Module (HSM) genutzt werden. So müssen z.B. Passwörter nicht im Quellcode hinterlegt werden.

Bereitstellung von Logic Apps mit Parametern aus Key Vaults

Da es aktuell noch keine offizielle Key Vault Integration in der Logic App gibt, muss man derzeit auf Infrastructure as Code zurückgreifen. D.h. die Bereitstellung des Services erfolgt über ARM Templates. Dabei werden die Dienste in deskriptiven JSON Dateien definiert und können anschließend nachvollziehbar und standardisiert deployed werden. Diese Form der Bereitstellung ist nicht das große Problem, verhält sich hier jedoch doch etwas speziell.

Die Parameter sorgen für Verwirrung

Damit die Parameter in den Logic Apps verwendet werden können müssen sie an mehreren Stellen definiert und übergeben werden. Hinsichtlich der Einbindung der Secrets aus KeyVault hat genau das uns einige Zeit gekostet.

Zunächst müssen die Parameter für das ARM Template selbst definiert werden. Hier hat dieser noch keinen Inhalt.

 

ARM Parameter definieren

Die Inhalte der Parameter aus dem ARM Template übergeben wir dann an die Parameter der Logic App. Damit eindeutig ist, wann wir einen ARM Parameter übergeben und wann der Logic App Parameter verwendet wird, wurde der Name entsprechend angepasst.

Nun können wir den Parameter in den Definition der Logic Apps verwenden. Achtung, hier wird eine andere Syntax verwendet!

Verwendung der Parameter in der Logic App

Schließlich belegen wir während des Deployments den Wert des Parameters mit dem Wert aus der Key Vault.

Natürlich kann man das auch direkt in der Parameters-JSON erledigen.

Ein paar Gedanken zu dem Workaround

Vorsicht Ablauf Logdateien: Wenn man den Wert bspw. für einen HTTP Request verwendet, dann kann man den Wert eines Secrets ggf. aus den Ablaufdateien der Logic App auslesen. Deshalb sollte man den Zugriff auf die Logic Apps mit Role Based Access Control (RBAC) weitestgehend einschränken.

Vorsicht bei Passwortaktualisierung: Der Wert aus der Key Vault wird nur während der Bereitstellung einmalig ausgelesen. Ändert sich der Wert muss das Deployment erneut ausgeführt werden.

Vorsicht Key Vault Berechtigungen: Key Vaults sind ebenfalls besonders zu schützen. Deshalb kann man Logic Apps mit einer Managed Service Identity ausstatten und dieser dann den Zugriff auf die Key Vault geben.

Fazit

Wir hoffen darauf, dass die Logic Apps bald die Verwendung von Key Vaults als Konnektor unterstützen. Bis dahin ist dieser Ansatz ein kleiner Workaround. Dennoch gilt es einige Punkte zu beachten. Haben Sie Fragen dazu? Dann sprechen Sie uns an. Wir unterstützen Sie gerne.