Я пытаюсь настроить версию 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 не заполнен:
При отладке этого кода с точкой останова мы видим, что информация кажется доступной внутри, но она не сопоставляется со свойством Конфигурация сайта, общедоступным внутри свойства Внутренний.
Снимок экрана сеанса отладки, на котором мы видим заполненный непубличный элемент _siteConfig:
Это баг или я что-то пропустил?
Любые идеи ?


Да. Если вы используете этот способ, 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);
Как только этот PR будет объединен, свойство MinTlsVersion должно быть доступно непосредственно на webApp.
https://github.com/Azure/azure-libraries-for-net/pull/1023
Спасибо за ваш ответ, это работает! Моим первоначальным намерением было запросить все наши службы приложений подписки, чтобы получить их конфигурации TLS, за один вызов (используя ListAsync). Я был в восторге от того, что это возможно, когда увидел, что объектная модель возвращается, но был более скептичен, когда увидел, что вызов Get также не возвращает информацию. Мне придется запрашивать каждую конфигурацию службы приложений :(