如何使用Azure .NET Fluent SDK获取Azure应用服务TLS配置信息?

cmssoen2  于 2023-08-07  发布在  .NET
关注(0)|答案(2)|浏览(86)

我正在尝试使用Azure Fluent .NET SDK(C#)在应用程序服务(WebApp)上配置TLS版本。
我使用下面的代码通过LINQPad获取WebApp信息:

// 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版本应该在SiteConfig对象中可用。此SiteConfig似乎位于Inner属性内。
当查看我们使用LINQPad得到的对象转储时,我们可以看到SiteConfig对象没有被填充:


的数据
在调试此代码时,通过断点,我们可以看到信息似乎在内部可用,但它没有Map到SiteConfig属性,该属性在Inner属性中是公开可用的。
调试会话屏幕截图,其中我们看到填充了非公共member _siteConfig:



是窃听器还是我漏掉了什么?
有什么想法吗?

cbwuti44

cbwuti441#

是的。如果您使用这种方式,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);

字符串

stszievb

stszievb2#

一旦这个PR被合并,属性MinTlsVersion应该可以直接在webApp上使用。https://github.com/Azure/azure-libraries-for-net/pull/1023

相关问题