Snabbstart: Azure Key Vault Hemligt klientbibliotek för Java

Kom igång med Azure Key Vault Secret-klientbiblioteket för Java. Följ de här stegen för att installera paketet och prova exempelkod för grundläggande uppgifter.

Dricks

Om du arbetar med Azure Key Vault Secrets-resurser i ett Spring-program rekommenderar vi att du ser Spring Cloud Azure som ett alternativ. Spring Cloud Azure är ett projekt med öppen källkod som ger sömlös Spring-integrering med Azure-tjänster. Mer information om Spring Cloud Azure och ett exempel med Key Vault-hemligheter finns i Läsa in en hemlighet från Azure Key Vault i ett Spring Boot-program.

Ytterligare resurser:

Förutsättningar

Den här snabbstarten förutsätter att du kör Azure CLI och Apache Maven i ett Linux-terminalfönster.

Konfigurera

Den här snabbstarten använder Azure Identity-biblioteket med Azure CLI för att autentisera användare till Azure Services. Utvecklare kan också använda Visual Studio eller Visual Studio Code för att autentisera sina anrop. Mer information finns i Autentisera klienten med Azure Identity-klientbiblioteket.

Logga in på Azure

  1. Kör kommandot login.

    az login
    

    Om CLI kan öppna din standardwebbläsare kommer den att göra det och läsa in en Azure-inloggningssida.

    Annars öppnar du en webbläsarsida på https://aka.ms/devicelogin och anger auktoriseringskoden som visas i terminalen.

  2. Logga in med dina autentiseringsuppgifter för kontot i webbläsaren.

Skapa en ny Java-konsolapp

I ett konsolfönster använder du mvn kommandot för att skapa en ny Java-konsolapp med namnet akv-secrets-java.

mvn archetype:generate -DgroupId=com.keyvault.secrets.quickstart
                       -DartifactId=akv-secrets-java
                       -DarchetypeArtifactId=maven-archetype-quickstart
                       -DarchetypeVersion=1.4
                       -DinteractiveMode=false

Utdata från genereringen av projektet ser ut ungefär så här:

