Esercitazione: Usare i riferimenti a Key Vault in un'app Java Spring

Questa esercitazione illustra come usare il servizio Configurazione app di Azure insieme ad Azure Key Vault. Configurazione app e Key Vault sono servizi complementari usati side-by-side nella maggior parte delle distribuzioni di applicazioni.

Configurazione app consente di usare insieme i servizi creando chiavi che fanno riferimento a valori archiviati in Key Vault. Quando crea tali chiavi, Configurazione app archivia gli URI dei valori di Key Vault piuttosto che i valori stessi.

L'applicazione usa il provider client di Configurazione app per recuperare i riferimenti a Key Vault, così come per qualsiasi altra chiave archiviata in Configurazione app. In questo caso, i valori archiviati in Configurazione app sono URI che fanno riferimento ai valori contenuti in Key Vault. Non si tratta dei valori o delle credenziali di Key Vault. Poiché riconosce le chiavi come riferimenti a Key Vault, il provider client usa Key Vault per recuperare i relativi valori.

L'applicazione è responsabile dell'autenticazione corretta sia per Configurazione app che per Key Vault. I due servizi non comunicano direttamente.

Questa esercitazione illustra come implementare i riferimenti a Key Vault nel codice. Si basa sull'app Web presentata nelle guide introduttive. Prima di continuare, completare le procedure descritte in Creare un'app Java Spring con Configurazione app.

Per completare i passaggi riportati in questa esercitazione, è possibile usare qualsiasi editor di codice. Ad esempio, Visual Studio Code è un editor di codice multipiattaforma disponibile per i sistemi operativi Windows, macOS e Linux.

In questa esercitazione verranno illustrate le procedure per:

  • Creare una chiave di Configurazione app che faccia riferimento a un valore archiviato in Key Vault.
  • Accedere al valore di questa chiave da un'applicazione Java Spring.

Prerequisiti

Creare un insieme di credenziali

  1. Selezionare l'opzione Crea una risorsa nell'angolo superiore sinistro del portale di Azure:

    Screenshot mostra l'opzione Crea una risorsa nel portale di Azure.

  2. Nella casella di ricerca immettere Insieme di credenziali delle chiavi.

  3. Nell'elenco dei risultati scegliere Insiemi di credenziali delle chiavi a sinistra.

  4. In Insiemi di credenziali delle chiavi selezionare Aggiungi.

  5. Alla destra di Crea un insieme di credenziali delle chiavi specificare le informazioni seguenti:

    • Selezionare Sottoscrizione per scegliere una sottoscrizione.
    • In Gruppo di risorse selezionare Crea nuovo e immettere un nome per il gruppo di risorse.
    • In Nome dell'insieme di credenziali delle chiavi è necessario un nome univoco. Per questa esercitazione immettere Contoso-vault2.
    • Nell'elenco a discesa Area scegliere una località.
  6. Lasciare invariati i valori predefiniti delle altre opzioni di Crea un insieme di credenziali delle chiavi.

  7. Selezionare Create (Crea).

A questo punto, l'account Azure è l'unico autorizzato ad accedere a questo nuovo insieme di credenziali.

Screenshot che mostra l'insieme di credenziali delle chiavi.

Aggiungere un segreto all'istanza di Key Vault

Per aggiungere un segreto all'insieme di credenziali, sono sufficienti alcuni passaggi aggiuntivi. In questo caso aggiungere un messaggio da usare per testare il recupero da Key Vault. Nel messaggio, denominato Message, viene archiviato il valore "Hello from Key Vault".

  1. Nella pagina delle proprietà di Key Vault selezionare Segreti.
  2. Selezionare Genera/Importa.
  3. Nel riquadro Crea un segreto immettere i valori seguenti:
    • Opzioni di caricamento: immettere Manual.
    • Name: immettere Message.
    • Value: immettere Hello from Key Vault.
  4. Lasciare invariati i valori predefiniti delle altre proprietà di Crea un segreto.
  5. Selezionare Create (Crea).

Aggiungere a Configurazione app un riferimento a Key Vault

  1. Accedere al portale di Azure. Selezionare Tutte le risorse e quindi l'istanza di archivio di Configurazione app creata nell'argomento di avvio rapido.

  2. Selezionare Esplora configurazioni.

  3. Selezionare + Crea>Riferimento all'insieme di credenziali delle chiavi e quindi specificare i valori seguenti:

    • Chiave: selezionare /application/config.keyvaultmessage
    • Etichetta: lasciare vuoto questo valore.
    • Sottoscrizione, Gruppo di risorse e Insieme di credenziali delle chiavi: immettere i valori corrispondenti ai valori dell'insieme di credenziali delle chiavi creati nella sezione precedente.
    • Segreto: selezionare il segreto denominato Message creato nella sezione precedente.

