Подключение к Azure KeyVault из приложения WPF Net Core 3.1
В моем текущем проекте WPF Net Core 3.1 я хочу, чтобы пользователь мог подключаться к хранилищу ключей Azure. У меня настроено хранилище ключей с настроенными политиками доступа или пользователями.
В документации я много читал о настройке подключения к хранилищу ключей с переменными среды с помощью
SecretClient(new Uri(_keyVaultUrl), new DefaultAzureCredential());
. Я не понимаю, как переменные среды могут быть здесь полезны, потому что они ограничены одной машиной, которая их установила. Приведенный выше код возвращает ошибку объекта Null в моем коде:
Azure.Identity.CredentialUnavailableException: 'DefaultAzureCredential failed to retrieve a token from the included credentials.
- EnvironmentCredential authentication unavailable. Environment variables are not fully configured.
- ManagedIdentityCredential authentication unavailable. The requested identity has not been assigned to this resource.
Status: 400 (Bad Request)
Есть ли прямой способ использовать секретный ключ клиента и идентификатор приложения, а затем подключиться и пройти аутентификацию в хранилище ключей Azure с помощью библиотеки идентификации Azure?
1 ответ
Во-первых, установка переменных среды предназначена для
Azure.Identity
использовать для создания
DefaultAzureCredential()
. Значит, вам нужно их установить.
Если ваше приложение размещено в Azure, вы можете легко использовать управляемую идентификацию с
DefaultAzureCredential
для доступа к Azure KeyVault, следуя этому образцу и этому документу .
Не забудьте установить политику доступа (это переменные среды в Azure) на шаге 1 по первой ссылке выше, которая предоставляет вашему субъекту службы / управляемому удостоверению доступ к KeyVault.
Но, как вы сказали, ваше приложение - это WPF, который, скорее всего, будет работать локально (соответствует размещению в Azure). В этом случае у вас нет управляемого удостоверения, но вы все равно можете создать субъект-службу для доступа к Azure KeyVault.
Вы можете обратиться к этому документу: Секретная клиентская библиотека Azure KeyVault для .NET - версия 4.2.0-beta.5.
После создания субъекта-службы самое важное остается тем же, что я упоминал ранее: установить политику доступа ( на этом шаге вы увидите переменные среды ). Вы можете установить его в Powershell следующим образом:
az keyvault set-policy --name <your-key-vault-name> --spn $Env:AZURE_CLIENT_ID --secret-permissions backup delete get list set
А затем создайте SecretClient для доступа к KeyVault:
// Create a new secret client using the default credential from Azure.Identity using environment variables previously set,
// including AZURE_CLIENT_ID, AZURE_CLIENT_SECRET, and AZURE_TENANT_ID.
var client = new SecretClient(vaultUri: new Uri(keyVaultUrl), credential: new DefaultAzureCredential());
// Create a new secret using the secret client.
KeyVaultSecret secret = client.SetSecret("secret-name", "secret-value");
// Retrieve a secret using the secret client.
secret = client.GetSecret("secret-name");