Microsoft Defender for Cloud で AWS 環境のセキュリティをモニタリングする

## はじめに
Microsoft Defender for Cloud は Ignite 2021 で発表された 旧 Azure Security Center と Azure Defender が統合されたサービスです。Microsoft Defender for Cloud はマルチクラウドの CSPM (Cloud Security Posture Management) に対応しており、2022/2/28 現在で AWS と GCP をサポートしています。(ともに Preview 中)

AWS 環境のセキュリティチェックと言えば AWS Security Hub ですが、 Microsoft Defender for Cloud は Security Hub に依存せずに独自のチェックを行っています。基本的にはドキュメント通りに簡単に設定できるのですが、どのような仕組みでチェックが行われているのかも見ていきたいと思います。


## やってみる
::: note warn
Microsoft Defender for Cloud に接続した AWS アカウントは CloudTrail の API 呼び出しが増加します。GuardDuty や Detective を有効化している環境ではこれらの分析料金が増加します。
:::

環境設定から AWS アカウントを追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/7bcbc008-c772-c08c-2a0f-6e55b3cbd02f.png)

リソースグループやリージョン、AWS アカウント ID などを入力します。AWS Organizations の管理アカウントを指定することで組織内の全アカウントをオンボーディングできるようですが、ここでは単一のアカウントを接続します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/a52d77a5-4e7d-78f6-e58c-030af37fd96e.png)

プランの選択ではアカウント内の EC2 や EKS を Microsoft Defender for Cloud に接続することもできますが、ここではセキュリティ体制の管理のみを有効化しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/241a893e-21d9-f8b5-27b4-e12c98ad047d.png)

アクセスの構成で CloudFormation テンプレートをダウンロードできるため、対象のアカウントにデプロイします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/b0877ffc-ad33-6dd9-4059-815717f3d5ac.png)

このテンプレートでは以下のリソースがデプロイされます。

* Azure から接続をおこなうための `IAM OIDC ID Provider`
* IAM OIDC ID Provider プロバイダを介して Assume Role を行うための `IAM Role`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/6bd0605e-9a4a-3614-7473-7c5669e99146.png)

先ほどのプランの選択ではアクセス許可は SecurityAudit と記載がありましたが、実際の IAM ロールには `ReadOnlyAccess` がアタッチされていました。

ちなみにオンボードで管理アカウントを指定した場合は、StackSets を使用して上記のテンプレートをデプロイするような指示があります。

レビューと生成で設定内容を確認して作成を完了すると、対象の AWS アカウントが追加されます。さらに設定の編集からチェック対象の標準を有効化および無効化することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/a739fedd-24a4-6b5d-c4e1-1916ced41db3.png)

AWS Security Hub と同様に以下の標準に対応しています。

* CIS AWS Foundations Benchmark v1.2.0
* AWS 基礎セキュリティのベストプラクティス
* PCI DSS 3.2.1 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/c6656fb5-d29e-41fe-7041-e543c7aa21cc.png)

アカウント追加直後は AWS 基礎セキュリティのベストプラクティスのみが有効になっていたため、追加から標準を選択し、CIS AWS Foundations Benchmark v1.2.0 を追加しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/77dbac21-8b18-99fc-d931-ce4b77bfbb1a.png)

設定が完了すると推奨事項ページに順次 AWS リソースが表示されます。環境フィルターで AWS リソースに関する推奨事項のみを表示することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/7bb4592a-fad1-e0a3-ac58-c2c2cc89162b.png)

アカウント単位やリソース単位でフィルターしたい場合はインベントリページから確認します。以下は AWS コネクター用に作成したリソースグループでフィルタリングした例です。リソースごとに推奨事項への準拠状況を確認できます。アカウント単位で確認したい場合は、アカウント ID のリソース名 (リソースの種類: `microsoft.security/securityconnectors/stsaccount`) をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/75bee1cb-e3df-2479-c5ce-7e05694b42c3.png)

以下のように対象アカウント内のリソースの正常性を確認することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/16485655-d0be-c9d1-cf90-6dbaec35a27d.png)

## AWS Security Hub によるチェックと比較した際の違い
いくつか気づいた点を記載します。

### 推奨事項の除外ができない
2022/2/28 時点では各推奨事項に除外ボタンが表示されていないため、未サポートであるようです。AWS Security Hub はリージョナルサービスであるため、リージョンごとに独立してチェックが行われており、特定のリージョンだけチェックを除外したいというような運用が可能です。

例えば以下は CIS AWS Foundations Benchmark v1.2.0 の準拠状況ですが、3. Monitoring に関連するチェックがすべて NG になっています。CloudTrail や Monitoring の設定は全リージョンには設定しないので、特定のリージョンのみ監視するよう設定したいのですが、現状そういった設定はできません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/1c716c75-336d-a826-1a23-ea5c7deefb0b.png)

### カスタム標準を作成することができる
Microsoft Defender for Cloud ではカスタム標準を作成して、任意のルールのみを対象にチェックを行うことができます。これにより組織内で必要なチェックに絞って準拠状況のモニタリングを行うことができます。このような機能は AWS Security Hub にはありません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/671b9f14-ca0a-496b-4277-3e6d9541fef5.png)


### API 経由でチェックが行われている
冒頭にも記載したとおり、Microsoft Defender for Cloud は AWS Security Hub や AWS Config Rule に依存しない作りになっており、チェックはすべて API 経由で行われます。どのような API アクセスが行われているかは CloudTrail の証跡から確認ができます。Assume Role 時のロールセッション名が `MicrosoftDefenderForClouds_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx` のような固定値になっているため、コンソールからであればユーザー名を指定して検索することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/2ab3a8d4-f442-20f9-e340-7352e3196785.png)

今回の検証では AWS 基礎セキュリティのベストプラクティスは無効化していたのですが、上記の履歴を見る限り API による情報収集は裏側では継続して行われているようです。
 
## ドキュメント
 
https://docs.microsoft.com/ja-jp/azure/defender-for-cloud/quickstart-onboard-aws

https://docs.microsoft.com/ja-jp/azure/defender-for-cloud/quickstart-onboard-gcp

以上です。
参考になれば幸いです。