Administración de secretos de Azure en Spring Cloud

Este artículo se aplica a: ✔️ Versión 4.14.0 ✔️ versión 5.8.0

Construcción de Azure PropertySource de Spring Cloud 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>

Sugerencia

También se proporcionan 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 para 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 desea autenticarse mediante client-id y client-secret, se requieren las siguientes propiedades:

Configuration Properties

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 lasección Nombre de almacén y Nombre de objeto de la información general sobre 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.

Uso - 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. Cuando se guarda spring-datasource-url en Key Vault, solo spring.datasource.url y spring-datasource-url se admite para recuperar el valor de la propiedad, pero spring.datasource-url no se admite. 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 :

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

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

Distinguir 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 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 por 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. Establézcalo 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 ninguna SystemEnvironmentPropertySource en la lista PropertySource, KeyVaultPropertySource tendrá la prioridad más alta.
  • Si hay SystemEnvironmentPropertySource en la lista PropertySource, SystemEnvironmentPropertySource tiene mayor prioridad que KeyVaultPropertySource. Esto significa que puede usar la variable de entorno para invalidar el valor de secreto de Key Vault en la aplicación.
  • Si hay varios KeyVaultPropertySource en la lista PropertySource, el orden de definición es el orden de prioridad. Tome el ejemplo anterior como ejemplo, key-vault-property-souece-1 tiene mayor prioridad que key-vault-property-souece-2.

Todas las propiedades configurables

Propiedad Valor predeterminado Descripción
spring.cloud.azure.keyvault.secret.property-source-enabled true 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 false 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.
  • Consulte Autorización del acceso con el identificador de Entra de Microsoft para asegurarse de que a la entidad de seguridad se le ha concedido el permiso suficiente para acceder a los secretos de Azure Key Vault.
  • Si las propiedades comunes como client, credential, profile, proxy, retry no están configuradas en spring.cloud.azure.keyvault.secret.property-sources[].xxx, spring.cloud.azure.xxx se usarán. Consulte Configuración de Azure de Spring Cloud para obtener más información sobre estas propiedades comunes.
  • Consulte Propiedades de configuración de Azure de Spring Cloud para obtener más información sobre las propiedades anidadas.

Ejemplos

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