Azure-sdk-for-java: [ОШИБКА] Метод KeyVaultPropertySource Class / getPropertyNames загружает все секреты (включая секреты отключения) в хранилище ключей.

Созданный на 13 авг. 2020  ·  10Комментарии  ·  Источник: Azure/azure-sdk-for-java

Опишите ошибку
В настоящее время в хранилище ключей по умолчанию включена функция обратимого удаления. Если создать / удалить сертификат, приложение Jave выйдет из строя, потому что оно загрузит отключенный секрет.
Класс KeyVaultPropertySource загружает все секреты в KeyVault. Он не должен загружать отключенные секреты в методе getPropertyNames
Кстати, обходной путь - очистить сертификат. Но он все же может лучше улучшить его на части SDK, потому что нет запроса на загрузку мягко удаленного секрета.

Исключение или трассировка стека
Добавьте журнал исключений и трассировку стека, если доступно

Воспроизводить
Шаги по воспроизведению поведения:
A. Создал сертификаты KeyVault (не секрет) и удалил сертификаты, после чего Java-приложение разбилось.
C. сертификаты автоматически создают секретный идентификатор при создании новых сертификатов.
D. И после удаления сертификата система Azure ОТКЛЮЧАЕТ секретный идентификатор
E. В этом случае приложение Java пытается прочитать ОТКЛЮЧЕННЫЙ секрет во время выполнения.
я. А затем приложение Java упало.
Библиотека - com.microsoft. лазурный: лазурный ключ-хранилище : 1.2.2
Фрагмент кода
Добавьте фрагмент кода, который вызывает проблему.

@Value ("$ {кластер-приложение-sb-строка-подключения}")
String connectionString;
@Value ("$ {cluster-app.sb.topic-name}")
String topicName;
Ожидаемое поведение
Четкое и краткое описание того, что вы ожидали.

Скриншоты
Если возможно, добавьте снимки экрана, чтобы объяснить вашу проблему.

Настройка (пожалуйста, заполните следующую информацию):

  • ОС: [например, iOS]
  • IDE: [например, IntelliJ]
  • Версия используемой библиотеки

Дополнительный контекст
Добавьте сюда любой другой контекст проблемы.

Контрольный список информации
Пожалуйста, убедитесь, что вы добавили всю следующую информацию выше, и отметьте обязательные поля, иначе мы будем рассматривать эмитента как неполный отчет.

  • [x] Добавлено описание ошибки
  • [] Шаги воспроизведения добавлены
  • [] Информация о настройке добавлена
Client azure-spring azure-spring-keyvault customer-reported question

Самый полезный комментарий

Проблема вызвана тем, как работает стартер Spring Boot для Key Vault Secrets. мы не отфильтровывали отключенные секреты. сейчас создаю пиар, чтобы исправить проблему

Все 10 Комментарий

@ TonySh127-ms вы используете стартер хранилища ключей или SDK напрямую?

Обсуждался с @ TonySh127-ms в автономном режиме, и заказчик использовал spring-boot-starter для keyvault. Требуется подтверждение со стороны SDK о том, решает ли новый SDK подобную проблему.

@AlexGhiondea @ vcolin7, не могли бы вы продолжить?

спасибо @joshfree и @saragluna. Жду обновления от @AlexGhiondea и @ vcolin7 . Пожалуйста, дайте мне знать, если это не удастся исправить в ближайшее время. Я могу объяснить это клиенту. Еще раз большое спасибо за ваше время!

Привет @ TonySh127-ms!

Я потратил некоторое время на изучение этой проблемы и обнаружил следующее: поведение, которое видит клиент, вызвано тем, как работает стартер Spring Boot для Key Vault Secrets. По сути, всякий раз, когда приложение Spring, использующее этот стартер, запускается, оно будет получать имена всех существующих секретов в данном хранилище, вызывая конечную точку / secrets, которая загружает все включенные и отключенные секреты (не удаленные), приложение затем при необходимости получить подробную информацию о конкретных секретах. Это не проблема службы Key Vault или SDK, а просто следствие того, как написан стартер Spring Boot.

Кратковременное решение - не использовать стартер Spring Boot, а напрямую Key Vault SDK. Таким образом, у клиента будет больше контроля над тем, какие секреты загружаются и когда в течение жизненного цикла приложения.

Кроме того, я не мог воспроизвести случай, когда мое приложение вылетало из-за загрузки слишком большого количества секретов, просто создавая и удаляя сертификат в хранилище. Чтобы сделать что-то подобное, мне потребуется дополнительная информация от клиента: какие зависимости они используют в своем проекте, включая версии и пример кода, где это можно воспроизвести.

@ vcolin7 есть ли у нас возможность передать SDK, который загружает только включенные секреты? Похоже, мы не должны загружать отключенные секреты в нашу интеграцию Spring.

@saragluna К сожалению, нет параметра, который мы могли бы передать службе, чтобы предоставить нам только включенные секреты: /

Проблема вызвана тем, как работает стартер Spring Boot для Key Vault Secrets. мы не отфильтровывали отключенные секреты. сейчас создаю пиар, чтобы исправить проблему

@ TonySh127-ms
Мы собираем dev-пакет , можете попробовать.
Перейдите на эту страницу, чтобы загрузить пакет разработчика

Привет, команда, проблема была подтверждена. Теперь мы можем закрыть эту тему. Огромное спасибо всем, много сил и времени !!!

Была ли эта страница полезной?
0 / 5 - 0 рейтинги