Azure Security Center / Azure Policy のエラーをチェックする
1. はじめに
前回、「Azure Security Center / Azure Policy が何時動作しているのかを見極める」編で Azure Policy が何時動作しているのか、記録をチェックする方法を紹介しましたが、Azure Policy のエラーについて取り上げられなかったので、追加で投稿したいと思います。
2. Azure Policy のエラーとは?
Azure Security Center では、コンプライアンスチェックの動作(推奨事項や規制コンプライアンス)において、Azure Policy が活用されていますが、エラーが生じる可能性もあります。
Azure Policy のエラーについては、公式ドキュメントに記載があります。
エラーが発生する可能性としては、ポリシーの割り当て拒否(権限など)や、テンプレートの構文エラーなどが有りそうです。
これらの検知を Azure Security Center がアラートなどで挙げてくれば良いのですが、ASC 側ではあくまで「非準拠」のアラート通報に特化しているため、Azure Policy にエラーが発生していないかどうかの確認は運用では別途検討した方が良さそうです。
3. どうやって確認するのか? - LogAnalytics でエラーをクエリーしてみる
Azure Policy のステータスは LogAnalytics に出力される Azure Activity Log にて出力されます。
前回も取り上げましたが、Azure Policy が定期的にチェックされて問題が無い場合 (Audit) は、Activity Log には出力されません。
新規に追加されたリソースや、構成変更が発生したリソースについては Activity Log に出力される仕様となっています。
LogAnalytics ワークスペースより、Kusto クエリーを用いて確認してみましょう。
3.1 Azure Policyでフィルタする
LogAnalytics より、Azure Policy のアクティビティをフィルタしてみます。
AzureActivity | where CategoryValue == "Policy"
Azure Policy の Activity Log への出力結果が分かります。
Activity Log の各種カラムの説明は公式ドキュメントに記載があります。
- AzureActivity
ステータス情報として活用できるフィールドとして、ActivityStatusValue
が使えるようです。
カラム | タイプ | 内容 |
---|---|---|
ActivityStatusValue | string | Status of the operation in display-friendly format. Common values include Started, In Progress, Succeeded, Failed, Active, Resolved. |
3.2 ActivityStatusValue で Group 化する
Kusto クエリーを用いて、Azure Policy のステータスを Group By してみます。
ActivityStatusValue は JSON フィールド Properties
に含まれているため、parse_json で抽出します。
AzureActivity | where CategoryValue == "Policy"
| extend d=parse_json(Properties) // parse_json で読み込み
| extend activityStatusValue = tostring(d["activityStatusValue"]), resource = tostring(d["resource"]), resourceProviderValue = tostring(d["resourceProviderValue"])
| extend policyDefinitionDisplayName_ = tostring(parse_json(tostring(Properties_d.policies))[0].policyDefinitionDisplayName)
| summarize Total=count() by policyDefinitionDisplayName_,activityStatusValue
このクエリーでは、Azure Policyで用いているポリシー名も抽出してグループ化することで、どのポリシーがどのようなステータスになっているかを表示しています。ここで ActivityStatusValue
が Failure になっているものが無いか確認してみましょう。
3.3 ActivityStatusValue が Failure になっているルールを抽出する
フィルタ条件を使って、Failure になった Azure Policy を抽出してみます。
ここでは errorMessage フィールドを用いて Failure になった際の情報を抽出し、対象のリソースなどを JSON 部分から抜いています。
AzureActivity | where CategoryValue == "Policy"
| extend d=parse_json(Properties) // parse_json で読み込み
| extend e=parse_json(Properties_d) // parse_json で読み込み
| extend activityStatusValue = tostring(d["activityStatusValue"]), resource = tostring(d["resource"]), resourceProviderValue = tostring(d["resourceProviderValue"])
| extend policyDefinitionDisplayName_ = tostring(parse_json(tostring(Properties_d.policies))[0].policyDefinitionDisplayName)
| extend errorMessage = tostring(e["errorMessage"])
| where activityStatusValue == "Failure"
| project TimeGenerated,policyDefinitionDisplayName_,activityStatusValue,errorMessage,resource,resourceProviderValue
ここで errorMessage を解読すると、auditifNotExits
エフェクトによって、Audit を実施しようとしたものの、GET のパーミッションが無いためエラーになったようです。この対象のリソースなどを追って、原因を確認することができるようになりました。
いかがでしょうか? errorMessage
が分かると、Policy が適用できなかった原因が確認し易くなると思います。
ここまでくれば、実際に Azure Policy が失敗した際の理由、対象リソースなどを LogicApp などを用いて通知を行い、運用チェックなどに用いることが出来そうですね。
4. まとめ
Azure Security Center や、Azure Policy などでセキュリティ運用を始めた際に、エラーチェックなどを気にされている方は Azure Activity Log を用いてエラーチェックする手法でした。どなたかの参考になれば幸いです。
*本稿は、個人の見解に基づいた内容であり、所属する会社の公式見解ではありません。また、いかなる保証を与えるものでもありません。正式な情報は、各製品の販売元にご確認ください。
Author And Source
この問題について(Azure Security Center / Azure Policy のエラーをチェックする), 我々は、より多くの情報をここで見つけました https://qiita.com/hisnakad/items/69d1223a60737743609d著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .