web-dev-qa-db-fra.com

Comment mapper automatiquement les secrets Azure Functions de Key Vault

Je me demandais s'il était possible d'initialiser le déclencheur de la file d'attente ou même le déclencheur blob d'une chaîne de connexion lue à partir du coffre Azure. 

À l'heure actuelle, nous devons définir ces connexions de données via les paramètres d'environnement via les propriétés de la lame. Toutefois, je souhaitais simplement utiliser le principal du service pour récupérer le jeton du coffre-fort de clés Azure afin d'obtenir toutes ces chaînes de connexion.

J'essaie de comprendre comment faire fonctionner cela en Java.

Merci, Derek

4
darewreck

Cette fonctionnalité est suivie et en cours ici:

EDIT 28/11/2018: Il est actuellement en aperçu

Ancienne réponse 07/10/2018 Cette solution ne fonctionnera pas pour les déclencheurs utilisant le plan de consommation.

Entre-temps, j'ai effectué des recherches sur votre problème et il est possible de lire config depuis le coffre des clés si vous utilisez Azure Function v2.

J'ai créé Azure Functions v2 (.NET Standard) à partir de Visual Studio.

Il utilise:

  • 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

Azure Functions v2 utilisant le noyau ASP.NET, j'ai pu référencer ce lien pour configurer mon application de fonctions afin qu'elle utilise Azure Key Vault:

Fournisseur de configuration Azure Key Vault dans ASP.NET Core

  1. J'ai ajouté ce paquet de pépites:

J'ai configuré mon application pour utiliser ce package de pépites:

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);
        }
    }
}

Mes fonctions Azure utilisent MSI:

 Azure Functions - Managed Service Identity

J'ai accordé des autorisations de lecture/liste de secrets à l'application de fonction sur mon coffre-fort:

J'ai une petite file d'attente déclenchée:

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}");
    }
}

La queueName est définie dans le fichier local.settings.json (le lame de paramètres d'application une fois déployée):

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

La queueConnectionString est configurée dans mon keyvault:

 Azure Key Vault - Secrets

8
Thomas

Je viens de l'implémenter en Java en suivant ci-dessous deux références.

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

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

sous Java, utilisez System.getenv ("SECRET_KEY") pour lire les valeurs dans les paramètres de votre application.

Heureux de vous aider si vous avez besoin d'aide supplémentaire.

0
T D

Ceci vient d'être publié sous le nom preview il y a quelques jours.

Cette fonctionnalité nécessite une identité gérée attribuée par le système pour votre application. Plus tard dans cet article, je parlerai des identités attribuées par l'utilisateur, mais nous gardons ces aperçus séparés pour le moment.

Vous devrez ensuite configurer une stratégie d'accès sur votre coffre-fort, qui donnera à votre application l'autorisation GET pour les secrets. Apprenez à configurer une stratégie d'accès.

Enfin, définissez la valeur de tout paramètre d'application sur une référence du format suivant:

@ Microsoft.KeyVault (SecretUri = secret_uri_with_version)

Où secret_uri_with_version est l'URI complet d'un secret dans Key Vault. Par exemple, cela pourrait ressembler à: https://myvault.vault.Azure.net/secrets/mysecret/ec96f02080254f109c51a1f14cdb1931

Utilisation de l'intégration Keyvault dans le runtime de la fonction

0
MrBrooks