Microsoft Defender for Cloud / Azure Policy が何時動作しているのかを見極める

# 1. はじめに
Microsoft Defender for Cloud (以下 MDfC）を運用していると、推奨事項や規制コンプライアンスの元となるルール（Azure Policy）が何時、どのように動作しているのか見えなくてもどかしいことがあります。

- MDfC の画面からは、結果しか表示されておらず、この基準が何時チェックされたのかが分かりません。
    - ![20210816_ASC.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/cad8e9d5-f1c2-f427-bb2b-1bf9fcf6e8f9.png)
- MDfC 側から画面を辿ると、この機能がどの間隔でチェックされているのか表示されますが、最終反映日時が分からないため、1日経った後も「何時」反映されているのか気になったりします。
    - ![20210816_ASC2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/b629b07e-4b0c-9215-d870-f95939dc263e.png)

# 2. どうやって確認するか - Azure Policy を確認する！
このルールチェックですが、元となる Azure Policy 側で確認することが可能です。

- Azure Policy 画面より、MDfC 側で用いられているコンプライアンス（例：CIS Microsoft Azure Foundations Benchmark v1.1.0など）を開く
- コンプライアンスに紐づいているポリシーが表示されるので、対象のポリシーを開く
- 対象のポリシー画面より、「リソースのコンプライアンス」を開く
    - **「最終評価日時」**のフラグにて、Azure Policy がチェックした最終日時が表示されます。
    - ![20210816_Policy_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/6889edd9-0172-a867-cdf3-602759971826.png)

もう一つの方法として、API から直接取得する方法があります。
[Get-AZPolicyState](https://docs.microsoft.com/en-us/powershell/module/az.policyinsights/get-azpolicystate?view=azps-6.3.0)を使うことで、Azure Policy の詳細を取得することが可能です。

```Powershell
PS /home/TEST> Get-AzPolicyState -Filter "PolicyDefinitionName eq '34c877ad-507e-4c82-993e-3452a6e0XXXX' and ComplianceState eq 'NonCompliant'"
Timestamp                   : 8/15/2021 9:14:34 PM
ResourceId                  : /subscriptions/90023ff9-c905-4501-ae32-2b866814323f/resourcegroups/rg-hnakada-dev-001/providers/microsoft.storage/storageaccounts/sthnakadadeveastus
PolicyAssignmentId          : /subscriptions/90023ff9-c905-4501-ae32-2b866814323f/providers/microsoft.authorization/policyassignments/fba1e5b72a6d47b5b099fdd2
PolicyDefinitionId          : /providers/microsoft.authorization/policydefinitions/34c877ad-507e-4c82-993e-3452a6e0ad3c
IsCompliant                 : False
SubscriptionId              : 90023ff9-c905-4501-ae32-2b866814323f
ResourceType                : Microsoft.Storage/storageAccounts
ResourceLocation            : eastus
ResourceGroup               : rg-HNAKADA-dev-001
ResourceTags                : tbd
PolicyAssignmentName        : fba1e5b72a6d47b5b099fdd2
PolicyAssignmentOwner       : tbd
PolicyAssignmentScope       : /subscriptions/90023ff9-c905-4501-ae32-2b866814323f
PolicyDefinitionName        : 34c877ad-507e-4c82-993e-3452a6e0ad3c
PolicyDefinitionAction      : audit
PolicyDefinitionCategory    : tbd
PolicySetDefinitionId       : /providers/Microsoft.Authorization/policySetDefinitions/1a5bb27d-173f-493e-9568-eb56638dde4d
PolicySetDefinitionName     : 1a5bb27d-173f-493e-9568-eb56638dde4d
PolicySetDefinitionCategory : regulatory compliance
ManagementGroupIds          : ToBeIdentifiedMG,GSMO-MG,72f988bf-86f1-41af-91ab-2d7cd011db47
PolicyDefinitionReferenceId : cisv110x3x7
ComplianceState             : NonCompliant
AdditionalProperties        : {[complianceReasonCode, ]}

```

# 3. Azure Acitivity Log は使えないか？
当初、Azure Policy のステータス確認の方法として、LogAnalytics ワークスペースに保管される Azure Activity Logs をクエリーチェックすればいいんじゃないか？と思いました。
残念なことに、2020.10 に仕様変更がかかり、評価結果が変わらない正常なリソースについては Azure Activity Log に出力されなくなったそうです。
**Policy に非準拠となったリソースについては Azure Activity Log に記録されるため、監視・通知目的であれば運用的に問題は無い**のですが、日時オペレーションにおける対象ルールが「どのタイミングで」動いているのかをチェックしたい場合は、Azure Policy 側を見れば良い、といった回答になります。

https://jpazpaas.github.io/blog/2020/10/13/policy-activity-log.html#%E8%B3%AA%E5%95%8F

一方で、Azure Policy におけるエラーやトラブルは一部 Azure Activity Log に出力されますので、トラブルシューティングとしては Activity Log をクエリーするように記載されています。

- [公式ドキュメント：Troubleshoot errors with using Azure Policy](https://docs.microsoft.com/en-us/azure/governance/policy/troubleshoot/general)

>
Resolution
The error message from a deny policy assignment includes the policy definition and policy assignment IDs. If the error information in the message is missed, it's also available in the Activity log. Use this information to get more details to understand the resource restrictions and adjust the resource properties in your request to match allowed values.

# 4. まとめ
Microsoft Defender for Cloud は便利なのですが、準拠のチェックタイミングが24時間間隔（※ Azure Policy の設定に依存しているが、大体24時間が多い）なので、翌日経った後に debug したいニーズが多いのではないかと思います。Azure Policy の一部の画面にだけ表示されているので、気になった方はチェックしてみて下さい。どなたかの参考になれば幸いです。

＊本稿は、個人の見解に基づいた内容であり、所属する会社の公式見解ではありません。また、いかなる保証を与えるものでもありません。正式な情報は、各製品の販売元にご確認ください。