Utveckla Azure AI-tjänstprogram med Key Vault

Lär dig hur du utvecklar Azure AI-tjänstprogram på ett säkert sätt med hjälp av Azure Key Vault.

Key Vault minskar risken för att hemligheter kan läcka ut av misstag, eftersom du undviker att lagra säkerhetsinformation i ditt program.

Förutsättningar

Kommentar

Läs dokumentationen och snabbstartsartiklarna för den Azure AI-tjänst som du använder för att få en förståelse för:

  • Autentiseringsuppgifterna och annan information som du behöver för att skicka API-anrop.
  • De paket och den kod du behöver för att köra programmet.

Hämta dina autentiseringsuppgifter från din Azure AI-tjänstresurs

Innan du lägger till information om dina autentiseringsuppgifter i ditt Azure-nyckelvalv måste du hämta dem från azure AI-tjänstresursen. Om din tjänst till exempel behöver en nyckel och en slutpunkt hittar du dem med hjälp av följande steg:

  1. Gå till din Azure-resurs i Azure-portalen.

  2. Välj Nycklar och slutpunkt i menyn som kan komprimeras till vänster.

    A screenshot showing the key and endpoint page in the Azure portal.

Vissa Azure AI-tjänster kräver olika information för att autentisera API-anrop, till exempel en nyckel och region. Se till att hämta den här informationen innan du fortsätter.

Lägga till dina autentiseringsuppgifter i nyckelvalvet

För att programmet ska kunna hämta och använda dina autentiseringsuppgifter för att autentisera API-anrop måste du lägga till dem i dina nyckelvalvshemligheter.

Upprepa de här stegen för att generera en hemlighet för varje nödvändig resursautentiseringsuppgift. Till exempel en nyckel och en slutpunkt. Dessa hemliga namn används senare för att autentisera ditt program.

  1. Öppna en ny webbläsarflik eller ett nytt fönster. Gå till ditt nyckelvalv i Azure-portalen.

  2. Välj Objekthemligheter> i menyn som kan komprimeras till vänster.

  3. Välj Generera/Importera.

    A screenshot showing the key vault key page in the Azure portal.

  4. På skärmen Skapa en hemlighet anger du följande värden:

    Name Värde
    Uppladdningsalternativ Manuell
    Name Ett hemligt namn för din nyckel eller slutpunkt. Till exempel: "CognitiveServicesKey" eller "CognitiveServicesEndpoint"
    Värde Resursnyckeln eller slutpunkten för Azure AI-tjänster.

    Senare använder programmet hemligheten "Namn" för att på ett säkert sätt komma åt värdet.

  5. Lämna de andra värdena som standardvärden. Välj Skapa.

    Dricks

    Kom ihåg de namn som du har angett för dina hemligheter, eftersom du kommer att använda dem senare i programmet.

Du bör nu ha namngett hemligheter för din resursinformation.

Skapa en miljövariabel för nyckelvalvets namn

Vi rekommenderar att du skapar en miljövariabel för namnet på ditt Azure-nyckelvalv. Programmet läser den här miljövariabeln vid körning för att hämta nyckel- och slutpunktsinformation.

Om du vill ange miljövariabler använder du följande kommandon. KEY_VAULT_NAME med namnet på miljövariabeln och ersätt Your-Key-Vault-Name med namnet på ditt nyckelvalv, som lagras i miljövariabeln.

Skapa och tilldela en bevarad miljövariabel med tanke på värdet.

setx KEY_VAULT_NAME "Your-Key-Vault-Name"

I en ny instans av kommandotolken läser du miljövariabeln.

echo %KEY_VAULT_NAME%

Autentisera till Azure med Visual Studio

Utvecklare som använder Visual Studio 2017 eller senare kan autentisera ett Microsoft Entra-konto via Visual Studio. På så sätt kan du komma åt hemligheter i ditt nyckelvalv genom att logga in på din Azure-prenumeration inifrån IDE:t.

