Share via


Dapr Secret-invoerbinding voor Azure Functions

Met de Dapr-geheime invoerbinding kunt u geheimengegevens lezen als invoer tijdens de uitvoering van de functie.

Zie het overzicht van de Dapr-extensie voor meer informatie over het instellen en configureren van de Dapr-extensie.

Opmerking

U kunt een C#-functie maken met behulp van een van de volgende C#-modi:

Uitvoeringsmodel Beschrijving
Geïsoleerde werkrolmodel Uw functiecode wordt uitgevoerd in een afzonderlijk .NET-werkproces. Gebruiken met ondersteunde versies van .NET en .NET Framework. Zie .NET geïsoleerde werkprocesfuncties ontwikkelen voor meer informatie.
Model in proces Uw functiecode wordt uitgevoerd in hetzelfde proces als het Functions-hostproces. Ondersteunt alleen LTS-versies (Long Term Support) van .NET. Zie .NET-klassebibliotheekfuncties ontwikkelen voor meer informatie.
[FunctionName("RetrieveSecret")]
public static void Run(
    [DaprServiceInvocationTrigger] object args,
    [DaprSecret("kubernetes", "my-secret", Metadata = "metadata.namespace=default")] IDictionary<string, string> secret,
    ILogger log)
{
    log.LogInformation("C# function processed a RetrieveSecret request from the Dapr Runtime.");
}

In het volgende voorbeeld wordt een "RetreveSecret" functie gemaakt met behulp van de DaprSecretInput binding met de DaprServiceInvocationTrigger:

@FunctionName("RetrieveSecret")
public void run(
    @DaprServiceInvocationTrigger(
        methodName = "RetrieveSecret") Object args,
    @DaprSecretInput(
        secretStoreName = "kubernetes", 
        key = "my-secret", 
        metadata = "metadata.namespace=default") 
        Map<String, String> secret,
    final ExecutionContext context)

In het volgende voorbeeld wordt de Dapr-geheime invoerbinding gekoppeld aan een Dapr-aanroeptrigger, die is geregistreerd door het app object:

const { app, trigger } = require('@azure/functions');

app.generic('RetrieveSecret', {
    trigger: trigger.generic({
        type: 'daprServiceInvocationTrigger',
        name: "payload"
    }),
    extraInputs: [daprSecretInput],
    handler: async (request, context) => {
        context.log("Node function processed a RetrieveSecret request from the Dapr Runtime.");
        const daprSecretInputValue = context.extraInputs.get(daprSecretInput);

        // print the fetched secret value
        for (var key in daprSecretInputValue) {
            context.log(`Stored secret: Key=${key}, Value=${daprSecretInputValue[key]}`);
        }
    }
});

In de volgende voorbeelden ziet u Dapr-triggers in een function.json-bestand en PowerShell-code die gebruikmaakt van deze bindingen.

Dit is het function.json-bestand voor daprServiceInvocationTrigger:

{
  "bindings": 
    {
      "type": "daprSecret",
      "direction": "in",
      "name": "secret",
      "key": "my-secret",
      "secretStoreName": "localsecretstore",
      "metadata": "metadata.namespace=default"
    }
}

Zie de sectie Configuratie voor meer informatie over function.json bestandseigenschappen.

In code:

using namespace System
using namespace Microsoft.Azure.WebJobs
using namespace Microsoft.Extensions.Logging
using namespace Microsoft.Azure.WebJobs.Extensions.Dapr
using namespace Newtonsoft.Json.Linq

param (
    $payload, $secret
)

# PowerShell function processed a CreateNewOrder request from the Dapr Runtime.
Write-Host "PowerShell function processed a RetrieveSecretLocal request from the Dapr Runtime."

# Convert the object to a JSON-formatted string with ConvertTo-Json
$jsonString = $secret | ConvertTo-Json

Write-Host "$jsonString"

In het volgende voorbeeld ziet u een Dapr Secret-invoerbinding, die gebruikmaakt van het v2 Python-programmeermodel. De binding naast de daprServiceInvocationTrigger code van uw Python-functie-app gebruikendaprSecret:

import logging
import json
import azure.functions as func

app = func.FunctionApp()

@app.function_name(name="RetrieveSecret")
@app.dapr_service_invocation_trigger(arg_name="payload", method_name="RetrieveSecret")
@app.dapr_secret_input(arg_name="secret", secret_store_name="localsecretstore", key="my-secret", metadata="metadata.namespace=default")
def main(payload, secret: str) :
    # Function should be invoked with this command: dapr invoke --app-id functionapp --method RetrieveSecret  --data '{}'
    logging.info('Python function processed a RetrieveSecret request from the Dapr Runtime.')
    secret_dict = json.loads(secret)

    for key in secret_dict:
        logging.info("Stored secret: Key = " + key +
                     ', Value = ' + secret_dict[key])

Kenmerken

Gebruik in het procesmodel de functie voor het DaprSecret definiëren van een Dapr-geheime invoerbinding, die ondersteuning biedt voor deze parameters:

Parameter Description
SecretStoreName De naam van de geheime opslag om het geheim op te halen.
Code De sleutel die de naam van het geheim aandued.
Metagegevens Optioneel. Een matrix met metagegevenseigenschappen in het formulier "key1=value1&key2=value2".

Aantekeningen

Met de DaprSecretInput aantekening hebt u toegang tot een geheim voor uw functie.

Element Beschrijving
secretStoreName De naam van het Dapr-geheimarchief.
key De geheime sleutelwaarde.
metagegevens Optioneel. De metagegevenswaarden.

Configuratie

In de volgende tabel worden de bindingsconfiguratie-eigenschappen uitgelegd die u in de code hebt ingesteld.

Eigenschappen Description
key De geheime sleutelwaarde.
secretStoreName De naam van het geheime archief zoals gedefinieerd in het onderdeelbestand local-secret-store.yaml .
metagegevens De naamruimte van de metagegevens.

In de volgende tabel worden de bindingsconfiguratie-eigenschappen uitgelegd die u in het function.json-bestand hebt ingesteld.

function.json-eigenschap Description
key De geheime sleutelwaarde.
secretStoreName De naam van het geheime archief zoals gedefinieerd in het onderdeelbestand local-secret-store.yaml .
metagegevens De naamruimte van de metagegevens.

In de volgende tabel worden de bindingsconfiguratie-eigenschappen @dapp.dapr_secret_input uitgelegd die u in uw Python-code hebt ingesteld.

Eigenschappen Beschrijving
secret_store_name De naam van het geheime archief.
key De geheime sleutelwaarde.
metagegevens De naamruimte van de metagegevens.

Zie de sectie Voorbeeld voor volledige voorbeelden.

Gebruik

Als u de dapr-geheime invoerbinding wilt gebruiken, begint u met het instellen van een Dapr-onderdeel voor het geheimarchief. Meer informatie over welk onderdeel u moet gebruiken en hoe u dit kunt instellen in de officiële Dapr-documentatie.

Als u het daprSecret project in Python v2 wilt gebruiken, stelt u uw project in met de juiste afhankelijkheden.

  1. Een virtuele omgeving maken en activeren.

  2. Voeg in het requirements.text bestand de volgende regel toe:

    azure-functions==1.18.0b3
    
  3. Installeer de Python-bibliotheek in de terminal.

    pip install -r .\requirements.txt
    
  4. Wijzig uw local.setting.json bestand met de volgende configuratie:

    "PYTHON_ISOLATE_WORKER_DEPENDENCIES":1
    

Volgende stappen

Meer informatie over Dapr-geheimen.