Azure VMの更新プログラム適用状態をLog Analyticsに収集して管理する

Azure AutomationとLog Analyticsを使って、Azure VMで適用されていない更新プログラムを管理できそうなので試してみました。

# 設定

## Log Analyticsワークスペース作成

* 新たに作成するか、既存のものがあれがそれでよいです。手順は割愛します。

## Automationアカウント設定

* Automationアカウントを開き、[更新プログラムの管理]を選択します。  
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/1d98189d-e44b-c7d7-a526-0d8dbfd89b1a.png)

* 事前に準備したLog Analyticsワークスペースを選択し、[有効化]を選択します。  
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/202f17e4-6637-ad4a-0d2f-d051286f5468.png)

## Azure VM追加

* しばらくすると有効化されるので、[Azure VM の追加]を選択します。  
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/bb18d837-23d4-8229-ee83-bed4163da500.png)

* 対象のVMを選択します。  
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/f3d7cb03-9c62-a081-fd3c-d5d4377e1164.png)

* しばらくすると更新プログラムが表示されます（表示されるまでかなり時間掛かりました）  
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/d4a73dc3-6548-a8f2-8f57-3bb7bb0fc22c.png)

## Azure以外のサーバー追加

AWS EC2で試しましたが、Log Analyticsワークスペースにインターネット経由もしくはExpressRoute PublicPeering経由で接続できれば問題ないはずです。

* 対象のLog Analyticsを選んで[詳細設定]を選択します。  
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/9954e820-321e-59ed-3dcf-16d21431ac68.png)

* エージェントをダウンロードし、ワークスペースIDと主キーをコピーしておきます。  
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/bb3588f1-eeec-e0ad-b121-1427e598fd73.png)

* 今回はLinuxで試します。Linuxの場合、対象サーバーで以下のコマンドを実行します。

```
wget https://raw.githubusercontent.com/Microsoft/OMS-Agent-for-Linux/master/installer/scripts/onboard_agent.sh \
  && sh onboard_agent.sh -w [ワークスペースID] -s [主キー]
```

* しばらく時間を置いて、Automationアカウントの更新プログラムの管理にアクセスします。  
* 対象になっていないというメッセージが出るのでクリックします。  
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/dc4c84bd-4aab-c735-2d33-c658af1e62a0.png)

* 対象サーバーを有効化します。  
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/6b37e97c-9e34-d111-9239-cc8708fa2e7b.png)

* しばらくすると表示されます。  
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/cd903352-208f-d2e6-e77f-b8ce79d912ae.png)

# 更新プログラム確認

## Windows

* フィルタリングして更新プログラムだけを確認することも可能です  
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/b0418cc6-d6ba-ea84-736d-31f69caf7029.png)

## Linux

* Linuxも確認可能です  
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/ec952e6a-cf05-00df-daf4-ddb2b343dbe0.png)

# 更新プログラム適用

* [Automationアカウント]→[更新プログラムの管理]から[更新プログラムの展開のスケジュール]を選択します。  
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/a703f40e-4fde-dfb4-e75b-b6212fa2fa7b.png)

* 以下のような画面になるので各種設定していきます。  
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/73a4c81b-ebcc-6352-a120-a66e94a0a85a.png)

 * 適用対象VMを選択します。  
 ![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/bdc9b9ce-ee3a-3d84-d67d-c729c9c39611.png)

 * 例えば[重要な更新プログラム]のみを対象にすることも可能です。  
 ![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/fd9cf6fa-ed8f-c0b8-e610-423a1c18b495.png)

 * スケジュールは例えば毎月月末といった指定もでき、  
 ![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/f1b94037-3582-34ea-f168-9ebef8c72909.png)

 * 毎月第3土曜日といった指定も可能です。  
 ![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/b5c80bf6-4bf1-964a-7e62-cb5c50025869.png)

 * 但し最長が月単位なので、2ヶ月に1回とか4半期に1回とかは難しそうです。

* 事前事後スクリプトを実行することができます。大抵は適用の前にバックアップ取りたいはずなので、事前スクリプトでAzure Backup実行とかもできそうですね。別途試してみたいと思います。  
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/d45a7394-34d5-1eda-6bc4-2fe6fddae7b8.png)

* 更新プログラムの管理ページに戻り、[スケジュールされた更新プログラムの展開]タブに先程作成したスケジュールが追加されていればOKです。  
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/a2997826-4a85-c991-3b26-9a24d7f54c9b.png)

* メンテナンス中はこんな表示になります。  
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/70789c11-012e-89d2-11de-cfbc5f5bc7ed.png)

* 完了しました。コンプライアンスのチェックも正常になってますね。  
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/242d4892-aff8-5d68-6ee0-8a7c8ec3bf1b.png)

※ポータルへの反映には時間が掛かりますが、実際にOSにログインして確認してみると最新化されていて、リブートも走っていました。