Om du vill autentisera i Visual Studio väljer du Verktyg på den översta navigeringsmenyn och väljer Alternativ. Gå till alternativet Azure Service Authentication för att logga in med ditt användarnamn och lösenord.

Autentisera med hjälp av kommandoraden

Innan du kan ge åtkomst till ditt nyckelvalv måste du autentisera med ditt Microsoft Entra-användarnamn och lösenord.

Kör kommandot för att autentisera az login med Azure CLI.

az login

På system med en standardwebbläsare startar Azure CLI webbläsaren för att autentisera. För system utan en standardwebbläsare az login använder kommandot autentiseringsflödet för enhetskod. Du kan också tvinga Azure CLI att använda enhetskodflödet i stället för att starta en webbläsare genom att --use-device-code ange argumentet.

Om du har flera prenumerationer måste du välja den Azure-prenumeration som innehåller ditt nyckelvalv.

Bevilja åtkomst till ditt nyckelvalv

Skapa en åtkomstprincip för ditt nyckelvalv som ger ditt användarkonto hemliga behörigheter.

Om du vill ange åtkomstprincipen kör du kommandot az keyvault set-policy . Ersätt Your-Key-Vault-Name med namnet på ditt nyckelvalv. Ersätt user@domain.com med ditt Microsoft Entra-användarnamn.

az keyvault set-policy --name Your-Key-Vault-Name --upn user@domain.com --secret-permissions delete get list set purge

Skapa ett nytt C#-program

Skapa en ny .NET Core-konsolapp med Visual Studio IDE. Då skapas ett "Hello World"-projekt med en enda C#-källfil: program.cs.

Installera följande klientbibliotek genom att högerklicka på lösningen i Solution Explorer och välja Hantera NuGet-paket. I pakethanteraren som öppnas väljer du Bläddra och söker efter följande bibliotek och väljer Installera för var och en:

  • Azure.Security.KeyVault.Secrets
  • Azure.Identity

Importera exempelkoden

Kopiera följande exempelkod till filen program.cs . Ersätt Your-Key-Secret-Name och Your-Endpoint-Secret-Name med de hemliga namn som du angav i nyckelvalvet.

using System;
using System.Threading.Tasks;
using Azure;
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;
using System.Net;

namespace key_vault_console_app
{
    class Program
    {
        static async Task Main(string[] args)
        {
            //Name of your key vault
            var keyVaultName = Environment.GetEnvironmentVariable("KEY_VAULT_NAME");

            //variables for retrieving the key and endpoint from your key vault.
            //Set these variables to the names you created for your secrets
            const string keySecretName = "Your-Key-Secret-Name";
            const string endpointSecretName = "Your-Endpoint-Secret-Name";

            //Endpoint for accessing your key vault
            var kvUri = $"https://{keyVaultName}.vault.azure.net";

            var keyVaultClient = new SecretClient(new Uri(kvUri), new DefaultAzureCredential());

            Console.WriteLine($"Retrieving your secrets from {keyVaultName}.");

            //Key and endpoint secrets retrieved from your key vault
            var keySecret = await keyVaultClient.GetSecretAsync(keySecretName);
            var endpointSecret = await keyVaultClient.GetSecretAsync(endpointSecretName);
            Console.WriteLine($"Your key secret value is: {keySecret.Value.Value}");
            Console.WriteLine($"Your endpoint secret value is: {endpointSecret.Value.Value}");
            Console.WriteLine("Secrets retrieved successfully");

        }
    }
}

Kör appen

Kör programmet genom att välja felsökningsknappen överst i Visual Studio. Dina nyckel- och slutpunktshemligheter hämtas från nyckelvalvet.

Skicka ett testspråktjänstanrop (valfritt)

