Получить Azure секрет KeyVault, используя секрет клиента - PullRequest
0 голосов
/ 25 мая 2020

Я экспериментирую с различными функциями Azure и сейчас хочу получить секрет из KeyVault.

Сразу к делу:

Я использую this пакет nuget для взаимодействия с моими azure ресурсами.

Я разработал простое приложение консоли. NET Core и запустил его локально.

У меня есть ресурс KeyVault с одним секретом определено, которое является активным и не истекшим.

Я зарегистрировал приложение в AAD, поэтому оно было отправлено локально. NET Базовое консольное приложение имеет идентификатор в AAD.

Чем я создал «секрет клиента» в этом зарегистрированном приложении в AAD, чтобы использовать его для аутентификации себя как приложения.

После этого я добавил политику доступа в свой ресурс KeyVault, чтобы разрешить операцию GET для секретов для этого зарегистрированного приложения: KeyVault access policies

Затем я разработал небольшой фрагмент кода, который должен получить желаемый секрет:

public class AzureAuthentication
{
    public async Task<string> GetAdminPasswordFromKeyVault()
    {
        const string clientId = "--my-client-id--";
        const string tenantId = "--my-tenant-id--";
        const string clientSecret = "--my-client-secret--";
        var credentials = new ClientSecretCredential(tenantId, clientId, clientSecret);
        var client = new SecretClient(new Uri("https://mykeyvaultresource.vault.azure.net"), credentials);
        var secret = await client.GetSecretAsync("admincreds");
        return secret.Value.Value;
    }
}

Однако, когда я пытаюсь это сделать Я получаю сообщение об ошибке AccessDenied: error

Я упустил что-то до боли очевидное? Или существует некоторая задержка (> 30 минут на данный момент), для которой применяются изменения с экрана политик доступа в ресурсе KeyVault?

Ответы [ 2 ]

1 голос
/ 26 мая 2020

Я тестирую ваш код и Get разрешение, все работает нормально.

enter image description here

Судя по вашему снимку экрана, похоже, вы не добавили правильный принципал службы, связанный с приложением AD, в Access policies.

Если вы добавите принципала службы, относящуюся к приложению AD, он будет отображаться как APPLICATION, а не COMPOUND IDENTITY.

enter image description here

enter image description here

Итак, когда вы добавляете его, вы можете искать client Id(i.e. application Id) или the name of your App Registration напрямую, убедитесь, что вы добавили правильный.

enter image description here

1 голос
/ 25 мая 2020

Убедитесь, что ваше приложение AD (субъект-служба) имеет правильные разрешения в вашем хранилище ключей -> Access policies

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...