Connettersi a Key Vault

  1. Per questa esercitazione viene usata un'entità servizio per l'autenticazione in Key Vault. Per creare questa entità servizio, usare il comando az ad sp create-for-rbac dell'interfaccia della riga di comando di Azure:

    az ad sp create-for-rbac -n "http://mySP" --role Contributor --scopes /subscriptions/{subscription-id} --sdk-auth
    

    Questa operazione restituisce una serie di coppie chiave-valore:

    {
    "clientId": "00001111-aaaa-2222-bbbb-3333cccc4444",
    "clientSecret": "aaaaaaaa-0b0b-1c1c-2d2d-333333333333",
    "subscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
    "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
    "activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
    "resourceManagerEndpointUrl": "https://management.azure.com/",
    "sqlManagementEndpointUrl": "https://management.core.windows.net:8443/",
    "galleryEndpointUrl": "https://gallery.azure.com/",
    "managementEndpointUrl": "https://management.core.windows.net/"
    }
    
  2. Eseguire il comando seguente per consentire all'entità servizio di accedere all'insieme di credenziali delle chiavi:

    az keyvault set-policy -n <your-unique-keyvault-name> --spn <clientId-of-your-service-principal> --secret-permissions delete get
    
  3. Eseguire il comando seguente per ottenere l'ID oggetto, quindi aggiungerlo a Configurazione app.

    az ad sp show --id <clientId-of-your-service-principal>
    az role assignment create --role "App Configuration Data Reader" --scope /subscriptions/<subscriptionId>/resourceGroups/<group-name> --assignee-principal-type --assignee-object-id <objectId-of-your-service-principal> --resource-group <your-resource-group>
    
  4. Creare le variabili di ambiente AZURE_CLIENT_ID, AZURE_CLIENT_SECRET e AZURE_TENANT_ID. Usare i valori dell'entità servizio visualizzati nel passaggio precedente. Al prompt dei comandi eseguire questi comandi e riavviare il prompt per rendere effettiva la modifica:

    setx AZURE_CLIENT_ID "clientId"
    setx AZURE_CLIENT_SECRET "clientSecret"
    setx AZURE_TENANT_ID "tenantId"
    

    Se si usa Windows PowerShell, eseguire il comando seguente:

    $Env:AZURE_CLIENT_ID = "clientId"
    $Env:AZURE_CLIENT_SECRET = "clientSecret"
    $Env:AZURE_TENANT_ID = "tenantId"
    

    Se si usa macOS o Linux, eseguire il comando seguente:

    export AZURE_CLIENT_ID ='clientId'
    export AZURE_CLIENT_SECRET ='clientSecret'
    export AZURE_TENANT_ID ='tenantId'
    

Nota

Queste credenziali di Key Vault vengono usate solo all'interno dell'applicazione. L'applicazione esegue l'autenticazione direttamente con Key Vault usando queste credenziali senza coinvolgere il servizio Configurazione app. Key Vault fornisce l'autenticazione sia per l'applicazione che per il servizio Configurazione app senza condividere o esporre le chiavi.

Aggiornare il codice per usare un riferimento a Key Vault

  1. Creare una variabile di ambiente denominata APP_CONFIGURATION_ENDPOINT. Impostarne il valore sull'endpoint dell'archivio di Configurazione app. È possibile trovare l'endpoint nel pannello Chiavi di accesso nel portale di Azure. Riavviare il prompt dei comandi per rendere effettiva la modifica.

  2. Aprire il file di configurazione nella cartella resources . Aggiornare questo file per usare il valore APP_CONFIGURATION_ENDPOINT. Rimuovere tutti i riferimenti a una stringa di connessione in questo file.

spring:
    cloud:
        azure:
            appconfiguration:
                stores:
                    - endpoint: ${APP_CONFIGURATION_ENDPOINT}

Nota

È anche possibile usare le configurazioni globali di Spring Cloud di Azure per connettersi a Key Vault.

  1. Aprire MessageProperties.java. Aggiungere una nuova variabile denominata keyVaultMessage:

    private String keyVaultMessage;
    
    public String getKeyVaultMessage() {
        return keyVaultMessage;
    }
    
    public void setKeyVaultMessage(String keyVaultMessage) {
        this.keyVaultMessage = keyVaultMessage;
    }
    
  2. Aprire HelloController.java. Aggiornare il metodo getMessage per includere il messaggio recuperato da Key Vault.

    @GetMapping
    public String getMessage() {
        return "Message: " + properties.getMessage() + "\nKey Vault message: " + properties.getKeyVaultMessage();
    }
    
  3. Compilare l'applicazione Spring Boot con Maven ed eseguirla, ad esempio:

    mvn clean package
    mvn spring-boot:run
    
  4. Quando l'applicazione è in esecuzione, è possibile testarla usando curl, ad esempio:

    curl -X GET http://localhost:8080/
    

    Dovrebbe essere visualizzato il messaggio indicante che è stato eseguito l'accesso nell'archivio di Configurazione app. Viene visualizzato anche il messaggio immesso in Key Vault.

Pulire le risorse

Se non si vuole continuare a usare le risorse create in questo articolo, eliminare il gruppo di risorse creato qui per evitare addebiti.

Importante

L'eliminazione di un gruppo di risorse è irreversibile. Il gruppo di risorse e tutte le risorse in esso contenute vengono eliminati in modo permanente. Assicurarsi di non eliminare accidentalmente il gruppo di risorse o le risorse sbagliate. Se le risorse per questo articolo sono state create in un gruppo di risorse che contiene altre risorse che si vogliono mantenere, eliminare ogni risorsa singolarmente dal rispettivo riquadro anziché eliminare il gruppo di risorse.

  1. Accedere al portale di Azure e selezionare Gruppi di risorse.
  2. Nella casella Filtra per nome immettere il nome del gruppo di risorse.
  3. Nell'elenco dei risultati selezionare il nome del gruppo di risorse per visualizzare una panoramica.
  4. Selezionare Elimina gruppo di risorse.
  5. Verrà chiesto di confermare l'eliminazione del gruppo di risorse. Immettere il nome del gruppo di risorse per confermare e selezionare Elimina.

Dopo qualche istante, il gruppo di risorse e tutte le risorse che contiene vengono eliminati.

Passaggi successivi

In questa esercitazione è stata creata una chiave di Configurazione app che fa riferimento a un valore archiviato in Key Vault. Per altre domande, vedere la documentazione di riferimento, contiene tutti i dettagli su come funziona la libreria di Configurazione app di Azure Spring Cloud. Per informazioni su come usare i flag di funzionalità nell'applicazione Java Spring, continuare con l'esercitazione successiva.