Om du använder en resurs för flera tjänster eller en språkresurs kan du uppdatera ditt program genom att följa de här stegen för att skicka ett exempel på ett anrop för namngiven entitetsigenkänning genom att hämta en nyckel och en slutpunkt från nyckelvalvet.

  1. Azure.AI.TextAnalytics Installera biblioteket genom att högerklicka på lösningen i Solution Explorer och välja Hantera NuGet-paket. I pakethanteraren som öppnas väljer du Bläddra och söker efter följande bibliotek och väljer Installera för var och en:

  2. Lägg till följande direktiv överst program.cs i filen.

    using Azure.AI.TextAnalytics;
    
  3. Lägg till följande kodexempel i ditt program.

    // Example method for extracting named entities from text 
    private static void EntityRecognitionExample(string keySecret, string endpointSecret)
    {
        //String to be sent for Named Entity Recognition
        var exampleString = "I had a wonderful trip to Seattle last week.";
    
        AzureKeyCredential azureKeyCredential = new AzureKeyCredential(keySecret);
        Uri endpoint = new Uri(endpointSecret);
        var languageServiceClient = new TextAnalyticsClient(endpoint, azureKeyCredential);
    
        Console.WriteLine($"Sending a Named Entity Recognition (NER) request");
        var response = languageServiceClient.RecognizeEntities(exampleString);
        Console.WriteLine("Named Entities:");
        foreach (var entity in response.Value)
        {
            Console.WriteLine($"\tText: {entity.Text},\tCategory: {entity.Category},\tSub-Category: {entity.SubCategory}");
            Console.WriteLine($"\t\tScore: {entity.ConfidenceScore:F2},\tLength: {entity.Length},\tOffset: {entity.Offset}\n");
        }
    }
    
  4. Lägg till följande kod för att anropa EntityRecognitionExample() från huvudmetoden med dina nyckel- och slutpunktsvärden.

    EntityRecognitionExample(keySecret.Value.Value, endpointSecret.Value.Value);
    
  5. Kör programmet.

Autentisera programmet

Innan du kan ge åtkomst till ditt nyckelvalv måste du autentisera med ditt Microsoft Entra-användarnamn och lösenord.

Kör kommandot för att autentisera az login med Azure CLI.

az login

På system med en standardwebbläsare startar Azure CLI webbläsaren för att autentisera. För system utan en standardwebbläsare az login använder kommandot autentiseringsflödet för enhetskod. Du kan också tvinga Azure CLI att använda enhetskodflödet i stället för att starta en webbläsare genom att --use-device-code ange argumentet.

Om du har flera prenumerationer måste du välja den Azure-prenumeration som innehåller ditt nyckelvalv.

Bevilja åtkomst till ditt nyckelvalv

Skapa en åtkomstprincip för ditt nyckelvalv som ger ditt användarkonto hemliga behörigheter.

Om du vill ange åtkomstprincipen kör du kommandot az keyvault set-policy . Ersätt Your-Key-Vault-Name med namnet på ditt nyckelvalv. Ersätt user@domain.com med ditt Microsoft Entra-användarnamn.

az keyvault set-policy --name Your-Key-Vault-Name --upn user@domain.com --secret-permissions delete get list set purge

Skapa ett Python-program

Skapa en ny mapp med namnet keyVaultExample. Använd sedan önskad kodredigerare för att skapa en fil med namnet program.py i den nyligen skapade mappen.

Installera key vault- och språktjänstpaket

  1. I en terminal eller kommandotolk går du till projektmappen och installerar Microsoft Entra-identitetsbiblioteket:

    pip install azure-identity
    
  2. Installera key vault-hemlighetsbiblioteket:

    pip install azure-keyvault-secrets
    

Importera exempelkoden

Lägg till följande kodexempel i filen med namnet program.py. Ersätt Your-Key-Secret-Name och Your-Endpoint-Secret-Name med de hemliga namn som du angav i nyckelvalvet.

import os
from azure.keyvault.secrets import SecretClient
from azure.identity import DefaultAzureCredential
from azure.core.credentials import AzureKeyCredential

keyVaultName = os.environ["KEY_VAULT_NAME"]

# Set these variables to the names you created for your secrets
keySecretName = "Your-Key-Secret-Name"
endpointSecretName = "Your-Endpoint-Secret-Name"

