Вызов для возврата секрета из KeyVault через SecretClient с использованием учетных данных управляемой идентификации не возвращается из вызова Java

Вызов для возврата секрета из KeyVault через SecretClient с использованием учетных данных управляемой идентификации не возвращается из вызова Java

Я запускаю Ubuntu на виртуальной машине Linux в облаке Azure. Для этой виртуальной машины установлено значение «Системная идентификация». Мое хранилище ключей предоставило моей виртуальной машине роль администратора хранилища ключей.

Мой код Java ниже взят из примера на https://github.com/Azure/azure-sdk-for-java/wiki/Azure-Identity-Examples Результат показан ниже. У меня включена отладка для com.azure. Когда он создает учетные данные, я получаю одну строку выходных данных из кода Azure SDK, который ищет переменные среды.

LOGGER.debug("Retrieve Credentials from Azure");
KeyVaultSecret keyVaultSecret = null;
try {
    String keyVaultURL = "https://" + uCCVMAttributesUpdate.getAzureKeyVault() + 
           AZURE_KEYVAULT_SUFFIX;
    LOGGER.debug("keyVaultURL<" + keyVaultURL + ">");
    
    SecretClient secretClient = new SecretClientBuilder()
         .httpLogOptions(new HttpLogOptions().setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS))
         .vaultUrl( keyVaultURL )
         .credential (new ManagedIdentityCredentialBuilder().build() )
         .buildClient();
    LOGGER.debug("SecretClient created");
    keyVaultSecret = secretClient.getSecret(AZURE_SECRET_NAME);
    LOGGER.debug("Secrets retrieved");
} catch (Exception e) {
    LOGGER.error("Caught exception reading Azure secrets", e);

}

Вывод:

2021-03-22 15:21:48 - [pool-3-thread-1] [DEBUG] [com.impl.ServiceImpl] - Получение учетных данных из Azure 2021-03-22 15:21:48 - [pool-3 -thread-1] [DEBUG] [com.impl.ServiceImpl] - keyVaultURL https://KeyVaultName.vault.azure.net/ 2021-03-22 15:21:48 - [pool-3-thread-1] [DEBUG] [com.azure.core.util.logging.ClientLogger] - Azure Identity = ›Найдено следующие переменные среды:

Кто-нибудь знает, в чем может быть проблема, или что еще я мог сделать, чтобы получить дополнительную отладку?

Мне нужно выяснить, почему вызов не возвращается, не генерирует исключение или не выводит дополнительную отладку. Кроме того, я не понимаю, когда он ищет переменные среды, поскольку я использую ManagedIdentityCredentialBuilder.

Кстати, я получил тот же результат, используя DefaultAzureCredential, который, как объясняется в следующей ссылке, сначала попытается найти управляемое удостоверение, а затем откатится к другим методам, которые используют переменные среды: https://docs.microsoft.com/en-us/java/api/overview/azure/identity-readme?view=azure-java-stable

Спасибо за любую помощь.


person plex4r    schedule 23.03.2021    source источник


Ответы (2)


Код выглядит правильно. Вы можете использовать DefaultAzureCredential где-нибудь, только EnvironmentCredential относится к переменным среды.

Примечание. ManagedIdentityCredential не работает в локальной среде, см. здесь.

ManagedIdentityCredential работает только в средах служб Azure, поддерживающих аутентификацию с управляемой идентификацией. Это не работает в локальной среде.

person Pamela Peng    schedule 24.03.2021
comment
Памела, спасибо за комментарии. Я использую это только на виртуальной машине Azure, поэтому, как вы сказали, код выглядит правильно. Если у вас есть какие-либо идеи, как я могу отладить это или получить дополнительную информацию, пожалуйста, дайте мне знать. Есть ли способ привлечь поддержку Azure? - person plex4r; 24.03.2021
comment
Не могли бы вы попробовать отладить исходный код ManagedIdentityCredential? Если действительно есть ошибка, вы можете оставить отзыв здесь. - person Pamela Peng; 25.03.2021
comment
Привет, Памела, как я могу это отладить? Где взять исходный код? Спасибо за ваши предложения! - person plex4r; 26.03.2021
comment
Обратитесь к классу: github.com/Azure/azure-sdk-for-java/blob/master/sdk/identity/ - person Pamela Peng; 28.03.2021

Эта строка выглядит как какой-то вход в azure-identity даже для MSI.

Но приведенное выше не решит вашу проблему. Может быть, вы можете попробовать последнюю версию azure-identity (я думаю, что это 1.2.4) и поместить ее в первую из ваших зависимостей (чтобы убедиться, что последняя версия azure-core).

И какой-либо другой вывод после этого журнала?

person weidongxu    schedule 25.03.2021
comment
weidonxu, после одной строки из com.azure нет других выходных данных: Azure Identity = ›Обнаружены следующие переменные среды :. Я тоже обновился до 1.2.4, но результат тот же. Пожалуйста, дайте мне знать, если у вас есть другие предложения. - person plex4r; 26.03.2021
comment
Я действительно пробовал это здесь. Нет проблем с моим тестом. Странно то, что сначала он пытается выполнить запрос без токена-носителя и терпит неудачу с 401, затем другой запрос возвращает 200. И я не видел Azure Identity = ›Обнаружил следующие переменные среды: log, вместо этого я увидел Azure Identity = ›Среда управляемой идентификации: AZURE VM IMDS ENDPOINT, затем Azure Identity =› getToken () результат для областей [vault.azure .net / .default]: УСПЕХ. - person weidongxu; 27.03.2021