Descreva o bug
Atualmente, o cofre de chaves habilita o recurso de exclusão reversível por padrão. Se criar / excluir o certificado, o aplicativo Jave travará porque carregou o segredo desabilitado.
A classe KeyVaultPropertySource carrega todos os segredos no KeyVault. Não deve carregar segredos desativados no método getPropertyNames
A propósito, a solução alternativa é limpar o certificado. Mas ainda pode melhorá-lo na parte do SDK porque não há solicitação para carregar o segredo excluído por software
Exceção ou Stack Trace
Adicione o registro de exceção e o rastreamento de pilha, se disponível
Reproduzir
Passos para reproduzir o comportamento:
A. Criou certificados KeyVault (não secretos) e excluiu os certificados depois que o aplicativo java travou.
C. os certificados criam automaticamente um identificador secreto ao criar novos certificados
D. E depois de excluir o certificado, o sistema Azure DESATIVAR o identificador secreto
E. Nesse caso, o aplicativo java tenta ler o segredo DESATIVADO em tempo de execução
eu. E então o aplicativo Java travou.
A biblioteca é com.microsoft. azure: azure-keyvault : 1.2.2
Fragmento de código
Adicione o trecho de código que causa o problema.
@Value ("$ {cluster-app-sb-connection-string}")
String connectionString;
@Value ("$ {cluster-app.sb.topic-name}")
String topicName;
Comportamento esperado
Uma descrição clara e concisa do que você esperava que acontecesse.
Capturas de tela
Se aplicável, adicione capturas de tela para ajudar a explicar seu problema.
Configuração (preencha as seguintes informações):
Contexto adicional
Adicione qualquer outro contexto sobre o problema aqui.
Lista de verificação de informações
Certifique-se de adicionar todas as informações a seguir acima e verificar os campos obrigatórios, caso contrário, trataremos o emissor como um relatório incompleto
@ TonySh127-ms você está usando o key vault starter ou o SDK diretamente?
Discutido com @ TonySh127-ms offline e o cliente usou o spring-boot-starter para keyvault. Precisa de confirmação por parte do SDK de que se o novo SDK resolve esse tipo de problema.
@AlexGhiondea @ vcolin7 pode fazer um acompanhamento?
obrigado @joshfree e @saragluna. Aguardando atualização de @AlexGhiondea e @ vcolin7 . Por favor, deixe-me saber se não puder ser corrigido em um curto prazo. Posso explicar para o lado do cliente. Muito obrigado pelo seu tempo novamente!
Olá @ TonySh127-ms,
Passei algum tempo examinando esse problema e descobri o seguinte: o comportamento que o cliente vê é causado pelo modo como funciona o iniciador Spring Boot para Key Vault Secrets. Basicamente, sempre que um aplicativo Spring usando este starter é executado, ele obterá os nomes de todos os segredos existentes em um determinado vault chamando o endpoint / secrets, que carrega todos os segredos ativados e desativados (não os excluídos), o aplicativo irá então recupere detalhes de segredos específicos, se necessário. Não é um problema com o serviço Key Vault ou SDK, mas apenas uma consequência de como o Spring Boot starter é codificado.
Uma solução de curto prazo não é usar o Spring Boot starter, mas o próprio Key Vault SDK diretamente. Dessa forma, o cliente terá mais controle sobre quais segredos são carregados e quando durante o ciclo de vida de um aplicativo.
Além disso, não consegui reproduzir um caso em que meu aplicativo travou ao carregar muitos segredos apenas ao criar e excluir um certificado em um cofre. Para fazer algo assim, eu precisaria de mais informações do cliente: quais dependências eles usam em seu projeto, incluindo versões e código de amostra onde isso pode ser reproduzido.
@ vcolin7 temos uma opção de passar para o SDK que carregue apenas segredos habilitados? Parece que não devemos carregar os segredos desabilitados em nossa integração Spring.
@saragluna Infelizmente, não há nenhum parâmetro que possamos passar o serviço para que ele nos forneça apenas os segredos habilitados: /
O problema é causado pela forma como o iniciador Spring Boot para Key Vault Secrets funciona. não filtramos segredos desativados. agora eu crio um PR para corrigir o problema
@ TonySh127-ms
Nós construímos um pacote dev , você pode tentar.
Siga esta página para baixar o pacote dev
Olá equipe, o problema foi confirmado como corrigido. Podemos fechar este tópico agora. Muito obrigado a todos, grande esforço e tempo !!!
Comentários muito úteis
O problema é causado pela forma como o iniciador Spring Boot para Key Vault Secrets funciona. não filtramos segredos desativados. agora eu crio um PR para corrigir o problema