Из-за некоторых новых требований безопасности API-интерфейс, который я сейчас разрабатываю, должен хранить несколько URL-адресов, имен учетных записей Azure и т. Д. В хранилище ключей Azure, а не в файле конфигурации application.yml.
Проблема в том, что у меня проблемы с аутентификацией / доступом к клиенту хранилища ключей в локальной среде. У меня очень ограниченный доступ к самому хранилищу функций / клавиш Azure, поэтому тестирование нового кода, который я пишу, на данный момент практически невозможно:
public String getSecretFromKeyVault(String key) {
/**
* Breaks in the constructor call, as the system.env variables for MSI_ENDPOINT and MSI_SECRET are null.
**/
AppServiceMSICredentials credentials = new AppServiceMSICredentials(AzureEnvironment.AZURE);
KeyVaultClient client = new KeyVaultClient(credentials);
SecretBundle secret = client.getSecret("url-for-key-vault", key);
return secret.value();
}
Я знаю, что переменные будут установлены на облачном сервере, но у меня вопрос как я могу наилучшим образом убедиться, что вызовы хранилища были выполнены правильно (юнит, интеграция, локальные тесты e2e) и как мне удалось бы использовать вызовы из хранилища ключей во время локальной разработки / выполнения?
Альтернативой MSI может быть ввод идентификатора и ключа клиента вручную после проверки подлинности по активному каталогу. Это может быть решением для локальной разработки, но все же потребует декларации конфиденциальной информации в исходном коде.
Я также попытался войти в Azure, используя az login
перед запуском сервера, но это тоже не сработало.
Есть ли у кого-нибудь какие-либо предложения о том, как мне решить эту проблему, или какие у меня лучшие варианты на будущее?
Замечания по применению:
- Java версия: 8
- пружинный ботинок
- Среда разработки и развертывания Azure / vsts