Microsoft Defender for Cloud、Microsoft Sentinelの役割に応じた権限設定をやってみた

## はじめに

Microsoft Defender for CloudはCSPM/CWPP、Microsoft SentinelはSIEM/SOAR/UEBAの機能を提供しますので、様々なログやデータを収集してセキュリティ態勢の向上やセキュリティ監視に利用していくことになります。
私がこれらのソリューションのご紹介の際に「利用者のロールに応じてデータの参照範囲制限したいんだけど可能？」とご質問いただくことがありますので、備忘録がてら手順をまとめておきます。

## Microsoft Defender for Cloud : ロールベースのアクセス制御（RBAC）
ここでは、Windows管理チームにはWindowsリソースのMicrosoft Defender for Cloud推奨事項、アラートは確認できるようにしますが、それ以外のリソースの情報は参照させないケースを想定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3077168/20ee9df9-940a-97e1-ce9c-763fda6d3ec7.png)


[こちら](https://learn.microsoft.com/ja-jp/azure/defender-for-cloud/permissions#roles-and-allowed-actions)の記載の通り、Microsoft Defender for Cloud固有のロールとして用意されている[セキュリティ閲覧者](https://learn.microsoft.com/ja-jp/azure/role-based-access-control/built-in-roles#security-reader)を利用します。
*あらかじめ、Windows管理者用に”WinSV-Admin1”というセキュリティグループを用意しておきます。

1. 対象のリソースグループ（ここではWinSV-GP1）のアクセス制御（IAM）から、「ロールの割り当ての追加」を選択し”セキュリティ閲覧者”ロールに”WinSV-Admin1”のセキュリティグループを割り当てる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3077168/7c7f1dd4-fddc-304d-28bf-21c71435983d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3077168/b325f89f-e779-2b59-5843-30f0e51636bf.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3077168/7876bbfc-c6bf-c4bb-1825-78f873034791.png)

1. 実際に"WinSV-Admin1"グループに所属しているメンバーでMicrosoft Defender for Cloudの画面を確認してみます。
推奨事項ビューでリソースグループのフィルターを確認してみると、”winsv-gp1”しか選択できないようになっていました。
（インベントリビュー、セキュリティアラートビューも同様です）
これは、WinSV-admin1のメンバーはMicrosoft Defender for CloudポータルでWindowsリソースの情報のみ閲覧できることを意味します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3077168/3cf881c3-bf03-1d40-13c6-5a109c68ac64.png)

【補足１】サブスクリプションレベルでContributerレベルのアクセス権が付与されているユーザーでは、以下のように”winsv-gp1”を含む全リソースグループの情報が確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3077168/6dea4229-1975-6db7-575b-7b1e6b676806.png)

