Gerenciamento secreto do Spring Cloud Azure

Este artigo aplica-se a: ✔️ Versão 4.14.0 Versão 5.8.0 ✔️

Construção do Spring Cloud Azure que contém segredos armazenados nos Segredos do Cofre de Chaves do Azure PropertySource .

Configuração de dependência

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

Gorjeta

Nós também fornecemos spring-cloud-azure-starter-keyvault suporte a 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 no [0-9a-zA-Z-]. Para obter mais informações, consulte a seção Nome docofre e Nome do objeto da visão geral de chaves, segredos e certificados do Cofre da Chave do Azure. 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. No seu aplicativo, você ainda pode usar spring.datasource.url para recuperar o valor da propriedade.

Nota

Este método não pode satisfazer um requisito como spring.datasource-url. Quando você salva spring-datasource-url no Cofre da Chave, somente spring.datasource.url e spring-datasource-url é suportado para recuperar o valor da propriedade, mas spring.datasource-url não é suportado. Para lidar com esse caso, consulte a seção Usar espaços reservados de propriedade.

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 obterá um nome de propertyWithoutSpecialCharacter chave e atribuirá seu valor ao 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 serão atualizados a KeyVaultPropertySource 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 na SystemEnvironmentPropertySource lista PropertySource, então KeyVaultPropertySource terá a prioridade mais alta.
  • Se houver SystemEnvironmentPropertySource na lista PropertySource, então SystemEnvironmentPropertySource tenha prioridade maior do que KeyVaultPropertySource. Isso significa que você pode usar a variável de ambiente para substituir o valor secreto do Cofre da Chave em seu aplicativo.
  • Se houver vários KeyVaultPropertySource na lista PropertySource, a ordem de definição será a ordem de prioridade. Tome a amostra acima como exemplo, key-vault-property-souece-1 tem prioridade maior do que key-vault-property-souece-2.

Todas as propriedades configuráveis

Property Valor predefinido Description
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[].sensível a maiúsculas e minúsculas false 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 minutos 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[].cliente 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 a ID do Microsoft Entra 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, , , , não estiverem configuradas em spring.cloud.azure.keyvault.secret.property-sources[].xxx, spring.cloud.azure.xxxproxycredentialprofileretry serão usadas. Consulte Configuração do Spring Cloud Azure para obter mais informações sobre essas propriedades comuns.
  • Consulte Propriedades de configuração do Spring Cloud Azure para obter mais informações sobre propriedades aninhadas.

Exemplos

Veja os exemplos spring-cloud-azure-starter-keyvault-secrets no GitHub.