[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Archetype: maven-archetype-quickstart:1.4
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: com.keyvault.secrets.quickstart
[INFO] Parameter: artifactId, Value: akv-secrets-java
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: package, Value: com.keyvault.secrets.quickstart
[INFO] Parameter: packageInPathFormat, Value: com/keyvault/quickstart
[INFO] Parameter: package, Value: com.keyvault.secrets.quickstart
[INFO] Parameter: groupId, Value: com.keyvault.secrets.quickstart
[INFO] Parameter: artifactId, Value: akv-secrets-java
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Project created from Archetype in dir: /home/user/quickstarts/akv-secrets-java
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  38.124 s
[INFO] Finished at: 2019-11-15T13:19:06-08:00
[INFO] ------------------------------------------------------------------------

Ändra katalogen till den nyligen skapade akv-secrets-java/ mappen.

cd akv-secrets-java

Installera -paketet

Öppna filen pom.xml i textredigeraren. Lägg till följande beroendeelement i gruppen med beroenden.

    <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>

Skapa en resursgrupp och ett nyckelvalv

Den här snabbstarten använder ett i förväg skapat Azure-nyckelvalv. Du kan skapa ett nyckelvalv genom att följa stegen i snabbstarten för Azure CLI, Azure PowerShell-snabbstarten eller azure-portalens snabbstart.

Du kan också köra Azure CLI- eller Azure PowerShell-kommandona nedan.

Viktigt!

Varje nyckelvalv måste ha ett unikt namn. Ersätt <ditt unika keyvault-name> med namnet på ditt nyckelvalv i följande exempel.

az group create --name "myResourceGroup" -l "EastUS"

az keyvault create --name "<your-unique-keyvault-name>" -g "myResourceGroup"

Bevilja åtkomst till ditt nyckelvalv

Om du vill ge ditt program behörigheter till ditt nyckelvalv via rollbaserad åtkomstkontroll (RBAC) tilldelar du en roll med hjälp av Azure CLI-kommandot az role assignment create.

az role assignment create --role "Key Vault Secrets User" --assignee "<app-id>" --scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.KeyVault/vaults/<your-unique-keyvault-name>"

Ersätt <app-id>, <subscription-id>, <resource-group-name> och <your-unique-keyvault-name> med dina faktiska värden. <app-id> är program-ID :t (klient) för ditt registrerade program i Azure AD.

Ange miljövariabler

Det här programmet använder ditt nyckelvalvnamn som en miljövariabel med namnet KEY_VAULT_NAME.

Windows

set KEY_VAULT_NAME=<your-key-vault-name>

Windows PowerShell

$Env:KEY_VAULT_NAME="<your-key-vault-name>"

macOS eller Linux

export KEY_VAULT_NAME=<your-key-vault-name>

Objektmodell

Med Azure Key Vault Secret-klientbiblioteket för Java kan du hantera hemligheter. I avsnittet Kodexempel visas hur du skapar en klient, anger en hemlighet, hämtar en hemlighet och tar bort en hemlighet.

Kodexempel

Lägga till direktiv

Lägg till följande direktiv överst i koden:

import com.azure.core.util.polling.SyncPoller;
import com.azure.identity.DefaultAzureCredentialBuilder;

import com.azure.security.keyvault.secrets.SecretClient;
import com.azure.security.keyvault.secrets.SecretClientBuilder;
import com.azure.security.keyvault.secrets.models.DeletedSecret;
import com.azure.security.keyvault.secrets.models.KeyVaultSecret;

Autentisera och skapa en klient

Programbegäranden till de flesta Azure-tjänster måste auktoriseras. Att använda klassen DefaultAzureCredential är den rekommenderade metoden för att implementera lösenordslösa anslutningar till Azure-tjänster i koden. DefaultAzureCredential stöder flera autentiseringsmetoder och avgör vilken metod som ska användas vid körning. Med den här metoden kan din app använda olika autentiseringsmetoder i olika miljöer (lokalt jämfört med produktion) utan att implementera miljöspecifik kod.

I den här snabbstarten DefaultAzureCredential autentiserar du till nyckelvalvet med autentiseringsuppgifterna för den lokala utvecklingsanvändare som är inloggad i Azure CLI. När programmet distribueras till Azure kan samma DefaultAzureCredential kod automatiskt identifiera och använda en hanterad identitet som har tilldelats till en App Service, virtuell dator eller andra tjänster. Mer information finns i Översikt över hanterad identitet.

I det här exemplet expanderas namnet på ditt nyckelvalv till nyckelvalvets URI i formatet https://<your-key-vault-name>.vault.azure.net. Mer information om autentisering till nyckelvalv finns i Utvecklarguide.

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

SecretClient secretClient = new SecretClientBuilder()
    .vaultUrl(keyVaultUri)
    .credential(new DefaultAzureCredentialBuilder().build())
    .buildClient();

Spara en hemlighet

Nu när programmet har autentiserats kan du placera en hemlighet i nyckelvalvet med hjälp av secretClient.setSecret metoden . Detta kräver ett namn på hemligheten – vi har tilldelat värdet "mySecret" till variabeln secretName i det här exemplet.

secretClient.setSecret(new KeyVaultSecret(secretName, secretValue));

Du kan kontrollera att hemligheten har angetts med kommandot az keyvault secret show :

az keyvault secret show --vault-name <your-unique-key-vault-name> --name mySecret

Hämta en hemlighet

Nu kan du hämta den tidigare angivna hemligheten secretClient.getSecret med -metoden.

KeyVaultSecret retrievedSecret = secretClient.getSecret(secretName);

Nu kan du komma åt värdet för den hämtade hemligheten med retrievedSecret.getValue().

Ta bort en hemlighet

Slutligen ska vi ta bort hemligheten från nyckelvalvet med secretClient.beginDeleteSecret metoden .

Hemlig borttagning är en tidskrävande åtgärd som du kan avsöka dess förlopp för eller vänta tills den har slutförts.

SyncPoller<DeletedSecret, Void> deletionPoller = secretClient.beginDeleteSecret(secretName);
deletionPoller.waitForCompletion();

Du kan kontrollera att hemligheten har tagits bort med kommandot az keyvault secret show :

az keyvault secret show --vault-name <your-unique-key-vault-name> --name mySecret

Rensa resurser

När det inte längre behövs kan du använda Azure CLI eller Azure PowerShell för att ta bort ditt nyckelvalv och motsvarande resursgrupp.

az group delete -g "myResourceGroup"
Remove-AzResourceGroup -Name "myResourceGroup"

Exempelkod

package com.keyvault.secrets.quickstart;

import java.io.Console;

import com.azure.core.util.polling.SyncPoller;
import com.azure.identity.DefaultAzureCredentialBuilder;

import com.azure.security.keyvault.secrets.SecretClient;
import com.azure.security.keyvault.secrets.SecretClientBuilder;
import com.azure.security.keyvault.secrets.models.DeletedSecret;
import com.azure.security.keyvault.secrets.models.KeyVaultSecret;

public class App {
    public static void main(String[] args) throws InterruptedException, IllegalArgumentException {
        String keyVaultName = System.getenv("KEY_VAULT_NAME");
        String keyVaultUri = "https://" + keyVaultName + ".vault.azure.net";

        System.out.printf("key vault name = %s and key vault URI = %s \n", keyVaultName, keyVaultUri);

        SecretClient secretClient = new SecretClientBuilder()
            .vaultUrl(keyVaultUri)
            .credential(new DefaultAzureCredentialBuilder().build())
            .buildClient();

        Console con = System.console();

        String secretName = "mySecret";

        System.out.println("Please provide the value of your secret > ");

        String secretValue = con.readLine();

        System.out.print("Creating a secret in " + keyVaultName + " called '" + secretName + "' with value '" + secretValue + "' ... ");

        secretClient.setSecret(new KeyVaultSecret(secretName, secretValue));

        System.out.println("done.");
        System.out.println("Forgetting your secret.");

        secretValue = "";
        System.out.println("Your secret's value is '" + secretValue + "'.");

        System.out.println("Retrieving your secret from " + keyVaultName + ".");

        KeyVaultSecret retrievedSecret = secretClient.getSecret(secretName);

        System.out.println("Your secret's value is '" + retrievedSecret.getValue() + "'.");
        System.out.print("Deleting your secret from " + keyVaultName + " ... ");

        SyncPoller<DeletedSecret, Void> deletionPoller = secretClient.beginDeleteSecret(secretName);
        deletionPoller.waitForCompletion();

        System.out.println("done.");
    }
}

Nästa steg

I den här snabbstarten skapade du ett nyckelvalv, lagrade en hemlighet, hämtade den och tog sedan bort den. Om du vill veta mer om Key Vault och hur du integrerar det med dina program fortsätter du till de här artiklarna.