Compartir a través de


Administración de secretos de Azure en Spring Cloud

Este artículo se aplica a:✅ versión 4.19.0 ✅ versión 5.19.0

Spring Cloud Azure construye PropertySource que contiene secretos almacenados en secretos de Azure Key Vault.

Configuración de dependencias

<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-starter-keyvault-secrets</artifactId>
</dependency>

Propina

También proporcionamos spring-cloud-azure-starter-keyvault para admitir todas las características de Key Vault. Si decide usarlo, spring.cloud.azure.keyvault.enable es la propiedad que se va a configurar y el valor predeterminado es true. Después, puede usar spring.cloud.azure.keyvault.<keyvault-service>.enable para deshabilitar los servicios innecesarios.

Uso básico

Si quiere autenticarse mediante client-id y client-secret, se requieren las siguientes propiedades:

Propiedades de configuración

spring:
  cloud:
    azure:
      keyvault:
        secret:
          property-sources:
            - name: key-vault-property-source-1
              endpoint: ${ENDPOINT_1}
            - name: key-vault-property-source-2
              endpoint: ${ENDPOINT_2}

Código Java

@SpringBootApplication
public class SampleApplication implements CommandLineRunner {

    @Value("${sampleProperty1}")
    private String sampleProperty1;
    @Value("${sampleProperty2}")
    private String sampleProperty2;
    @Value("${samplePropertyInMultipleKeyVault}")
    private String samplePropertyInMultipleKeyVault;

    public static void main(String[] args) {
        SpringApplication.run(SampleApplication.class, args);
    }

    public void run(String[] args) {
        System.out.println("sampleProperty1: " + sampleProperty1);
        System.out.println("sampleProperty2: " + sampleProperty2);
        System.out.println("samplePropertyInMultipleKeyVault: " + samplePropertyInMultipleKeyVault);
    }
}

Uso avanzado

Caracteres especiales en el nombre de propiedad

Los nombres de secretos de Key Vault solo admiten caracteres en [0-9a-zA-Z-]. Para más información, consulte la secciónNombre de almacén y Nombre de objeto de claves, secretos y certificados de Azure Key Vault. Si el nombre de la propiedad contiene otros caracteres, puede usar las soluciones alternativas descritas en las secciones siguientes.

Usar - en lugar de . en nombres secretos

. no se admite en nombres secretos. Si la aplicación tiene un nombre de propiedad que contiene ., como spring.datasource.url, reemplace . por - al guardar el secreto en Azure Key Vault. Por ejemplo, guarde spring-datasource-url en Azure Key Vault. En la aplicación, todavía puede usar spring.datasource.url para recuperar el valor de la propiedad.

Nota

Este método no puede satisfacer un requisito como spring.datasource-url. Al guardar spring-datasource-url en Key Vault, solo se admiten spring.datasource.url y spring-datasource-url para recuperar el valor de la propiedad, pero no se admite spring.datasource-url. Para controlar este caso, consulte la sección Usar marcadores de posición de propiedad.

Usar marcadores de posición de propiedad

Por ejemplo, supongamos que va a establecer esta propiedad en el archivo application.properties de :

property.with.special.character__=${propertyWithoutSpecialCharacter}

La aplicación obtendrá un nombre de clave propertyWithoutSpecialCharacter y asignará su valor a property.with.special.character__.

Distingue mayúsculas de minúsculas

Para habilitar el modo que distingue mayúsculas de minúsculas, puede establecer la siguiente propiedad:

spring.cloud.azure.keyvault.secret.property-sources[].case-sensitive=true

No se recuperan todos los secretos de Key Vault

Si almacenó 1000 secretos en Key Vault y solo quiere usar 3 de ellos. Puede enumerar los 3 nombres de secretos por spring.cloud.azure.keyvault.secret.property-sources[].secret-keys.

Establecer el intervalo de actualización

De forma predeterminada, los secretos de KeyVaultPropertySource se actualizarán cada 30 minutos. Puede configurar la hora spring.cloud.azure.keyvault.secret.property-sources[].refresh-interval. Por ejemplo: spring.cloud.azure.keyvault.secret.property-sources[].refresh-interval=60m significa actualizar cada 60 minutos. Establezca en 0 para deshabilitar la actualización automática.

Prioridad PropertySource

Si la clave existe en varios PropertySources, la prioridad decide que tendrá efecto.

  • Si no hay SystemEnvironmentPropertySource en la lista de PropertySource, KeyVaultPropertySource tendrá la prioridad más alta.
  • Si hay SystemEnvironmentPropertySource en la lista de PropertySource, SystemEnvironmentPropertySource tienen mayor prioridad que KeyVaultPropertySource, lo que significa que puede usar una variable de entorno para invalidar el valor de secreto de Key Vault en la aplicación.
  • Si hay varios orígenes de propiedades del almacén de claves en la lista de PropertySource, el orden de definición es el orden de prioridad. Tomando el ejemplo anterior como ejemplo, key-vault-property-source-1 tiene una prioridad más alta que key-vault-property-source-2.

Configuración de credenciales de token para el origen de propiedades de Key Vault

Si necesita usar una credencial de token especificada para key Vault PropertySource, puede registrar el bean de TokenCredential en el ConfigurableBootstrapContext para KeyVaultEnvironmentPostProcessor, esta característica es compatible con Spring Cloud Azure 5.19.0. Este es un ejemplo para usar AzureCliCredential:

public static void main(String[] args) {
    SpringApplication application = new SpringApplication(PropertySourceApplication.class);
    application.addBootstrapRegistryInitializer(registry -> 
            registry.register(TokenCredential.class, context -> new AzureCliCredentialBuilder().build()));

    application.run(args);
}

Todas las propiedades configurables

Propiedad Valor predeterminado Descripción
spring.cloud.azure.keyvault.secret.property-source-enabled verdadero Si se va a habilitar el origen de la propiedad de Key Vault.
spring.cloud.azure.keyvault.secret.property-sources[].name Nombre de este origen de propiedad.
spring.cloud.azure.keyvault.secret.property-sources[].endpoint Punto de conexión de Azure Key Vault.
spring.cloud.azure.keyvault.secret.property-sources[].case-sensitive falso Si las claves secretas distinguen mayúsculas de minúsculas.
spring.cloud.azure.keyvault.secret.property-sources[].secret-keys Claves secretas admitidas para este origen de propiedad. Todas las claves se recuperan si falta esta propiedad.
spring.cloud.azure.keyvault.secret.property-sources[].refresh-interval 30 m Intervalo de tiempo para actualizar todos los secretos de Key Vault.
spring.cloud.azure.keyvault.secret.property-sources[].service-version Versión del servicio secreto que se usa al realizar solicitudes de API.
spring.cloud.azure.keyvault.secret.property-sources[].client Propiedades relacionadas con el cliente.
spring.cloud.azure.keyvault.secret.property-sources[].credential Propiedades relacionadas con credenciales.
spring.cloud.azure.keyvault.secret.property-sources[].profile Propiedades relacionadas con el perfil.
spring.cloud.azure.keyvault.secret.property-sources[].proxy Propiedades relacionadas con el proxy.
spring.cloud.azure.keyvault.secret.property-sources[].retry Vuelva a intentar las propiedades relacionadas.

Muestras

Consulte los ejemplos de spring-cloud-azure-starter-keyvault-secrets en GitHub.