Azure Help API を試した

azure
Published: 2023-08-16

はじめに

Azure Help API が一般公開されました。

参考:General Availability : Help API provides access to self-help diagnostics

SR を上げる際に選べる自動トラブルシューティングを API で呼び出せるようになったようです。百聞は一見に如かずということで実際に試してみました。

実施する自動トラブルシューティングを選ぶ

まずは実施する自動トラブルシューティングを選ぶ必要があります。トラシュしたいリソースの ID に /providers/Microsoft.Help/discoverySolutions?api-version=2023-06-01 をつけて GET 要求を送信します。

> $resoruceUri = "/subscriptions/MY-SUB-ID/resourceGroups/acg-vse/providers/Microsoft.Network/virtualNetworks/acg-vse-vnet/providers/Microsoft.Help/discoverySolutions?api-version=2023-06-01" 

do {
    $res = Invoke-AzRest -Path $resoruceUri
    ($res.Content | ConvertFrom-Json -Depth 100).value | Select-Object name, @{Label="description"; Expression={$_.properties.description}}, @{Label="requiredParameterSets"; Expression={$_.properties.requiredParameterSets}} | fl *
    $resoruceUri = ($res.Content | ConvertFrom-Json -Depth 100).nextlink -replace "https://management.azure.com",""

} while ($resoruceUri)

name                  : DDoSMitigationDetectedInsight
description           : Detect DDoS mitigation detected
requiredParameterSets : {ResourceUri}

name                  : VpnGwyTrafficSelector
description           : VPN Gateway Traffic Selector Insights
requiredParameterSets : {ResourceUri}

name                  : Port25BlockedInsights
description           : Get Insights for VNet connectivity cannot send email issue
requiredParameterSets : {ResourceUri}

name                  : CannotDeleteVNetInsightsV2
description           : Cannot Delete VNet Insights V2
requiredParameterSets : {ResourceUri}

name                  : VNetPeeringMisConfigInsight
description           : Get Insight when a VNET mis-configuration issue happens
requiredParameterSets : {ResourceUri}

name                  : IkeLogsVpnRcaInsights
description           : VPN RCA IKE Logs Insights
requiredParameterSets : {ResourceUri}

実施したいトラブルシューティングの name をメモしておきます。今回は Port25BlockedInsights を試します。

自動トラブルシューティングの実施

次にリソース配下の providers/Microsoft.Help/diagnostics/<name>?api-version=2023-06-01 に対して PUT 要求を送信します。要求本文には上で確認した自動トラブルシューティングの名前とリソースの Uri を追加します。

/subscriptions/MY-SUB-ID/resourceGroups/acg-vse/providers/Microsoft.Network/virtualNetworks/acg-vse-vnet/providers/Microsoft.Help/diagnostics/18?api-version=2023-06-01

{
  "properties": {
    "insights": [
      {
        "solutionId": "Port25BlockedInsights",
		"additionalParameters":{
		"ResourceUri": "/subscriptions/MY-SUB-ID/resourceGroups/acg-vse/providers/Microsoft.Network/virtualNetworks/acg-vse-vnet"
		}
      }
    ]
  }
}

<name> の部分は親リソース内でユニークである必要があります。重複するとエラーになります。エラーなく通ると、自動トラブルシューティングが始まります。

{
  "id": "/subscriptions/MY-SUB-ID/resourceGroups/acg-vse/providers/Microsoft.Network/virtualNetworks/acg-vse-vnet/providers/Microsoft.Help/diagnostics/18",
  "name": "18",
  "type": "Microsoft.Help/Diagnostics",
  "properties": {
    "provisioningState": "Running",
    "acceptedAt": "2023-08-16T12:00:33.2730993Z"
  }
}

結果の取得

自動トラブルシューティングは非同期で実施されるので、PUT 要求では結果が返ってきません。作成した自動トラブルシューティングのリソースに対して改めて GET 要求を送信することで結果を取得を取得できます。

/subscriptions/MY-SUB-ID/resourceGroups/acg-vse/providers/Microsoft.Network/virtualNetworks/acg-vse-vnet/providers/Microsoft.Help/diagnostics/18?api-version=2023-06-01

{
  "id": "/subscriptions/MY-SUB-ID/resourceGroups/acg-vse/providers/Microsoft.Network/virtualNetworks/acg-vse-vnet/providers/Microsoft.Help/diagnostics/18",
  "name": "18",
  "type": "Microsoft.Help/Diagnostics",
  "properties": {
    "provisioningState": "Succeeded",
    "acceptedAt": "2023-08-16T12:00:33.2730993Z",
    "diagnostics": [
      {
        "solutionId": "Port25BlockedInsights",
        "status": "Succeeded",
        "insights": [
          {
            "id": "SmtpPort25BlockUnQualifiedSub",
            "title": "SMTP Outbound Traffic Not Qualified to be Enabled On TCP Port 25",
            "results": "<!--issueDescription-->\n<p>種類が <strong>'Visual Studio Enterprise subscribers'</strong> のお客様のサブスクリプション <strong>'Visual Studio Enterprise サブスクリプション'</strong> では、TCP ポート 25 での Azure リソースからのメール送信は、例外なく<strong>承認されない</strong>ことが確認されました。</p>\n<p>Azure では、スパムを停止し、マイナスの IP 評価によるお客様への悪影響が小さくなるよう努めています。 仮想マシン (VM) から外部ドメイン (outlook.com、gmail.com など) への直接のアウトバウンド メール送信は、特定のサブスクリプションの種類でのみ使用できます。 TCP ポート 25 (主に認証されていないメール配信に使用される) を使用した送信 SMTP 接続は、ほとんどの新しいサブスクリプションでブロックされます。</p>\n<!--/issueDescription-->\n<h2><strong>推奨される手順</strong></h2>\n<ul>\n<li>この制限と移行方法の詳しい情報については、次の記事を参照してください。<a href=\"https://docs.microsoft.com/azure/virtual-network/troubleshoot-outbound-smtp-connectivity\">電子メールを送信するための Azure セキュリティの強化</a></li>\n</ul>\n",
            "importanceLevel": "Critical"
          }
        ]
      }
    ]
  }
}

SR を上げる際に実行できる自動トラブルシューティングに表示されるのと同じ内容が返ってきました。

ポータルでの結果

おわりに

GA になった Azure Help API を試しました。ぱっと思いついたユースケースは次の通りです。

  • 独自のアプリケーションを作ることで、ポータルへのアクセス権を持たない人に自動トラブルシューティングの機能を提供する
  • Azure Monitor のアラートを素のメールで受け取るのではなく、自動トラブルシューティングを実行してその結果をメールに付与してくれる Functions を経由させることで、アラート対応の初動を改善する

劇的に何かが変わるようなアップデートではなく、今までは手が届かなかった痒い所に手が届くようになった系のアップデートですね。