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 quekey-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 enspring.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.