Defender for Cloud の 身に覚えのない BYOL を削除する

:::note alert
このサブスクリプションでは BYOL ソリューションが既に構成されているため、脆弱性評価ソリューションの自動プロビジョニングを構成できません
:::

Defender for Cloud の自動プロビジョニングの設定画面で、上のメッセージがでて脆弱性評価ソリューションの構成が変更できない場合の対処策です。材料としては [ライセンス持ち込み (BYOL) 脆弱性評価ソリューションをデプロイする](https://docs.microsoft.com/ja-jp/azure/defender-for-cloud/deploy-vulnerability-assessment-byol-vm) の記事で参照されている [このスクリプト](https://github.com/Azure/Microsoft-Defender-for-Cloud/tree/main/Powershell%20scripts/Vulnerability%20Solution) で呼び出されている REST API を使います。

スクリプトでは最後に BYOL の削除を行うためのコマンドがコメントアウトされています。削除すべき BYOL の場所やリソースグループがわかっている場合にはこれを使えば削除できますが、今回は BYOL を設定した覚えがなく、どのリソースグループに対して実行すればいいかわからない想定なので、まず次の API 呼び出しで BYOL が有効になっている場所を表示します。

`$subscriptionID` と `$requestHeader` は以降のコマンドで使いまわすので同じコンソールで作業を継続してください。
```powershell
$subscriptionID = "<your subscription id>"
$token = (Get-AzAccessToken).token
$requestHeader = @{
	"Authorization" = "Bearer " + $token
	"Content-Type" = "application/json"
}
$uri="https://management.azure.com/subscriptions/" + $subscriptionID + "/providers/Microsoft.Security?api-version=2022-05-01"
Invoke-RestMethod -Uri $uri -Method get -Headers $requestHeader | % resourceTypes |  ? {$_.resourceType -eq "locations/securitySolutions"}

```

次のような感じの出力になると思います。
```
resourceType                locations                                  apiVersions                      capabilities
------------                ---------                                  -----------                      ------------
locations/securitySolutions {Central US, West Europe, West Central US} {2020-01-01, 2015-06-01-preview} None        
```

location に対して順番に securitySolutions を確認します。
次のような呼び出し方で、おそらく Central US に身に覚えのない脆弱性管理ソリューションが設定されています。
```powershell
$location = "Central US"
$url="https://management.azure.com/subscriptions/" + $subscriptionID + "/providers/Microsoft.Security/locations/" + $location + "/securitySolutions?api-version=2015-06-01-preview"
Invoke-RestMethod -Uri $url -Method get -Headers $requestHeader | % value | ? {$_.resourceType -eq "locations/securitySolutions"}
```

当たりのロケーションであれば下のような感じの出力になります、この例では身に覚えのない Qualys が、存在しないリソースグループ DefaultResourceGroup-ASC に設定されていました。

```
properties : @{securityFamily=Va; integrationLevel=SemiIntegrated; protectionStatus=Good; template=qualys.qualysAgent; protectedResourcesStates=System.Object[]; protect
             edResourcesTypes=System.Object[]; managementUrl=http://www.qualys.com/; creationDate=2021-01-13T04:41:19.6811512Z; provisioningState=Succeeded; clusterId=F
             BB723E718C694B56461E464DDF9181705C54BE0; configurations=}
id         : /subscriptions/<subscription id>/resourceGroups/DefaultResourceGroup-ASC/providers/Microsoft.Security/locations/centralus/securitySolutions/DSREQualysASC
name       : DSREQualysASC
type       : Microsoft.Security/locations/securitySolutions
location   : centralus
```

`id` が削除すべき BYOL の脆弱性管理ソリューションなので、コピーして次の API 呼び出しで削除します。
```powershell
Invoke-RestMethod -Method DELETE -Headers $requestHeader -Uri  "https://management.azure.com/subscriptions/" + $subscriptionID + "/resourceGroups/DefaultResourceGroup-ASC/providers/Microsoft.Security/locations/centralus/securitySolutions/DSREQualysASC?api-version=2015-06-01-preview"
```

これで脆弱性ソリューションの自動プロビジョニングが変更できるようになったはずです。