Gerenciamento secreto do Spring Cloud Azure
Este artigo aplica-se a:✅ Versão 4.19.0 ✅ Versão 5.19.0
Spring Cloud Azure construct PropertySource
que contém segredos armazenados no Azure Key Vault Secrets.
Configuração de dependência
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-keyvault-secrets</artifactId>
</dependency>
Dica
Também fornecemos spring-cloud-azure-starter-keyvault
para suportar todos os recursos do Key Vault. Se você optar por usá-lo, spring.cloud.azure.keyvault.enable
é a propriedade a ser configurada e o valor padrão é true. Em seguida, você pode usar spring.cloud.azure.keyvault.<keyvault-service>.enable
para desativar serviços desnecessários.
Utilização básica
Se você quiser autenticar por client-id
e client-secret
, as seguintes propriedades são necessárias:
Propriedades de configuração
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);
}
}
Utilização avançada
Caracteres especiais no nome da propriedade
Os nomes secretos do Cofre de Chaves suportam apenas caracteres em [0-9a-zA-Z-]
. Para obter mais informações, consulte a seçãoVault-name e Object-name de visão geral de chaves, segredos e certificados do Azure Key Vault. Se o nome da propriedade contiver outros caracteres, você poderá usar as soluções alternativas descritas nas seções a seguir.
Use -
em vez de .
em nomes secretos
.
não é suportado em nomes secretos. Se seu aplicativo tiver um nome de propriedade que contenha .
, como spring.datasource.url
, substitua .
por -
ao salvar o segredo no Cofre de Chaves do Azure. Por exemplo, salve spring-datasource-url
no Cofre da Chave do Azure. Em seu aplicativo, você ainda pode usar spring.datasource.url
para recuperar o valor da propriedade.
Observação
Este método não pode satisfazer um requisito como spring.datasource-url
. Quando você salva spring-datasource-url
no Cofre da Chave, apenas spring.datasource.url
e spring-datasource-url
são suportados para recuperar o valor da propriedade, mas não há suporte para spring.datasource-url
. Para lidar com esse caso, consulte a seção
Usar espaços reservados de propriedade
Por exemplo, suponha que você esteja definindo essa propriedade em seu arquivo application.properties
property.with.special.character__=${propertyWithoutSpecialCharacter}
O aplicativo receberá um nome de chave propertyWithoutSpecialCharacter
e atribuirá seu valor a property.with.special.character__
.
Diferencia maiúsculas de minúsculas
Para habilitar o modo que diferencia maiúsculas de minúsculas, você pode definir a seguinte propriedade:
spring.cloud.azure.keyvault.secret.property-sources[].case-sensitive=true
Não recuperar todos os segredos no Cofre da Chave
Se você armazenou 1000 segredos no Cofre da Chave, e você só quer usar 3 deles. Você pode listar os 3 nomes secretos por spring.cloud.azure.keyvault.secret.property-sources[].secret-keys
.
Definindo o intervalo de atualização
Por padrão, os segredos no KeyVaultPropertySource
serão atualizados a cada 30 minutos. Você pode configurar o tempo por spring.cloud.azure.keyvault.secret.property-sources[].refresh-interval
. Por exemplo: spring.cloud.azure.keyvault.secret.property-sources[].refresh-interval=60m
significa atualizar a cada 60 minutos. Defina como 0
para desativar a atualização automática.
Prioridade PropertySource
Se a chave existir em vários PropertySources, o que entrará em vigor será decidido pela prioridade.
- Se não houver
SystemEnvironmentPropertySource
na lista dePropertySource
, entãoKeyVaultPropertySource
terá a prioridade máxima. - Se houver
SystemEnvironmentPropertySource
na lista dePropertySource
,SystemEnvironmentPropertySource
terá prioridade maior do queKeyVaultPropertySource
, o que significa que você pode usar uma variável de ambiente para substituir o valor secreto do Cofre de Chaves em seu aplicativo. - Se houver várias fontes de propriedade do cofre de chaves na lista
PropertySource
, a ordem de definição será a ordem de prioridade. Tomando a amostra acima como exemplo,key-vault-property-source-1
tem uma prioridade maior do quekey-vault-property-source-2
.
Configurar credencial de token para a origem da propriedade do Cofre da Chave
Se você precisar usar uma credencial de token especificada para o Key Vault PropertySource
, poderá registrar o bean de TokenCredential
no ConfigurableBootstrapContext
para KeyVaultEnvironmentPostProcessor
, esse recurso é suportado pelo Spring Cloud Azure 5.19.0. Aqui está um exemplo 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 as propriedades configuráveis
Propriedade | Valor padrão | Descrição |
---|---|---|
spring.cloud.azure.keyvault.secret.property-source-enabled | verdadeiro | Se a fonte da propriedade Key Vault deve ser ativada. |
spring.cloud.azure.keyvault.secret.property-sources[].name | Nome desta fonte de propriedade. | |
spring.cloud.azure.keyvault.secret.property-sources[].endpoint | Ponto de extremidade do Azure Key Vault. | |
spring.cloud.azure.keyvault.secret.property-sources[].case-sensitive | falso | Se as chaves secretas diferenciam maiúsculas de minúsculas. |
spring.cloud.azure.keyvault.secret.property-sources[].secret-keys | As chaves secretas suportadas para esta fonte de propriedade. Todas as chaves serão recuperadas se esta propriedade estiver ausente. | |
spring.cloud.azure.keyvault.secret.property-sources[].refresh-interval | 30 metros | Intervalo de tempo para atualizar todos os segredos do Cofre da Chave. |
spring.cloud.azure.keyvault.secret.property-sources[].service-version | Versão do serviço secreto usada ao fazer solicitações de API. | |
spring.cloud.azure.keyvault.secret.property-sources[].client | Propriedades relacionadas ao cliente. | |
spring.cloud.azure.keyvault.secret.property-sources[].credential | Propriedades relacionadas a credenciais. | |
spring.cloud.azure.keyvault.secret.property-sources[].profile | Propriedades relacionadas ao perfil. | |
spring.cloud.azure.keyvault.secret.property-sources[].proxy | Propriedades relacionadas a proxy. | |
spring.cloud.azure.keyvault.secret.property-sources[].retry | Tente novamente propriedades relacionadas. |
- Consulte Autorizar acesso com o Microsoft Entra ID para se certificar de que a entidade de segurança recebeu a permissão suficiente para aceder aos Segredos do Cofre da Chave do Azure.
- Se propriedades comuns como
client
,credential
,profile
,proxy
,retry
não estiverem configuradas nospring.cloud.azure.keyvault.secret.property-sources[].xxx
,spring.cloud.azure.xxx
serão usadas. Consulte de configuração do Spring Cloud Azure para obter mais informações sobre essas propriedades comuns. - Consulte de propriedades de configuração do Spring Cloud Azure para obter mais informações sobre propriedades aninhadas.
Amostras
Veja os exemplos spring-cloud-azure-starter-keyvault-secrets no GitHub.