Azure VMゲスト構成拡張機能を試してみた

Microsoft Defender for Cloudにあるコンプライアンス「Azure Security Benchmark v3」のPV-4に「ゲスト構成拡張機能がマシンにインストールされている必要がある」という項目があります。
[ゲスト構成拡張機能の概要](https://docs.microsoft.com/ja-jp/azure/virtual-machines/extensions/guest-configuration) を見てもいまいちよく分からなかったので、実際に試してみました。

# 概要
* [ゲスト構成拡張機能の概要](https://docs.microsoft.com/ja-jp/azure/virtual-machines/extensions/guest-configuration) ページに ```ゲスト構成拡張機能は、仮想マシン内で監査および構成操作を実行する Azure Policy のコンポーネントです``` とあります。実際にAzureポリシーの定義を見ると理解が深まりましたので見ていきます。
* Azure Portalより[Azure Policy]を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/f2c42cfb-f54d-2973-22c9-3624addc8cc7.png)

* 左メニューより[定義]を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/e567365c-b4b3-c59f-c565-bf6b14981eb7.png)

* カテゴリで[Guest Configuration]を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/f9d4236a-7c38-6617-a33b-e09c271014f6.png)

* ここで表示される定義がゲスト構成拡張機能で検出できる一覧です。例えばWindowsのユーザーパスワードに関する監査など、仮想マシン内の項目まで検出できることが分かります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/1da1716d-6379-e705-c9ce-76a84da2cb67.png)

# ポリシー割り当て
* 今回はこの中から[指定した日数以内に再起動されていないWindowsマシンを監査する]ポリシーを割り当ててみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/721fd46b-6532-28ef-ff91-32e723ddcec8.png)

* 検索バーから[再起動]と入力し、該当のポリシーを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/4bd6cf94-30d8-6e62-66f4-e7df6011d21a.png)

* [割り当て]を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/e06b0a0c-de32-89aa-2835-3eea09fecbd4.png)

* [スコープ]を選択します。デフォルトではサブスクリプションに対してですが、特定のリソースグループのみにすることもできます。また、[除外]の設定で、特定のリソースはポリシー監査の除外にすることも可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/302e68e4-3690-f9a9-23e7-521dbf90a1a0.png)

* パラメーターで[入力またはレビューが必要なパラメーターのみを表示する]のチェックを外します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/729acd10-e507-3023-f65c-06150d1b2a1e.png)

* [日数]に1を入力します。今回は1日以上再起動していなければ検知する条件とします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/89e8796f-b2f9-6494-3012-0197b0547baf.png)

* [修復]タブではデフォルト設定で次にいきます。準拠していなければ準拠するよう自動的に対処する設定ですが、今回は監査したいだけなので不要です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/81ed1c0c-8e71-4178-5495-7842a1c6a2a2.png)

* [非準拠メッセージ]タブで非準拠メッセージを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/6d933ea2-a3c8-b48f-6fb0-c896954a1884.png)

* ここまで設定出来たらポリシーを割り当てます。

* Policyの左メニューから[コンプライアンス]を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/459b2488-0286-4552-a85b-dba26e2116e3.png)

* 先ほど割り当てたポリシーを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/06d10b54-0e2d-6a69-09a1-8ecbc044553c.png)

* [GCExtensionIdentityMissing]と表示されていると思います。これはVMに拡張機能がインストールされていない且つVMにマネージドID設定がされていない場合に出力されるものです。次に拡張機能をインストールします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/488099c2-ffc4-d700-61a1-b839ccb61bb1.png)

# 拡張機能インストール
* Cloud Shellを開いてAzure CLIを使います。
* VMにアタッチされている拡張機能を表示します。

```
az vm extension list -g [Resource Group Name] --vm-name [VM Name] -o table
```

* 拡張機能をインストールします。

```
az vm extension set  --publisher Microsoft.GuestConfiguration --name ConfigurationforWindows --extension-instance-name AzurePolicyforWindows --resource-group [Resource Group Name] --vm-name [VM Name] --enable-auto-upgrade true
```

* 再度確認します。[AzurePolicyforWindows]という拡張機能がインストールされていればOKです。

```
az vm extension list -g [Resource Group Name] --vm-name [VM Name] -o table
```

# マネージドID設定
* ここまででポリシーの準拠状況を見てみると、[ManagedIdentityMissing]というステータスに変わるはずです（ステータスが変わるまで数時間掛かります）。これは拡張機能はインストールされているが、対象VMのマネージドIDが有効化されていないという意味になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/63657289-a50e-a657-8e62-060fed87c382.png)

* Azure Portalから対象VMを選択、左メニューから[ID]を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/2401316e-c3a0-2d61-15f7-c51c3057b2ee.png)

* システム割り当てマネージドIDの状態を[オン]にして保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/4583d0a6-48d9-a702-0ed3-6812b9370533.png)

# 監査結果確認
* [ポリシー]→[コンプライアンス]の画面に戻り該当ポリシーを選択します。
* 準拠していないサーバーが検出されていることが分かります。（該当VMは数日再起動していません）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/70f07c60-b77c-9a47-5fec-e30576100489.png)

* [詳細]ボタンを押すと、非準拠メッセージが表示されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/b23cc573-bda4-de67-26bb-deb6519f4fa7.png)

* 該当VMを再起動すると、非準拠が解消されることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/5d5e05eb-e835-b553-dd85-f97ee3ed4061.png)

以上