# URI for accessing key vault
KVUri = f"https://{keyVaultName}.vault.azure.net"

# Instantiate the client and retrieve secrets
credential = DefaultAzureCredential()
kv_client = SecretClient(vault_url=KVUri, credential=credential)

print(f"Retrieving your secrets from {keyVaultName}.")

retrieved_key = kv_client.get_secret(keySecretName).value
retrieved_endpoint = kv_client.get_secret(endpointSecretName).value

print(f"Your secret key value is {retrieved_key}.");
print(f"Your secret endpoint value is {retrieved_endpoint}.");

Kör appen

Använd följande kommando för att köra programmet. Dina nyckel- och slutpunktshemligheter hämtas från nyckelvalvet.

python ./program.py

Skicka ett testspråktjänstanrop (valfritt)

Om du använder en resurs för flera tjänster eller en språkresurs kan du uppdatera ditt program genom att följa de här stegen för att skicka ett exempel på ett anrop för namngiven entitetsigenkänning genom att hämta en nyckel och en slutpunkt från nyckelvalvet.

  1. Installera språktjänstbiblioteket:

    pip install azure-ai-textanalytics==5.1.0
    
  2. Lägg till följande kod i ditt program

    from azure.ai.textanalytics import TextAnalyticsClient
    # Authenticate the key vault secrets client using your key and endpoint 
    azure_key_credential = AzureKeyCredential(retrieved_key)
    # Now you can use key vault credentials with the Language service
    language_service_client = TextAnalyticsClient(
        endpoint=retrieved_endpoint, 
        credential=azure_key_credential)
    
    # Example of recognizing entities from text
    
    print("Sending NER request")
    
    try:
        documents = ["I had a wonderful trip to Seattle last week."]
        result = language_service_client.recognize_entities(documents = documents)[0]
        print("Named Entities:\n")
        for entity in result.entities:
            print("\tText: \t", entity.text, "\tCategory: \t", entity.category, "\tSubCategory: \t", entity.subcategory,
                    "\n\tConfidence Score: \t", round(entity.confidence_score, 2), "\tLength: \t", entity.length, "\tOffset: \t", entity.offset, "\n")
    
    except Exception as err:
        print("Encountered exception. {}".format(err))
    
  3. Kör programmet.

Autentisera programmet

Innan du kan ge åtkomst till ditt nyckelvalv måste du autentisera med ditt Microsoft Entra-användarnamn och lösenord.

Kör kommandot för att autentisera az login med Azure CLI.

az login

På system med en standardwebbläsare startar Azure CLI webbläsaren för att autentisera. För system utan en standardwebbläsare az login använder kommandot autentiseringsflödet för enhetskod. Du kan också tvinga Azure CLI att använda enhetskodflödet i stället för att starta en webbläsare genom att --use-device-code ange argumentet.

Om du har flera prenumerationer måste du välja den Azure-prenumeration som innehåller ditt nyckelvalv.

Bevilja åtkomst till ditt nyckelvalv

Skapa en åtkomstprincip för ditt nyckelvalv som ger ditt användarkonto hemliga behörigheter.

Om du vill ange åtkomstprincipen kör du kommandot az keyvault set-policy . Ersätt Your-Key-Vault-Name med namnet på ditt nyckelvalv. Ersätt user@domain.com med ditt Microsoft Entra-användarnamn.

az keyvault set-policy --name Your-Key-Vault-Name --upn user@domain.com --secret-permissions delete get list set purge

Skapa ett Java-program

I önskad IDE skapar du ett nytt Java-konsolprogramprojekt och skapar en klass med namnet Example.

Lägga till beroenden

I projektet lägger du till följande beroenden i pom.xml filen.

<dependencies>

        <dependency>
            <groupId>com.azure</groupId>
            <artifactId>azure-security-keyvault-secrets</artifactId>
            <version>4.2.3</version>
        </dependency>
        <dependency>
            <groupId>com.azure</groupId>
            <artifactId>azure-identity</artifactId>
            <version>1.2.0</version>
        </dependency>
    </dependencies>

