Подключение к 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");
Другие вопросы по тегам