Tutorial: Uso de referencias de Key Vault en una aplicación de Java Spring

En este tutorial aprenderá a usar el servicio Azure App Configuration junto con Azure Key Vault. App Configuration y Key Vault son servicios complementarios que se usan de forma conjunta en la mayoría de las implementaciones de aplicaciones.

App Configuration ayuda a usar juntos los servicios, mediante la creación de claves que hacen referencia a valores almacenados en Key Vault. Cuando App Configuration crea estas claves, almacena los URI de los valores de Key Vault, en lugar de los propios valores.

La aplicación usa el proveedor de cliente de App Configuration para recuperar las referencias de Key Vault, tal como hace para cualquier otra clave almacenada en App Configuration. En este caso, los valores almacenados en App Configuration son los URI que hacen referencia a los valores de Key Vault. No son valores ni credenciales de Key Vault. Dado que el proveedor de cliente reconoce las claves como referencias de Key Vault, utiliza Key Vault para recuperar sus valores.

La aplicación es responsable de autenticarse correctamente en App Configuration y en Key Vault. Los dos servicios no se comunican directamente.

En este tutorial se muestra cómo se implementan las referencias de Key Vault en el código. Se basa en la aplicación web que se introdujo en los inicios rápidos. Antes de continuar, complete primero Creación de una aplicación de Java Spring con Azure App Configuration.

Para realizar los pasos de este tutorial, puede usar cualquier editor de código. Por ejemplo, Visual Studio Code es un editor de código multiplataforma que está disponible para los sistemas operativos Windows, macOS y Linux.

En este tutorial, aprenderá a:

  • Crear una clave de App Configuration que hace referencia a un valor almacenado en Key Vault.
  • Acceder al valor de esta clave desde una aplicación de Java Spring.

Prerrequisitos

Creación de un almacén

  1. Seleccione la opción Crear un recurso en la esquina superior izquierda de Azure Portal:

    Screenshot shows the Create a resource option in the Azure portal.

  2. En el cuadro de búsqueda, escriba Key Vault.

  3. En la lista de resultados, seleccione Key Vaults a la izquierda.

  4. En Key Vaults, seleccione Agregar.

  5. En la sección Crear almacén de claves, a la derecha, proporcione la siguiente información:

    • Seleccione Suscripción para elegir una suscripción.
    • En Grupo de recursos, seleccione Crear nuevo y escriba un nombre de grupo de recursos.
    • En Nombre del almacén de claves se requiere un nombre único. Para este tutorial, escriba Contoso-vault2.
    • En la lista desplegable Región, elija una ubicación.
  6. Deje las demás opciones de Crear almacén de claves con sus valores predeterminados.

  7. Seleccione Crear.

En este momento, su cuenta de Azure es la única autorizada para acceder a este nuevo almacén.

Screenshot shows your key vault.

Incorporación de un secreto a Key Vault

Para agregar un secreto al almacén, debe llevar a cabo algunos pasos adicionales. En este caso, agregará un mensaje que podrá usar para probar la recuperación de Key Vault. El mensaje se denominará Message y en él se almacenará el valor "Hello from Key Vault".

  1. En las páginas de propiedades de Key Vault, seleccione Secretos.
  2. Seleccione Generar o importar.
  3. En el panel Crear un secreto, escriba los valores siguientes:
    • Opciones de carga: escriba Manual.
    • Name: escriba Message.
    • Valor: escriba Hello from Key Vault.
  4. Deje las demás propiedades de Crear un secreto con sus valores predeterminados.
  5. Seleccione Crear.

Incorporación de una referencia de Key Vault a App Configuration

  1. Inicie sesión en Azure Portal. Seleccione Todos los recursos y después seleccione la instancia de almacén de App Configuration que creó en el inicio rápido.

  2. Seleccione Explorador de configuración.

  3. Seleccione + Crear>Referencia del almacén de claves y, a continuación, especifique los valores siguientes:

    • Clave: seleccione /application/config.keyvaultmessage.
    • Etiqueta: deje este valor en blanco.
    • Suscripción, Grupo de recursos y Key Vault: escriba los valores correspondientes a los valores del almacén de claves que creó en la sección anterior.
    • Secreto: seleccione el secreto llamado Message que creó en la sección anterior.

