Использование Azure Active Directory Interactive при аутентификации из функций Azure в базу данных SQL Azure

Я пытаюсь аутентифицировать доступ из функции Azure к базе данных SQL Azure, используя управляемую идентификацию Azure Active Directory и Active Directory Interactive. Я успешно использовал инструкции на https://docs.microsoft.com/en-us/azure/app-service/app-service-web-tutorial-connect-msi при попытке аутентификации из службы приложения в базе данных SQL Azure, но в этом случае я могу декларативно настроить провайдер аутентификации в файле Web.config. Похоже, что для Функций Azure нет файла Web.config. Как программно сделать то же самое, что было сделано декларативно в файле Web.config для Функций Azure? Или здесь есть более простой подход? Я пытаюсь избежать встраивания секретов или использования ключевого значения для хранения секретов, и мне нужно решение, в котором я все еще могу отлаживать функции Azure локально в Visual Studio, как и для служб приложений.

Спасибо, Бонни




Ответы (1)



Как программно сделать то же самое, что было сделано декларативно в файле Web.config для Функций Azure? Или здесь есть более простой подход?


Согласно моему тесту, если мы хотим использовать Azure MSI для подключения Azure SQL в функции Azure, выполните следующие действия:

  1. Создание проекта приложения-функции в VS2019

  2. Настройте local.setting.json

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "<your storage connection string>",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet"
  },
  "ConnectionStrings": {
    "SQLConnectionString": "Server=tcp:<server name>.database.windows.net,1433;Initial Catalog=<db name>;"
  }

}
  1. Настроить MSI для VS

    а. Войдите в Visual Studio и используйте Tools> Options, чтобы открыть Параметры.

    б. Выберите Azure Service Authentication, введите свою учетную запись администратора Azure SQL и нажмите ОК.

  2. разработать функцию Например

/* please install sdk :
   Install-Package Microsoft.Azure.Services.AppAuthentication -Version 1.3.1
   Install-Package  System.Data.SqlClient -Version 4.6.1

*/
[FunctionName("Function1")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");
            string str = "SQLConnectionString";
            string conStr = GetSqlAzureConnectionString(str);
            var azureServiceTokenProvider = new AzureServiceTokenProvider();
            string accessToken = await azureServiceTokenProvider.GetAccessTokenAsync("https://database.windows.net/");

            var conn = new SqlConnection(conStr);
            conn.AccessToken = accessToken;
            string result = "";
            var sql = "select * from StarWars where episode=1";
            using (SqlCommand command = new SqlCommand(sql, conn))
            {
                conn.Open();
                using (SqlDataReader reader = command.ExecuteReader())
                {

                    while (reader.Read()) {

                        result = reader.GetString(2);
                    }
                }
            }
            return new OkObjectResult($"Hello, {result}");

        }

        private static string GetSqlAzureConnectionString(string SQLConnectionString)
        {
            string conStr = System.Environment.GetEnvironmentVariable($"ConnectionStrings:{SQLConnectionString}", EnvironmentVariableTarget.Process);
            if (string.IsNullOrEmpty(conStr)) // Azure Functions App Service naming convention
                conStr = System.Environment.GetEnvironmentVariable($"SQLAZURECONNSTR_{SQLConnectionString}", EnvironmentVariableTarget.Process);
            return conStr;
        }
  1. Отлаживайте функцию с помощью Visual Studio. Обратите внимание, что нам необходимо установить Основные инструменты функций Azure перед его отладкой.

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

  1. Создание функции Azure
  2. Настроить MSI для приложения-функции  введите описание изображения здесь  введите здесь описание изображения

  3. Настроить Azure SQL

    а. Используйте свой Администратор Azure Sql AD для подключения Azure SQL vai SSMS

    б. Добавьте MSI в нужную базу данных

    USE [<db name>]
    GO
    create user [<function app name>] from external provider
    ALTER ROLE db_owner ADD MEMBER [<function app name>]
    
  4. Добавьте строку подключения в настройки приложения приложения «Функции Azure»  введите описание изображения здесь введите описание изображения здесь

  5. Опубликуйте его с помощью Visual Studio < / а>

person Jim Xu    schedule 03.01.2020
comment
Спасибо за подробный ответ. Я придумал похожий подход. - person BonnieF; 09.01.2020