Как получить информацию о конфигурации TLS службы приложений Azure с помощью пакета SDK для Azure .NET Fluent?

Я пытаюсь настроить версию TLS в службе приложений (WebApp) с помощью Azure Fluent .NET SDK на C#.

Я использовал следующий код для получения информации WebApp с помощью LINQPad:

    // Nuget : Install-Package Microsoft.Azure.Management.AppService.Fluent -Version 1.24.0
    // using Microsoft.Azure.Management.AppService.Fluent;
    // using Microsoft.Azure.Management.AppService.Fluent.Models;
    // using Microsoft.Azure.Management.ResourceManager.Fluent;

    // Using a Service Principal created on my Azure Subscription
    var clientId = "<service_principal_clientid_with_readaccess>";
    var tenantId = "<my_azuread_tenantid>";

    var credentials = SdkContext
        .AzureCredentialsFactory
        .FromServicePrincipal(clientId, 
            Util.GetPassword("azure-cli-secret"), // LINQPad helper, replace if needed 
            tenantId, 
            AzureEnvironment.AzureGlobalCloud);

    // Get one web app with TLS 1.2 configured
    var webApp = AppServiceManager
        .Authenticate(credentials, "<azure_subscription_id>")
        .WebApps
        .GetById("<webapp_resource_id>");

    // Dump object returned, LINQPad helper method
    webApp.Dump();

При возврате объектной модели дампа я нигде не нахожу информацию о TLS. Это то, что должно быть доступно, поскольку оно возвращается REST API.

Анализ

Вы можете видеть, что информация доступна с помощью https://resources.azure.com или непосредственно на этой конечной точке:

https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Web/sites/{appServiceName}/config?api-version=2018-02-01

Это дает вам следующий вывод (список свойств сокращен здесь):

{
  "value": [
    {
      "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Web/sites/{appServiceName}/config/web",
      "name": "{appServiceName}",
      "type": "Microsoft.Web/sites/config",
      "location": "West Europe",
      "properties": {
        "http20Enabled": false,
        "minTlsVersion": "1.2",
        "ftpsState": "AllAllowed",
        "reservedInstanceCount": 0,
        "preWarmedInstanceCount": null,
        "healthCheckPath": null
      }
    }
  ],
  "nextLink": null,
  "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Web/sites/{appServiceName}/config"
}

Затем я посмотрел исходный код SDK, доступный здесь: https://github.com/Azure/azure-libraries-for-net. Я обнаружил, что версия TLS должна быть доступна в объекте Конфигурация сайта. Этот Конфигурация сайта находится внутри свойства Внутренний.

Глядя на дамп объекта, который мы получили с помощью LINQPad, мы видим, что объект SiteConfig не заполнен:

Как получить информацию о конфигурации TLS службы приложений Azure с помощью пакета SDK для Azure .NET Fluent?

При отладке этого кода с точкой останова мы видим, что информация кажется доступной внутри, но она не сопоставляется со свойством Конфигурация сайта, общедоступным внутри свойства Внутренний.

Снимок экрана сеанса отладки, на котором мы видим заполненный непубличный элемент _siteConfig:

Как получить информацию о конфигурации TLS службы приложений Azure с помощью пакета SDK для Azure .NET Fluent?

Это баг или я что-то пропустил?
Любые идеи ?

Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
0
432
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Да. Если вы используете этот способ, siteConfig всегда будет возвращать значение null. Это по дизайну. Если вы хотите получить соответствующую информацию, вы можете использовать следующий метод:

            AzureCredentials credentials = SdkContext.AzureCredentialsFactory.FromServicePrincipal(
            clientId,
            clientSecret,
            tenantId,
            AzureEnvironment.AzureGlobalCloud).WithDefaultSubscription(subscriptionId);

        RestClient restClient = RestClient
            .Configure()
            .WithEnvironment(AzureEnvironment.AzureGlobalCloud)
            .WithLogLevel(HttpLoggingDelegatingHandler.Level.Basic)
            .WithCredentials(credentials)
            .Build();


        ResourceManagementClient resourceManagementClient = new ResourceManagementClient(restClient);
        WebSiteManagementClient webSiteManagementClient = new WebSiteManagementClient(restClient);
        webSiteManagementClient.SubscriptionId = subscriptionId;
        var configs = webSiteManagementClient.WebApps.GetConfigurationAsync("<rg name>", "<app name>").Result;
        var minTls = configs.MinTlsVersion;
        Console.WriteLine(minTls);

Спасибо за ваш ответ, это работает! Моим первоначальным намерением было запросить все наши службы приложений подписки, чтобы получить их конфигурации TLS, за один вызов (используя ListAsync). Я был в восторге от того, что это возможно, когда увидел, что объектная модель возвращается, но был более скептичен, когда увидел, что вызов Get также не возвращает информацию. Мне придется запрашивать каждую конфигурацию службы приложений :(

Cédric V 30.07.2019 15:02

Как только этот PR будет объединен, свойство MinTlsVersion должно быть доступно непосредственно на webApp. https://github.com/Azure/azure-libraries-for-net/pull/1023

Другие вопросы по теме