【Azure】アラートルールとアクショングループを作成する（Azure PowerShell）

# 概要
アラートルール（アクティビティログ）とアクショングループ（Webhook）を作成した際の備忘録です。

## 全体
```sample.ps1
#パラメータ
$location               = 'japaneast'
$resourceGroupName      = 'sampleRG'
$actionGroupName        = 'sampleActionGroup'
$webhookName            = 'webhookSample'
$webhookUri             = 'sampleUri'
$AlertName              = 'sampleAlert'

# WebhookReceiverObject（実行したいWebhook）を作成する
$AzActionGroupWebhookReceiverObject  =  New-AzActionGroupWebhookReceiverObject -Name $webhookName -ServiceUri $webhookUri

# アクショングループを作成する
New-AzActionGroup -Name $actionGroupName -ResourceGroupName $resourceGroupName -Enabled -GroupShortName supportReq -WebhookReceiver @($webhookReceiverObject) -Location global

# 作成したアクショングループのリソースIDを取得する
$ActionGroupResource   = Get-AzActionGroup -Name $actionGroupName -ResourceGroupName $resourceGroupName
$ActionGroupResourceId = $ActionGroupResource.Id

# 作成したアクショングループをアラートルール用のオブジェクトとして取得する
$actiongroup = New-AzActivityLogAlertActionGroupObject -Id $ActionGroupResourceId -WebhookProperty @{"subscription"=(Get-AzContext).$subscriptionId}

#アラートの条件を作成する
$condition1 = New-AzActivityLogAlertAlertRuleAnyOfOrLeafConditionObject -Equal Administrative -Field category
$condition2 = New-AzActivityLogAlertAlertRuleAnyOfOrLeafConditionObject -Equal Microsoft.Support/supportTickets/write -Field operationName

#アラートルールを作成する
New-AzActivityLogAlert -Name $AlertName -ResourceGroupName $ResourceGroupName -Enabled 1 -Action $actiongroup -Condition @($condition1, $condition2) -Location global -Scope $scope

```

## 要素の解説
### 実行するWebhook
```AzActionGroupWebhookReceiverObject.ps1
New-AzActionGroupWebhookReceiverObject
    -Name "webhookName"
    -ServiceUri "webhookUri"
```
Webhookオブジェクトを作成します。


### アクショングループ（Webhook）
```AzActionGroup.ps1
New-AzActionGroup
    -Name "actionGroupName"
    -ResourceGroupName "resourceGroupName"
    [-Enabled] 
    [-GroupShortName "sampleName"]
    [-WebhookReceiver @("webhookReceiverObject1", "webhookReceiverObject2")]
    -Location "sampleLocation"
```
Webhookを実行するアクショングループを作成します。
`-Enabled`オプションは任意ですが、アラートルール同様に、指定しない場合は無効化状態で作成されます。

注意点として、`-Enabled 1`や`-Enabled true`とすると、エラーになります。`-Enabled`のみでOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3242301/52a28aa0-76de-2af8-2789-182257da7e36.png)

`-GroupShortName`オプションは、公式ドキュメントだと任意のような記載ですが、オプションを削除して実行するとエラーになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3242301/65dcd8a3-d425-aa6e-9baf-83bf13d4fc98.png)


`-WebhookReceiver`オプションの部分は、実行するアクションに応じて、`-SmsReceiver`オプションや`-VoiceReceiver`に変更します。


### アラート条件
```AzActivityLogAlertAlertRuleAnyOfOrLeafConditionObject.ps1
New-AzActivityLogAlertAlertRuleAnyOfOrLeafConditionObject
    [-Field "field"]
    [-Equal "value"]
```
アラートを発報する条件を作成します。
`-Feild`オプションで、条件の種類を指定し、`-Equal`で値を指定します。
例えば、VMの作成/更新を行った場合のアクティビティログ（Create/update virtualmachines resources (virtualmachines)）を条件とした場合は、下記のようにします。
`-Field "operationName"`  
`-Equal microsoft.vmware/virtualmachines/Write`   

（オブジェクト名がとても長い、、、）



### アクティビティログアラート
```AzActivityLogAlert.ps1
New-AzActivityLogAlert
    -Name "alertRuleName"
    -ResourceGroupName "RGName"
    [-Enabled 1]
    -Action @("actionGroupObject1", "actionGroupObject2")
    -Condition @("conditionObject1", "conditionObject2")
    -Location "sampleLocation"
    -Scope "sampleScope"
```
最後にアクティビティログアラートを作成します。
`-Enabled`オプションは任意ですが、指定しない場合は無効化状態で作成されます。
こちらは逆に、`-Enabled`のみで実行すると、エラーになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3242301/16044fc8-bc57-ac0e-fba6-ce73c6969b29.png)

`-Action`オプションで前に作成したアクショングループ、`-Condition`オプションでアラート条件を指定します。

:::note warn
`-Enabled`オプションの注意点
- **New-AzActionGroup**（アクショングループ）の`-Enabled`オプションは値なし
- **New-AzActivityLogAlert**（アラートルール）の`-Enabled`オプションは1または0を指定
:::

#### 参考

https://learn.microsoft.com/en-us/powershell/module/az.monitor/new-azactivitylogalert?view=azps-13.0.0

https://learn.microsoft.com/ja-jp/powershell/module/az.monitor/new-azactivitylogalertalertruleanyoforleafconditionobject?view=azps-12.5.0

https://learn.microsoft.com/ja-jp/powershell/module/az.monitor/new-azactiongroup?view=azps-13.0.0&viewFallbackFrom=azps-12.2.0

https://learn.microsoft.com/ja-jp/powershell/module/az.monitor/new-azactiongroupwebhookreceiverobject?view=azps-12.5.0