es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Referencias de Azure Key Vault para código Java / Pipeline de código Yaml.

Necesito ayuda para entender cómo configurar correctamente los Secretos de Key Vault en mi canalización.

Estoy construyendo una aplicación web Java utilizando Maven y desplegándola en un contenedor web de servicio de aplicación Linux.

Toda mi canalización se ejecuta en un archivo ADO Yaml con mi primera tarea siendo la Tarea del Key Vault de Azure para extraer los secretos, seguida de la tarea de construcción de Maven y la tarea de publicación de artefactos.

En general, el contenedor web se despliega correctamente, pero lo que necesito hacer ahora es asegurar mis secretos en Key Vault y eliminarlos del código fuente de mi aplicación web. Ahí es donde estoy confundido sobre cómo hacer que todo funcione junto.

En mi tarea de Key Vault de Azure en el archivo Yaml, tengo el siguiente código:

steps:
  - task: AzureKeyVault@2
    inputs:
      azureSubscription: 'mi_suscripción'
      KeyVaultName: 'mi_KV'
      SecretsFilter: '*'
      RunAsPreJob: false
      script: Write-Host $env:MI_VARIABLE_DE_ENTORNO_MAPEADA
    env:
      MI_VARIABLE_DE_ENTORNO_MAPEADA: $(my_secret)

Seguido por las tareas de Construcción de Maven y Publicación de Artefactos.

En el Portal de Azure, ya he creado un secreto (my_secret) que contiene el valor de mi cadena de conexión que estaba en mi código Java.

En mi código Java,

Tengo un archivo llamado Provider.java que contiene el siguiente código:

package com.example;

public interface Provider {
    String DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
    String ConnectionURL = "jdbc:sqlserver://11.2.4.11:8433;databaseName=TPNTFDB;user=tpntfpotsfinder;password=Potsfinder2!";
}

Ahora ni siquiera estoy seguro de haber mapeado correctamente mi variable de entorno para mis secretos.

Además, no estoy seguro de cómo puedo eliminar la URL de conexión codificada en mi código Java y reemplazarla por una referencia a Key Vault o una variable de entorno que permita a mi código resolver los secretos de Key Vault.

En otras palabras, después de guardar mi URL de conexión como un secreto en Key Vault y extraerlo usando una tarea de Key Vault en el archivo Yaml, ¿cómo puedo eliminar la URL de conexión codificada y reemplazarla por los Secretos de Key Vault?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para configurar correctamente las Claves Secretas de Key Vault en tu pipeline, deberás seguir estos pasos:

    1. Crea un secreto en Azure Key Vault que contenga el valor de tu cadena de conexión.
    2. Actualiza tu tarea de Azure Key Vault en tu archivo YAML para incluir las entradas correctas, incluyendo la suscripción y el nombre de Key Vault.
    3. Mapea una variable de entorno al secreto utilizando la sección env en tu archivo YAML.
    4. Modifica tu código Java para hacer referencia a la variable de entorno en lugar de la URL de conexión codificada.

    Aquí tienes un ejemplo de cómo podría verse tu archivo YAML actualizado:

    steps:
    - task: AzureKeyVault@2
      inputs:
        azureSubscription: 'mi_suscripción'
        KeyVaultName: 'mi_KeyVault'
        SecretsFilter: '*'
        RunAsPreJob: false
      env:
        CONNECTION_URL: $(mi_secreto)
    - task: Maven@3
      inputs:
        mavenPomFile: 'pom.xml'
        mavenOptions: '-Xmx3072m'
        javaHomeOption: 'JDKVersion'
        jdkVersionOption: '8'
        goals: 'package'
    - task: PublishBuildArtifacts@1
      inputs:
        PathtoPublish: '$(Build.ArtifactStagingDirectory)'
        ArtifactName: 'webapp'
    

    Observa la adición de la variable de entorno CONNECTION_URL en la sección env, la cual está mapeada al secreto mi_secreto extraído de Azure Key Vault.

    En tu código Java, elimina la URL de conexión codificada y reemplázala por la variable de entorno:

    package com.***.***.***;
    
    public interface Provider {
        String DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
        String Connection_URL = System.getenv("CONNECTION_URL");
    }
    

    Esto permitirá que tu código resuelva el valor del secreto desde la variable de entorno extraída de Azure Key Vault durante la ejecución del pipeline.

Comments are closed.