Importera exempelkoden

Kopiera följande kod till en fil med namnet Example.java. Ersätt Your-Key-Secret-Name och Your-Endpoint-Secret-Name med de hemliga namn som du angav i nyckelvalvet.

import com.azure.identity.DefaultAzureCredentialBuilder;
import com.azure.security.keyvault.secrets.SecretClient;
import com.azure.security.keyvault.secrets.SecretClientBuilder;
import com.azure.core.credential.AzureKeyCredential;

public class Example {

    public static void main(String[] args) {

        String keyVaultName = System.getenv("KEY_VAULT_NAME");
        String keyVaultUri = "https://" + keyVaultName + ".vault.azure.net";

        //variables for retrieving the key and endpoint from your key vault.
        //Set these variables to the names you created for your secrets
        String keySecretName = "Your-Key-Secret-Name";
        String endpointSecretName = "Your-Endpoint-Secret-Name";

        //Create key vault secrets client
        SecretClient secretClient = new SecretClientBuilder()
                .vaultUrl(keyVaultUri)
                .credential(new DefaultAzureCredentialBuilder().build())
                .buildClient();

        //retrieve key and endpoint from key vault
        String keyValue = secretClient.getSecret(keySecretName).getValue();
        String endpointValue = secretClient.getSecret(endpointSecretName).getValue();
        System.out.printf("Your secret key value is: %s", keyValue)
        System.out.printf("Your secret endpoint value is: %s", endpointValue)
    }
}

Skicka ett testspråktjänstanrop (valfritt)

Om du använder en resurs för flera tjänster eller en språkresurs kan du uppdatera ditt program genom att följa de här stegen för att skicka ett exempel på ett anrop för namngiven entitetsigenkänning genom att hämta en nyckel och en slutpunkt från nyckelvalvet.

  1. Lägg till följande beroende i ditt program:

    <dependency>
        <groupId>com.azure</groupId>
        <artifactId>azure-ai-textanalytics</artifactId>
        <version>5.1.12</version>
    </dependency>
    
  2. lägg till följande importinstruktioner i filen.

    import com.azure.ai.textanalytics.models.*;
    import com.azure.ai.textanalytics.TextAnalyticsClientBuilder;
    import com.azure.ai.textanalytics.TextAnalyticsClient;
    
  3. Lägg till följande kod i main() -metoden i ditt program:

    
    TextAnalyticsClient languageClient = new TextAnalyticsClientBuilder()
            .credential(new AzureKeyCredential(keyValue))
            .endpoint(endpointValue)
            .buildClient();
    
    // Example for recognizing entities in text
    String text = "I had a wonderful trip to Seattle last week.";
    
    for (CategorizedEntity entity : languageClient.recognizeEntities(text)) {
        System.out.printf(
                "Recognized entity: %s, entity category: %s, entity sub-category: %s, score: %s, offset: %s, length: %s.%n",
                entity.getText(),
                entity.getCategory(),
                entity.getSubcategory(),
                entity.getConfidenceScore(),
                entity.getOffset(),
                entity.getLength());
    }
    
  4. Köra ditt program

Autentisera programmet

Innan du kan ge åtkomst till ditt nyckelvalv måste du autentisera med ditt Microsoft Entra-användarnamn och lösenord.

Kör kommandot för att autentisera az login med Azure CLI.

az login

På system med en standardwebbläsare startar Azure CLI webbläsaren för att autentisera. För system utan en standardwebbläsare az login använder kommandot autentiseringsflödet för enhetskod. Du kan också tvinga Azure CLI att använda enhetskodflödet i stället för att starta en webbläsare genom att --use-device-code ange argumentet.

Om du har flera prenumerationer måste du välja den Azure-prenumeration som innehåller ditt nyckelvalv.

Bevilja åtkomst till ditt nyckelvalv

Skapa en åtkomstprincip för ditt nyckelvalv som ger ditt användarkonto hemliga behörigheter.

