Лазурный ключ-хранилище: доступ запрещен

У меня есть следующий код для получения секретности из хранилища ключей Azure:

public static async Task<string> GetToken(string authority, string resource, string scope)
    {
        var authContext = new AuthenticationContext(authority);
        ClientCredential clientCred = new ClientCredential(...); //app id, app secret
        AuthenticationResult result = await authContext.AcquireTokenAsync(resource, clientCred);

        if (result == null)
            throw new InvalidOperationException("Failed to obtain the JWT token");

        return result.AccessToken;
    }

    public static string GetSecret(string secretName)
    {
        KeyVaultClient keyVaultClient = new KeyVaultClient(GetToken);
        try
        {
            return keyVaultClient.GetSecretAsync("my-key-vault-url", secretName).Result.Value;
        }
        catch(Exception ex)
        {
            return "Error";
        }
    }

Ошибка, которую я получаю, это "доступ запрещен", который (я думаю) означает, что идентификатор, секрет и URL-адрес хранилища в порядке. Тем не менее, я не знаю, что я могу сделать по-другому, чтобы исправить эту ошибку, может быть, есть настройки на портале Azure, которые мешают мне читать секрет?

Ответ 1

Чтобы устранить доступ, вам необходимо настроить разрешения Active Directory. Предоставьте доступ к KeyVault.

1. Использование PowerShell Запустите следующую команду:

Set-AzureRmKeyVaultAccessPolicy -VaultName 'XXXXXXX' -ServicePrincipalName XXXXX -PermissionsToKeys decrypt,sign,get,unwrapKey

2. Использование портала Azure

  1. Открытые хранилища ключей
  2. Выберите политики доступа из ресурса ресурса Key Vault
  3. Нажмите кнопку [+ Добавить новый] в верхней части лезвия
  4. Нажмите " Выбрать главный", чтобы выбрать приложение, которое вы создали ранее.
  5. В раскрывающемся списке "Права доступа" выберите "Расшифровать", "Подписать", "Получить", "Разрешить доступ"
  6. Сохранить изменения

Уполномочить приложение использовать ключ или секрет

Ответ 2

Вопрос задал использование Azure Portal, я документировал создание принципала для доступа к Key Vault здесь.

В частности, из шага 2:

Откройте хранилище ключей на портале Azure и выберите в разделе "Настройки" лезвие политики доступа. Нажмите "Добавить новое" и нажмите "Выбрать главный" - вам нужно будет ввести полное имя зарегистрированного приложения, созданного на предыдущем шаге в поле поиска, прежде чем оно появится, и в этот момент вы сможете выбрать его,

Вы можете выбрать подходящий шаблон из верхнего раскрывающегося списка или выбрать "Ключ", "Секрет" или "Сертификат" вручную. На этом этапе не стоит беспокоиться об авторизированном приложении.

ВАЖНО: нажатие кнопки "ОК" добавит вашу новую политику в список, но она не будет сохранена! Обязательно нажмите "Сохранить" перед продолжением.

Ответ 4

Если вы хотите авторизовать это приложение для чтения секретов в своем хранилище, выполните следующие действия:

Set-AzureRmKeyVaultAccessPolicy -VaultName 'yourKeyVaultName' -ServicePrincipalName ClientId -PermissionsToSecrets Get

При регистрации приложения в Azure ClientId создается.

Ответ 5

Доступ к ключевому хранилищу в.Net-коде Azure Настройка: - Приложение Service- 1-Включить-MSI (идентификатор управляемой службы) -ON

Ключ-хранилище: 1-открытое хранилище ключей 2-Выберите политики доступа из ресурса ресурса ключа хранилища

3- Нажмите кнопку [+ Добавить новый] в верхней части клинка. 4-Click Select Principal, чтобы выбрать приложение (приложение), которое вы создали ранее

.Net Code: - Код для доступа к секретным ключам хранилища в.Net Code

 var azureServiceTokenProvider = new AzureServiceTokenProvider();
        var keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
        var secret = keyVaultClient.GetSecretAsync("https://test.vault.azure.net/", "clientid").Result.Value;