При использовании Azure keyvault SecretClient .net sdk необходимо указать версию API.
Я пытаюсь установить секрет в лазурном хранилище ключей, используя управляемую идентификацию. Есть две проблемы, с которыми я столкнулся прямо сейчас. Надеюсь, кто-нибудь сможет мне с этим помочь.
Код:
var client = new SecretClient(new Uri("keyvaulturl"),
new DefaultAzureCredential(new DefaultAzureCredentialOptions()
{ ExcludeManagedIdentityCredential = true }));
await client.SetSecretAsync(new KeyVaultSecret(keyName,
serializer.SerializeObject(someobject)));
Проблема 1:
DefaultAzureCrendetialOption не работает для управляемого удостоверения, но когда я устанавливаю для ExcludeManagedIdentityCredential значение true, он может вернуться к следующему провайдеру проверки подлинности (должен быть azure cli). Я не уверен, почему это происходит, потому что за пару дней до того, как тот же код заработал, и я смог установить и получить секреты keyvault, используя тот же код (конечно, без использования каких-либо параметров DefaultAzureCredentialOptions).
Обратите внимание, что эта проблема возникает только в моем локальном окружении, и управляемая идентификация работает нормально при развертывании в лазурном состоянии.
Проблема 2:
Когда для параметра ExcludeManagedIdentityCredential установлено значение true для локальной разработки, я начал замечать другую проблему, при которой возникает ошибка, связанная с отсутствием api-версии. Я не понимаю, почему и где мне нужно указывать версию api при использовании azure .net sdk.
Ошибка:
Запрос на обслуживание не выполнен. Статус: 400 (неверный запрос)
Content:{"error":{"code":"BadParameter","message":"необходимо указать api-версию"}}
1 ответ
Проблема 1:
Управляемая идентификация не может использоваться для аутентификации локально запущенных приложений по умолчанию. Попробуйте прочитать важный совет в документе .
Управляемую идентификацию нельзя использовать для аутентификации локально запущенных приложений. Ваше приложение должно быть развернуто в службе Azure, поддерживающей управляемую идентификацию.
Проблема 2:
Измените версию секретной клиентской библиотеки Azure Key Vault на последнюю версию.
dotnet add package Azure.Security.KeyVault.Secrets
Я пытался
DefaultAzureCredential
с переменными среды в моем локальном.
string keyVaultName = Environment.GetEnvironmentVariable("KEY_VAULT_NAME");
var kvUri = "https://" + keyVaultName + ".vault.azure.net";
var client = new SecretClient(new Uri(kvUri), new DefaultAzureCredential());
KeyVaultSecret secret = new KeyVaultSecret("testdefault", "123456");
KeyVaultSecret result = await client.SetSecretAsync(secret);
Console.WriteLine(result.Name);