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 dePropertySource
,KeyVaultPropertySource
tendrá la prioridad más alta. - Si hay
SystemEnvironmentPropertySource
en la lista dePropertySource
,SystemEnvironmentPropertySource
tienen mayor prioridad queKeyVaultPropertySource
, 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 quekey-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. |
- Consulte Autorización del acceso con el identificador de Entra de Microsoft para asegurarse de que la entidad de seguridad de se 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 enspring.cloud.azure.keyvault.secret.property-sources[].xxx
, se usaráspring.cloud.azure.xxx
. 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.
Muestras
Consulte los ejemplos de spring-cloud-azure-starter-keyvault-secrets en GitHub.