Om du vill ange åtkomstprincipen kör du kommandot az keyvault set-policy . Ersätt Your-Key-Vault-Name med namnet på ditt nyckelvalv. Ersätt user@domain.com med ditt Microsoft Entra-användarnamn.

az keyvault set-policy --name Your-Key-Vault-Name --upn user@domain.com --secret-permissions delete get list set purge

Skapa ett nytt Node.js-program

Skapa ett Node.js program som använder ditt nyckelvalv.

I en terminal skapar du en mapp med namnet key-vault-js-example och ändrar till den mappen:

mkdir key-vault-js-example && cd key-vault-js-example

Initiera Node.js projektet:

npm init -y

Installera key vault- och språktjänstpaket

  1. Använd terminalen och installera Azure Key Vault-hemlighetsbiblioteket @azure/keyvault-secrets för Node.js.

    npm install @azure/keyvault-secrets
    
  2. Installera Azure Identity-biblioteket @azure /identitetspaketet för att autentisera till ett Nyckelvalv.

    npm install @azure/identity
    

Importera kodexemplet

Lägg till följande kodexempel i en fil med namnet index.js. Ersätt Your-Key-Secret-Name och Your-Endpoint-Secret-Name med de hemliga namn som du angav i nyckelvalvet.

const { SecretClient } = require("@azure/keyvault-secrets");
const { DefaultAzureCredential } = require("@azure/identity");
// Load the .env file if it exists
const dotenv = require("dotenv");
dotenv.config();

async function main() {
    const credential = new DefaultAzureCredential();

    const keyVaultName = process.env["KEY_VAULT_NAME"];
    const url = "https://" + keyVaultName + ".vault.azure.net";

    const kvClient = new SecretClient(url, credential);

    // Set these variables to the names you created for your secrets
    const keySecretName = "Your-Key-Secret-Name";
    const endpointSecretName = "Your-Endpoint-Secret-Name";

    console.log("Retrieving secrets from ", keyVaultName);
    const retrievedKey = await (await kvClient.getSecret(keySecretName)).value;
    const retrievedEndpoint = await (await kvClient.getSecret(endpointSecretName)).value;
    console.log("Your secret key value is: ", retrievedKey);
    console.log("Your secret endpoint value is: ", retrievedEndpoint);
}

main().catch((error) => {
  console.error("An error occurred:", error);
  process.exit(1);
});

Köra exempelprogrammet

Använd följande kommando för att köra programmet. Dina nyckel- och slutpunktshemligheter hämtas från nyckelvalvet.

node index.js

Skicka ett testspråktjänstanrop (valfritt)

Om du använder en resurs för flera tjänster eller en språkresurs kan du uppdatera ditt program genom att följa de här stegen för att skicka ett exempel på ett anrop för namngiven entitetsigenkänning genom att hämta en nyckel och en slutpunkt från nyckelvalvet.

  1. Installera Azure AI-tjänsten för språkbiblioteket @azure /ai-text-analytics för att skicka API-begäranden till språktjänsten.

    npm install @azure/ai-text-analytics@5.1.0
    
  2. Lägg till följande kod i programmet:

    const { TextAnalyticsClient, AzureKeyCredential } = require("@azure/ai-text-analytics");
    // Authenticate the language client with your key and endpoint
    const languageClient = new TextAnalyticsClient(retrievedEndpoint,  new AzureKeyCredential(retrievedKey));
    
    // Example for recognizing entities in text
    console.log("Sending NER request")
    const entityInputs = [
        "I had a wonderful trip to Seattle last week."
    ];
    const entityResults = await languageClient.recognizeEntities(entityInputs);
    entityResults.forEach(document => {
        console.log(`Document ID: ${document.id}`);
        document.entities.forEach(entity => {
            console.log(`\tName: ${entity.text} \tCategory: ${entity.category} \tSubcategory: ${entity.subCategory ? entity.subCategory : "N/A"}`);
            console.log(`\tScore: ${entity.confidenceScore}`);
        });
    });
    
  3. Kör programmet.

Nästa steg