webentwicklung-frage-antwort-db.com.de

So ordnen Sie die Azure-Funktionsgeheimnisse von Key Vault automatisch zu

Ich habe mich gefragt, ob es möglich ist, den Warteschlangentrigger oder sogar den Blob-Trigger aus einer Verbindungszeichenfolge zu initialisieren, die aus dem Azure-Vault gelesen wird. 

Im Moment müssen wir diese Datenverbindung über Umgebungseinstellungen über Blade-Eigenschaften einstellen. Ich wollte jedoch nur den Dienstprinzipal verwenden, um das Token für den Azure-Schlüssel-Tresor abzurufen, um alle diese Verbindungszeichenfolgen abzurufen.

Ich versuche herauszufinden, wie man dies in Java zum Laufen bringt.

Danke, Derek

4
darewreck

Diese Funktion wird hier verfolgt und ausgeführt:

EDIT 28/11/2018: Es befindet sich aktuell in der Vorschau

Frühere Antwort 10.07.2014 Diese Lösung funktioniert nicht für Trigger, die den Verbrauchsplan verwenden.

In der Zwischenzeit habe ich einige Nachforschungen zu Ihrem Problem durchgeführt und es ist möglich, die Konfiguration des Schlüssels zu lesen, wenn Sie die Azure-Funktion v2 verwenden.

Ich habe in Visual Studio eine Azure Functions V2 (.NET Standard) erstellt.

Es verwendet:

  • NETStandard.Library v2.0.3
  • Microsoft.NET.Sdk.Functions v1.0.22
  • Microsoft.Azure.WebJobs v3.0.0
  • Microsoft.Azure.WebJobs.Extensions.Storage v3.0.0

Da Azure Functions v2 ASP.NET-Kern verwendet, konnte ich auf diesen Link verweisen, um meine Funktions-App für die Verwendung von Azure Key Vault zu konfigurieren:

Azure Key Vault-Konfigurationsanbieter in ASP.NET Core

  1. Ich habe dieses Nuget-Paket hinzugefügt:

Ich habe meine App für die Verwendung dieses Nuget-Pakets konfiguriert:

using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using System.Linq;

[Assembly: WebJobsStartup(typeof(FunctionApp1.WebJobsExtensionStartup), "A Web Jobs Extension Sample")]
namespace FunctionApp1
{
    public class WebJobsExtensionStartup : IWebJobsStartup
    {
        public void Configure(IWebJobsBuilder builder)
        {
            // Gets the default configuration
            var serviceConfig = builder.Services.FirstOrDefault(s => s.ServiceType.Equals(typeof(IConfiguration)));
            var rootConfig = (IConfiguration)serviceConfig.ImplementationInstance;

            // Creates a new config based on the default one and adds the keyvault configuration builder
            var keyvaultName = rootConfig["keyVaultName"];
            var config = new ConfigurationBuilder()
                .AddConfiguration(rootConfig).AddAzureKeyVault($"https://{keyvaultName}.vault.Azure.net/").Build();

            // Replace the existing config
            builder.Services.AddSingleton<IConfiguration>(config);
        }
    }
}

Meine Azure-Funktionen verwenden MSI:

 Azure Functions - Managed Service Identity

Ich habe der Funktions-App in meinem Schlüssel-Tresor Berechtigungen zum Lesen/Auflisten von Geheimnissen erteilt:

Ich habe eine kleine Warteschlangenfunktion:

public static class Function2
{
    [FunctionName("Function2")]
    public static void Run([QueueTrigger("%queueName%", Connection = "queueConnectionString")]string myQueueItem, ILogger log)
    {
        log.LogInformation($"C# Queue trigger function processed: {myQueueItem}");
    }
}

Die Variable queueName ist in der Datei local.settings.json (App-Blade nach der Bereitstellung) definiert:

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet",
    "keyVaultName": "thomastestkv",
    "queueName": "myqueue"
  }
}

Die queueConnectionString ist in meinem Keyvault konfiguriert:

 Azure Key Vault - Secrets

8
Thomas

Ich habe es gerade in Java implementiert, indem ich unten zwei Referenzen verweise.

  1. https://docs.Microsoft.com/de-de/Azure/app-service/app-service-key-vault-references

  2. https://medium.com/statuscode/getting-key-vault-secrets-in-Azure-functions-37620fd20a0b

verwenden Sie in Java System.getenv ("SECRET_KEY"), um die Werte aus Ihren App-Einstellungen zu lesen.

Gerne helfen, wenn Sie weitere Hilfe benötigen.

0
T D

Dies wurde vor wenigen Tagen als preview veröffentlicht.

Diese Funktion erfordert eine vom System zugewiesene verwaltete Identität für Ihre App. Später in diesem Beitrag werde ich über vom Benutzer zugewiesene Identitäten sprechen, aber wir halten diese Vorschau zunächst für getrennt.

Anschließend müssen Sie in Ihrem Key Vault eine Zugriffsrichtlinie konfigurieren, die Ihrer Anwendung die GET-Berechtigung für Geheimnisse erteilt. Erfahren Sie, wie Sie eine Zugriffsrichtlinie konfigurieren.

Legen Sie zum Schluss den Wert einer beliebigen Anwendungseinstellung auf eine Referenz des folgenden Formats fest:

@ Microsoft.KeyVault (SecretUri = secret_uri_with_version)

Dabei ist secret_uri_with_version der vollständige URI für ein Geheimnis in Key Vault. Das wäre zum Beispiel so: https://myvault.vault.Azure.net/secrets/mysecret/ec96f02080254f109c51a1f14cdb1931

Keyvault-Integration innerhalb der Funktionslaufzeit verwenden

0
MrBrooks