Доступ к секретному хранилищу ключей Azure в функции Azure - PullRequest
0 голосов
/ 15 октября 2019

Я создаю функцию Azure в python, запускаемую событиями Event Grid, которые должны быть в состоянии собрать секрет из Kay Vault.

Я добавил назначенное системой управляемое удостоверение в свое функциональное приложение, а затем смог выбрать свое приложение в политиках доступа Key Vault. Я дал ему разрешения, как показано ниже:

Permissions for function app

(я пробовал разные комбинации в этом)

Также я предоставил новую настройку приложения со ссылкой на упомянутое хранилище ключей.

reference for key vault

К сожалению, когда я пытаюсь проверить это значение из кода, я не могу его получить.

logging.info(os.environ)

Когда ядобавьте еще одну настройку приложения, просто с открытым текстом это прекрасно работает. Буду благодарен за любые идеи, что еще можно сделать.

Ответы [ 3 ]

1 голос
/ 15 октября 2019

Я не мог понять, что вы хотите получить с os.environ. Я тестирую с помощью функции. Это может работать для меня.

В функции для получения значения ключа, если вы уже установили его в настройках приложения, вы можете использовать Environment.GetEnvironmentVariable("secrest name", EnvironmentVariableTarget.Process) для его реализации.

enter image description here

enter image description here

1 голос
/ 15 октября 2019

Вы можете использовать следующий помощник для получения значений

namespace AccessKeyVault
{
    public static class GetKeyVaultValues
    {
        [FunctionName("GetKeyVaultValues")]
        public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequestMessage req, TraceWriter log)
        {
            log.Info("C# HTTP trigger function processed a request.");

            string linkKeyVaultUrl = $"https://keyVaultname.vault.azure.net/secrets/";
            string keyvaultKey = $"KeyVaultKey";
            var secretURL = linkKeyVaultUrl + keyvaultKey;

            //Get token from managed service principal
            var azureServiceTokenProvider = new AzureServiceTokenProvider();
            var kvClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
            try
            {
                var clientIdRecord = await kvClient.GetSecretAsync(secretURL).ConfigureAwait(false);

                string KeyvaultValue = clientIdRecord.Value;

                return req.CreateErrorResponse(HttpStatusCode.OK, "Key vault secret value is  :  " + KeyvaultValue);
            }
            catch (System.Exception ex)
            {

               return req.CreateResponse(HttpStatusCode.BadRequest, "Key vault value request is not successfull");
            }

        }
    }
}
0 голосов
/ 16 октября 2019

После нескольких часов тестов я нашел правильный способ решить эту проблему.

В случае проблем с Key Vault Reference убедитесь, что функция приложения, используемая для функции Azure, основана на правильном плане хостинга.

enter image description here

Функции «плана потребления» недоступны для использования Key Vault Reference. Тот же код в «Плане обслуживания приложений» работает правильно.

https://docs.microsoft.com/en-us/azure/app-service/app-service-key-vault-references

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