【補足２】今回追加したセキュリティ閲覧者ロールでは、[こちら](https://learn.microsoft.com/ja-jp/azure/defender-for-cloud/permissions#roles-and-allowed-actions)に記載の通りアラートと推奨事項の閲覧が可能です。よって、ロールを付与したリソースグループ内のリソースに関するデータであっても概要ダッシュボードや規制コンプライアンスビューなどは確認できません。付与したリソースで目的の情報が参照できるか、予めテストいただくことをおすすめします。

【補足３】AWS、GCPの環境もDefender for Cloudで監視している場合、それぞれの環境に限定して担当者に参照させたい場合にも同様の手法が利用できます。この場合、AWSやGCPの環境を接続する際に作成するコネクターのリソースグループを分けておくといった構成が必要になります。

## Microsoft Sentinel (Azure Monitor) : ロールベースのアクセス制御（RBAC）
Microsoft Sentinelの場合は、Microsoft Defender for CloudのようにRBACの設定をしたからといってSentinel内の特定のデータのみ参照できるようになるわけではないので、注意が必要です。
Microsoft Sentinel環境全体にアクセスできる必要はなく、Microsoft Sentinelワークスペース内の特定のデータのみにアクセスできる必要がある場合は、下記の公開情報の通りリソースコンテキストRBACが利用可能です。
[リソースによる Microsoft Sentinel データへのアクセスを管理する](https://learn.microsoft.com/ja-jp/azure/sentinel/resource-context-rbac#scenarios-for-resource-context-rbac)
こちらの公開情報にも記載がある通り、リソースコンテキストRBACを利用した場合に利用できるエクスペリエンスは「ログ クエリとブックのみ」となりますので、Microsoft SentinelビューからではなくAzure Monitorビューか対象リソースのログビューからクエリーを実行して確認することになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3077168/0b4163c3-169a-206c-7ce4-13a9e6051841.png)

それではやってみます。今回は、[こちら](https://learn.microsoft.com/ja-jp/azure/azure-monitor/logs/manage-access?tabs=portal#resource-permissions)参考に、Windowsリソース用のリソースグループに関するログのみ参照できるカスタムロールを作成し、Windows管理者グループにロールを割り当てる手順でやってみます。

1. カスタムロールの作成
    1. 対象のリソースグループ（ここでは”WinSV-GP1”）のアクセス制御（IAM）ビューから、「カスタムロールの追加」を選択
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3077168/648f971f-89e5-c745-1ae3-0fa7368543db.png)

    1. 「基本」タブでカスタムロール名を入力（説明は任意）、ベースラインのアクセス許可で「最初から始める」を選択
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3077168/744eaf7b-7f07-e26e-ecc2-86165551b14a.png)

    1. 「アクセス許可」タブで「アクセス許可の追加」をクリックし、検索窓で”Microsoft.Insights/logs/”を検索してMicrosoft Azure Monitorを選択
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3077168/bfc9cb78-95b2-001d-0c48-195e06c57dd3.png)

    1. 「読み取り」にチェックを入れて追加
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3077168/17df1366-d397-45fc-123a-44acdc383bff.png)

    1. 「割り当て可能なスコープ」で対象のスコープを確認し次へ
    1. 「JSON」タブで「編集」をクリックし、"actions"のフィールドを”Microsoft.Insights/logs/*/read”に修正して保存
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3077168/82b6ba03-9f49-1a25-1408-f717fab6d378.png)

    1. 定義内容を確認し、カスタムロールを作成
   
2. 作成したカスタムロールに"WinSV-Admin1"セキュリティグループを割り当てします。

2. 実際に"WinSV-Admin1"グループに所属しているメンバーで、リソースグループ”WinSV-GP1”のログを確認してみます。
    1. "WinSV-Admin1"グループに所属するメンバーでAzureポータルにログインし、リソースグループビューから”WinSV-GP1”リソースグループを選択します
    2. ”ログ”ビューから、任意のテーブルをクエリーしてみます。ここではAzureActivityテーブルをクエリーしてみました。WinSV-GP1のリソースに関するログが確認できました。（画面ショットは割愛しますが、Azureモニター - ログからでも同様に確認可能です）
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3077168/52c9dc52-ddd7-4916-017b-dbc786af453f.png)

  
【補足】上記のようにロールを割り当てたリソースグループからのログクエリは可能ですが、今回対象のアカウントにはLog AnalyticsワークスペースやSentinelに関するロールは割り当てていないため、それらに関する参照はできません。
完全なSentinelエクスペリエンスが必要で、かつ特定のデータソースのみ扱えるようにする場合はワークスペースの分離もご検討ください。（手弁当で恐縮ですが別Qiita記事の[こちら](https://qiita.com/RitsuKAN/items/eb74f2d4ab08f0ae6584#%E3%83%87%E3%83%BC%E3%82%BF%E3%81%B8%E3%81%AE%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E5%88%B6%E5%BE%A1)でもMicrosoft Sentinelのワークスペースディシジョンツリーにおけるアクセス制御の考慮点について触れています）


## Microsoft Sentinel (Azure Monitor) : テーブルベースのアクセス制御
Microsoft Sentinel、Azure Monitorでは特定のテーブルに限ってアクセス制御できるテーブルベースのRBACがサポートされています。
特定のリソース種別に限るというよりかは、リソース全般にわたってあるイベントログのみ参照する必要がある場合に利用できます。（例：監査目的でAzureアクティビティログやOffice 365ログのみ参照が必要だが、SOC用途のセキュリティイベントは不要の場合など）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3077168/43b53652-3f9c-f064-38d6-a7d420ae41a2.png)


[こちらのブログ](https://techcommunity.microsoft.com/t5/microsoft-sentinel-blog/table-level-rbac-in-microsoft-sentinel/ba-p/965043)にも詳細に紹介されていますが、Azureポータルベースの手順で実施してみます。
ここでは監査メンバーがAzureアクティビティログのみにアクセスが必要なケースを例に定義します。

1. カスタムロールの作成
    1.  [Microsoft Sentinel (Azure Monitor) : ロールベースのアクセス制御（RBAC）](https://qiita.com/RitsuKAN/items/94f7e98c3bf0a0597a4a#microsoft-sentinel-azure-monitor--%E3%83%AD%E3%83%BC%E3%83%AB%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AE%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E5%88%B6%E5%BE%A1rbac)の手順でも実施したように、対象のリソースググループのアクセス制御（IAM）からカスタムロールを作成します。今度はSentinelワークスペースが存在するリソースグループに対してカスタムロールを作成します。
    1. 追加するアクセス許可に以下3つのActionを追加します。
カスタムロールに定義するactionの例については[こちら](https://learn.microsoft.com/en-us/azure/azure-monitor/logs/manage-access?tabs=portal#examples)にも記載がありますのでご参考までに。
```
"Microsoft.OperationalInsights/workspaces/read"
"Microsoft.OperationalInsights/workspaces/query/read"
"Microsoft.OperationalInsights/workspaces/query/AzureActivity/read"
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3077168/8349a51c-882f-b4c6-e382-5f13842799c5.png)
2. 作成したカスタムロールに監査メンバーが所属するセキュリティセキュリティグループを割り当てします。（ここでは”AzureAuditor-1”というセキュリティグループを作ってみました。
3.   実際に"AzureAuditor-1"グループに所属しているメンバーで、リソースに限らずAzureアクティビティログが参照できるか確認してみます。 
1.  "AzureAuditor-1"グループに所属しているメンバーでAzureポータルにログインし、確認対象のLog Analytics Workspaceを開く
1.  「ログ」ビューで、AzureActivityテーブルをクエリーする。複数のリソースグループに渡ってクエリーが返ってきていることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3077168/1cd176e7-bbee-fc88-f9ff-d4d78a3a6225.png)

【補足】なお、他のテーブル（例えばAzureDiagnostics）をクエリーしても結果は表示されません。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3077168/f0634854-3c55-ed7b-7668-c68bfa341258.png)


## おわりに
本記事ではMicrosoft Defender for Cloud、Microsoft Sentinelに対する様々なアクセス制御を設定手順を紹介しました。
最小権限の原則に基づき、必要な人・必要なリソース（データ）に限って権限をセットすることはセキュリティ事故防止、影響軽減の意味でも重要なポイントかと思います。
上記のように様々なアクセス制御手法が用意されておりますので、ご利用環境のアクセス制御実施の際に本記事が少しでも参考になりましたら幸いです。