Azure Security Center (ASC)を用いて、AWS環境を統合監視する

# 1. はじめに
皆さん、Azure Security Center (以下 ASC )を活用されていらっしゃいますか？
ASC の機能の一つに、マルチクラウド環境に対応しており、AWS / GCP を統合して監視することができるようになっています。本記事では、AWS を実際に接続して試してみます。

**2022/1現在、ASC は Microsoft Defender for Cloud となり、マルチクラウドに対しては API を用いた直接構成監査を行えるようになりました。本記事の設定は古い方法であり新方式が推奨されていますのでご注意下さい。**

# 2. 何ができるのか
Azure [公式ドキュメント](https://docs.microsoft.com/ja-jp/azure/security-center/quickstart-onboard-aws)からは以下の記載があります。

- **エージェントの自動プロビジョニング**
    - Security Center は Azure Arc を使用して、Log Analytics エージェントを AWS のEC2 インスタンスにデプロイします
    - ポリシー管理
    - 脆弱性の管理
    - 埋め込まれたエンドポイント検出と応答 (EDR)
    - セキュリティ構成ミスの検出
- Security Center の推奨事項と AWS Security Command Hub の検出結果を 1 つのビューに表示
- Security Center のセキュリティ スコアの計算への AWS リソースの組み込み
- AWS リソースの規制コンプライアンスの評価

見たところ、エージェントの自動プロビジョニングは Azure Defender を自動導入することによるサーバー保護になるかと思います。後者は AWS Security Hub のコンプライアンス機能（AWS Config Ruleによる検知）を ASC 側で統合監視することが目的になります。

# 3. 構成イメージ
構成イメージを書いてみました。
![20210812_Azure_ASC_Design.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/b248c2d1-a0a1-b0df-b689-da034e7383b7.png)

- ASC は提供されているクロスアカウント経由で IAM ロールを用いて AWS 側に接続します。
    - IAMユーザー( API アクセスキー/パスワード)を用いる方法も可能ですが、セキュリティ上非推奨なため、IAMロール経由がお勧め
- AWS 側のセキュリティ監視については、AWS Security Hub を有効にすることで実現されます。
    - AWS Security Hub の裏側では、各種ベースラインに応じたルールが AWS Config を利用してデプロイされます。
    - AWS Security Hub はマルチアカウント構成にも対応しているので、集約された Security Hub に対して接続すれば、ASC 側からの監視も出来ると思われます。
- AWS側 EC2 内の OS 側の保護については、Azure Arc を通じて、Azure Defender 保護を用います。
    - AWS SSM を通じて、Azure Arc 側からデプロイがかかります

# 4. やってみる ～各種設定～
詳細は[公式ドキュメント](https://docs.microsoft.com/ja-jp/azure/security-center/quickstart-onboard-aws)の手順通りです。ここでは概要だけご紹介します。

## 4.1 AWS 側準備
- **手順 1. AWS Security Hub を設定する**
    - AWS Security Hub を有効にします。セキュリティ基準が表示される状態にします。
        - AWS側でマルチアカウント構成を取っている場合は、マスターアカウント側対してASC側から接続を行う構成を取ります。
        - 複数のリージョンを用いている場合は、全てのリージョンでSecurity Hubの有効化が必要です。
    - ![20210812_AWS_SecurityHub.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/b97b0351-8061-b8d7-5c5d-cafcd54baaae.png)
    - (補足) Security Hubが有効化されると、元となる構成チェックは AWS Config 側で実行されています。
        - "securityhub～"といったルールが自動デプロイされます。
    - ![20210812_AWS_Config.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/548960f0-5364-f65a-1278-7ba0d91bcbfc.png)
- **手順 2. AWS で Security Center から接続されるIAMロールを作成する**
    - ドキュメントに従ってIAMロールを作成します。
        - クロスアカウント経由になるため、Azure ASC 側のアカウントID、外部IDに ASC 側で生成されるID情報を記入します。
        - ![20210812_AWS_IAMrole.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/668817bc-eee7-bf02-347d-52c043916eea.png)
    - IAMロールに権限を設定します。
        - "AWSSecurityHubReadOnlyAccess","SecurityAudit","AmazonSSMAutomationRole"の三つが必要です。
        - ![20210812_AWS_IAMrole3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/d5735493-62e3-1040-1f4c-9c1aa839b3b8.png)
- **手順 3. 管理する EC2 に対して、SSMを導入する**
    - こちらは AWS EC2管理の基本なので省略。
    - インベントリでマネージドインスタンス画面に表示されていればOK。
    - ![20210812_AWS_SSM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/d35f40d3-0d38-8f6a-daed-787207e2d670.png)

## 4.2 Azure 側準備
- **手順 4. Azure Arc の前提条件を満たす**
    - こちらは公式ドキュメント通りの手順で進めます。
        - [大規模なオンボーディング用にサービス プリンシパルを作成する](https://docs.microsoft.com/ja-jp/azure/azure-arc/servers/onboard-service-principal#create-a-service-principal-for-onboarding-at-scale)
    - PowerShell経由で作成します。

```powershell
$sp = New-AzADServicePrincipal -DisplayName "Arc-for-servers" -Role "Azure Connected Machine Onboarding"
$sp
```

出力される ApplicationIdを記録します。

```powershell
Secret                : System.Security.SecureString
ServicePrincipalNames : {ad9bcd79-be9c-45ab-abd8-80ca1654a7d1, https://Arc-for-servers}
ApplicationId         : ad9bcd79-be9c-45ab-abd8-80ca1654a7d1
ObjectType            : ServicePrincipal
DisplayName           : Hybrid-RP
Id                    : 5be92c87-01c4-42f5-bade-c1c10af87758
Type       
```

同様にパスワードを生成し、記録します。

```powershell
$credential = New-Object pscredential -ArgumentList "temp", $sp.Secret
$credential.GetNetworkCredential().password
```

- **手順 5. Azure Security Centerで設定する**
    - ASC側より設定を行います。
        - セキュリティセンターの接続画面から、ロールの設定でAWS側IAMロールのARNを登録します。
        - サブスクリプションが表示されない場合は、RBACのOwner権限が無いなど、必要となる権限で設定して下さい。
        - ![20210812_Azure_ASC_config1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/f169cd3a-8e72-5565-e7af-a925b9450a14.png)
    - Azure Arcの認証情報を登録します。
        - 前段で設定したアプリケーションID、クライアントシークレットを登録します。
        - ![20210812_Azure_ASC_config2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/75fe2427-c6c1-21ff-d403-b6a37da120bd.png)
    - 作成した情報を確認し、「作成」を押します。
        - ![20210812_Azure_ASC_config3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/5f02deb7-e0af-8091-4682-67a3ade5c87f.png)

# 5. 何が出来るようになるのか？
ASC から AWS アカウントの接続が成功すると、ASC のインベントリ画面、推奨事項画面から AWS Security Hub で吸い上げた情報を確認することができます。

- インベントリ画面の例
    - 環境 = "AWS"でフィルタすると、AWS側から取得したインベントリが表示されます。
    - ![20210812_Azure_ASC_AWS_Inventry.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/d773ea18-9899-8c66-b7da-580a8d09f0a0.png)
- 推奨事項の例
    - 推奨事項でも、AWS Security Hubのベストプラクティスのチェック項目が表示されるようになりました。
    - ![20210812_Azure_Recommended.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/a467f16c-e8bd-10b1-387f-3fa58252e1db.png)

Amazon EC2 の構成チェックも SSM 経由で LogAnalyticsエージェントの導入などで監視ができるようになるのですが、[公式ドキュメントのFAQ](https://docs.microsoft.com/ja-jp/azure/security-center/quickstart-onboard-aws#faq---aws-in-security-center)に記載されている通り、Amazon Linuxは現在未サポートなんですね。。AWSと言ったら、Amazon Linux運用が多いと思いますので、この辺りは対応待ちといったところですね。

>
自身の EC2 インスタンスのではどのオペレーティングシステムがサポートされていますか?
- Ubuntu 16.04 - SSM エージェントは既定でプレインストールされています
- Ubuntu 18.04 - SSM エージェントは既定でプレインストールされています
- Windows Server - SSM エージェントは既定でプレインストールされています
- CentOS Linux 7 - SSM は手動でインストールするか、個別にオンボードする必要があります
- SUSE Linux Enterprise Server (SLES) 15 (x64) - SSM は手動でインストールするか、個別にオンボードする必要があります
- Red Hat Enterprise Linux (RHEL) 7 (x64) - SSM は手動でインストールするか、個別にオンボードする必要があります

# 6. まとめ
ASC でマルチクラウドに対応しているとのことで、今回 AWS との接続を試してみましたが、マルチクラウドのベースライン準拠を統一して監視したユーザーや、Defender Endpoint による運用を統一したい方向けなのかなと思います。AWS 側でも Security Hub の可視化画面などで運用しているお客様も多いと思いますが、クラウド毎に個別に監視するのが良いのか、今回のように統合監視するのが良いのかは要検討といったところになるのかなと思いました。どなたかの参考になれば幸いです。

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