Conexión a Key Vault

  1. En este tutorial usará una entidad de servicio para la autenticación en Key Vault. Para crear esta entidad de servicio, use el comando az ad sp create-for-rbac de la CLI de Azure:

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

    Esta operación devuelve una serie de pares clave-valor:

    {
    "clientId": "7da18cae-779c-41fc-992e-0527854c6583",
    "clientSecret": "b421b443-1669-4cd7-b5b1-394d5c945002",
    "subscriptionId": "443e30da-feca-47c4-b68f-1636b75e16b3",
    "tenantId": "35ad10f1-7799-4766-9acf-f2d946161b77",
    "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. Ejecute el siguiente comando para permitir que la entidad de servicio acceda al almacén de claves:

    az keyvault set-policy -n <your-unique-keyvault-name> --spn <clientId-of-your-service-principal> --secret-permissions delete get
    
  3. Ejecute el siguiente comando para obtener el identificador de objeto y, a continuación, agréguelo a App Configuration.

    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. Cree las variables de entorno AZURE_CLIENT_ID, AZURE_CLIENT_SECRET y AZURE_TENANT_ID. Utilice los valores de la entidad de servicio que se mostraron en los pasos anteriores. En la línea de comandos, ejecute los siguientes comandos y reinicie el símbolo del sistema para que se aplique el cambio:

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

    Si usa Windows PowerShell, ejecute el siguiente comando:

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

    Si usa macOS o Linux, ejecute el siguiente comando:

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

Nota

Estas credenciales de Key Vault se usan solo dentro de la aplicación. La aplicación se autentica directamente con Key Vault mediante estas credenciales sin que intervenga el servicio App Configuration. Key Vault proporciona autenticación para la aplicación y el servicio App Configuration sin compartir ni exponer las claves.

Actualización del código para usar una referencia de Key Vault

  1. Cree una variable de entorno denominada APP_CONFIGURATION_ENDPOINT. Establezca su valor en el punto de conexión del almacén de App Configuration. Puede encontrar el punto de conexión en la hoja Claves de acceso de Azure Portal. Reinicie el símbolo del sistema para permitir que el cambio surta efecto.

  2. Abra el archivo de configuración en la carpeta resources. Actualice este archivo para usar el valor de APP_CONFIGURATION_ENDPOINT. Elimine cualquier referencia a una cadena de conexión de este archivo.

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

Nota

También puede usar las configuraciones globales de Spring Cloud de Azure para conectarse a Key Vault.

  1. Abra MessageProperties.java. Agregue una nueva variable denominada keyVaultMessage:

    private String keyVaultMessage;
    
    public String getKeyVaultMessage() {
        return keyVaultMessage;
    }
    
    public void setKeyVaultMessage(String keyVaultMessage) {
        this.keyVaultMessage = keyVaultMessage;
    }
    
  2. Abra HelloController.java. Actualice el método getMessage para incluir el mensaje recuperado de Key Vault.

    @GetMapping
    public String getMessage() {
        return "Message: " + properties.getMessage() + "\nKey Vault message: " + properties.getKeyVaultMessage();
    }
    
  3. Compile la aplicación de Spring Boot con Maven y ejecútela; por ejemplo:

    mvn clean package
    mvn spring-boot:run
    
  4. Una vez que se está ejecutando la aplicación, puede usar curl para probarla, por ejemplo:

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

    Verá el mensaje que escribió en el almacén de App Configuration. También verá el mensaje que escribió en Key Vault.

Limpieza de recursos

Si no quiere seguir usando los recursos que se han creado en este artículo, elimine el grupo de recursos que creó aquí para evitar cargos.

Importante

La eliminación de un grupo de recursos es irreversible. El grupo de recursos y todos los recursos que contiene se eliminan permanentemente. Asegúrese de que no elimina por accidente el grupo de recursos o los recursos equivocados. Si creó los recursos para este artículo en un grupo de recursos que contenga los recursos que desee conservar, elimine cada recurso de forma individual desde su panel respectivo, en lugar de eliminar el grupo de recursos.

  1. Inicie sesión en Azure Portal y después seleccione Grupos de recursos.
  2. En el cuadro de texto Filtrar por nombre, escriba el nombre del grupo de recursos.
  3. En la lista resultados, seleccione el nombre del grupo de recursos para ver la información general.
  4. Seleccione Eliminar grupo de recursos.
  5. Se le pedirá que confirme la eliminación del grupo de recursos. Escriba el nombre del grupo de recursos para confirmar y seleccione Eliminar.

Transcurridos unos instantes, el grupo de recursos y todos sus recursos se eliminan.

Pasos siguientes

En este tutorial ha creado una clave de App Configuration que hace referencia a un valor almacenado en Key Vault. Puede encontrar más preguntas en la documentación de referencia, que contiene todos los detalles sobre cómo funciona la biblioteca de Azure App Configuration de Spring Cloud. Para obtener información sobre cómo usar las marcas de características en la aplicación de Java Spring, continúe con el siguiente tutorial.