AWSアカウントをあらゆるAWSのセキュリティサービスで守り切る

# はじめに
この記事はDevOps on AWS大全 実践編の一部です。
DevOps on AWS大全 実践編の一覧は[こちら](https://qiita.com/tech4anyone/items/c27e74f9ae569ced259f)。

この記事ではAWSアカウントを本気で守るアーキテクチャを決める流れを解説しています。

具体的には以下流れで説明します。

- 解決したい課題の整理
- 今回使うAWSサービスの整理
- アーキテクチャの策定
- 策定したアーキテクチャで達成できたこと

AWSの区分でいう「Level 400 : 複数のサービス、アーキテクチャによる実装でテクノロジーがどのように機能するかを解説するレベル」の内容です。

# この記事を読んでほしい人
- DevOpsエンジニアがアーキテクチャを決めるときにどのような思考フローを踏んでいるか知りたい人
- AWSアカウントを本気で守るアーキテクチャを知りたい人
- AWS Certified DevOps Engineer Professionalを目指している人

# 前回までの流れ
[こちら](https://qiita.com/tech4anyone/items/4c80888aa46a9cd36995)の記事でAWSの障害やメンテナンスを通知して自動で対応するアーキテクチャを策定しました。


# 解決したい課題の整理
現在、解決したいと思っている課題は以下になります。
- AWS上に構築するシステムを保護したい
- セキュリティ管理を可能な限り一元化したい
- セキュリティ関連の簡単に調査できるようにしたい

ということで、これをどうやって解決するか考えていきましょう。

# 今回使うAWSサービスの整理
今回使う代表的なAWSサービスの概要とベストプラクティスは以下の通りです。

## インフラストラクチャ保護
### AWS Firewall Manager
AWS Firewall Managerは、AWS WAF、AWS Shield、AWS Network FirewallなどのAWSのファイアウォールサービスを一元管理するサービスです。
AWS Firewall Managerを使うと、複数のアカウントやリージョンにわたってファイアウォールルールを一貫して適用したり、コンプライアンスやセキュリティポリシーを簡単に管理したりできます。

### AWS WAF
AWS WAFは、Webアプリケーションファイアウォールと呼ばれるサービスで、Webアプリケーションに対するSQLインジェクションやクロスサイトスクリプティングなどの一般的な攻撃を防ぐことができます。
AWS WAFでは、Web ACLと呼ばれるルールセットを作成して、許可するか拒否するかを判断する条件を定義できます。
Web ACLは、CloudFrontやApplication Load BalancerなどのAWSのサービスに関連付けることができます。

### AWS Shield
AWS Shieldは、分散型サービス拒否（DDoS）攻撃と呼ばれるサービスで、ネットワークやアプリケーションに対する大量の不正なトラフィックを吸収して軽減することができます。

AWS Shieldは、StandardとAdvancedの2つのレベルがあります。
Standardは、すべてのAWSの顧客に無料で提供される基本的な保護レベルで、CloudFrontやRoute 53などのAWSのサービスに対する一般的なDDoS攻撃を自動的に検出して軽減します。
Advancedは、追加料金で提供される高度な保護レベルで、EC2やVPCなどのAWSのサービスに対するより大規模で複雑なDDoS攻撃を検出して軽減します。
また、専門家のサポートや費用補償などの追加機能も利用できます。

### AWS Network Firewall
AWS Network Firewallは、VPC内のネットワークトラフィックに対するファイアウォールと呼ばれるサービスで、ネットワークレベルやアプリケーションレベルでトラフィックを検査してフィルタリングすることができます。
AWS Network Firewallでは、Stateless RulesとStateful Rulesと呼ばれる2種類のルールを作成して、トラフィックに対するアクションを定義できます。
Stateless Rulesは、パケット単位でトラフィックを評価して許可や拒否などのアクションを実行します。
一方、Stateful Rulesは、セッション単位でトラフィックを評価して許可や拒否などのアクションを実行します。
また、Suricataと呼ばれるオープンソースのファイアウォールエンジンを利用して、カスタムルールや既存のルールセットを適用することもできます。

## データ保護
### AWS KMS
AWS KMSは、AWS サービスやアプリケーションで使用する暗号化キーを管理するサービスです。
AWS KMS では、カスタマー管理キー (CMK) と呼ばれるマスターキーを作成し、使用できます。
CMK は、AWS KMS が保護するハードウェアセキュリティモジュール (HSM) に保存されます。
CMK を使用して、データキーと呼ばれる下位の暗号化キーを生成したり、データの暗号化や復号化を行ったりできます。
なお、AWS KMS は、AWS サービスやアプリケーションと統合されており、簡単に暗号化を実装できます。

### AWS CloudHSM
AWS CloudHSM は、専用の HSM を使用して暗号化キーを管理するサービスです。
AWS CloudHSM では、FIPS 140-2 レベル 3 の認証を受けた HSM をクラスターとして展開できます。
HSM は、カスタマー専用のハードウェアであり、カスタマーが完全に管理し、保存されたキーは、カスタマー以外の誰もアクセスできません。
AWS CloudHSM は、高いセキュリティ要件を満たす必要があるカスタマーに適しています。

### AWS Secrets Manager
AWS Secrets Manager は、データベースやサードパーティサービスなどのリソースにアクセスするためのシークレット（パスワードやトークンなど）を管理するサービスで、シークレットを安全に保存し、自動的にローテーションすることができます。

### Amazon Macie
Amazon Macie は、機械学習を利用して S3 バケット内のデータを分類し、機密性の高いデータや個人情報 (PII) を検出するサービスです。
Amazon Macie では、データの種類や内容を自動的に識別し、リスクレベルを割り当てるため、データの保護やコンプライアンスの要件に対応するために役立ちます。

## 検知
### Amazon Inspector
Amazon Inspectorとは、AWS環境のセキュリティとコンプライアンスを自動的に評価するサービスで、ベストプラクティスや業界標準に基づいて、セキュリティの脆弱性や偏りを検出し、改善策を提供します。
また、EC2インスタンスやその他のAWSリソースに対してアセスメントを実行し、詳細なレポートを生成します。

### Amazon GuardDuty
Amazon GuardDutyとは、AWSアカウントとAWSリソースに対する脅威を検出するサービスで、AWS CloudTrail、Amazon VPC Flow Logs、DNSログなどのデータソースを分析し、不正なアクティビティや異常な挙動を検知します。
また、リアルタイムでアラートを発生させ、セキュリティチームが迅速に対応できるようにします。

### AWS Config
AWS Configとは、AWSリソースの設定変更を追跡し、設定履歴や設定の現在値を記録するサービスで、AWSリソースの関係性や依存性も可視化し、リソースのインベントリーを作成します。
また、設定ルールを使用して、AWSリソースが所望の状態に準拠しているかどうかを評価し、準拠していない場合に通知します。

### AWS IAM Access Analyzer
AWS IAM Access Analyzerとは、IAMポリシーによって許可されているアクセス権限を分析し、不要なアクセス権限や意図しないアクセス権限を特定するサービスで、IAMロールやS3バケットなどのリソースに対してアナライザーを有効化すると、そのリソースにアクセスできるエンティティを表示します。
AWS IAM Access Analyzerは、外部のエンティティに公開されているリソースや信頼されていないエンティティに委任されているリソースなどの潜在的なリスクを警告します。

### AWS Security Hub
AWS Security Hubとは、AWS環境のセキュリティ状況を一元的に管理するサービスで、他のAWSサービスやパートナー製品からのセキュリティ情報を収集し、優先度や重要度に基づいて整理します。
また、CIS AWS Foundations BenchmarkやPCI DSSなどの業界標準に対して、AWSアカウントの準拠状況を評価し、レポートします。

## 対応
### Amazon Detective
Amazon Detective は、AWS リソースのセキュリティ関連の問題を調査するためのサービスで、VPC フローログ、AWS CloudTrail、Amazon GuardDuty などのデータソースから情報を収集し、機械学習や統計分析を用いて、異常なアクティビティや潜在的な脅威を特定します。
これにより、インタラクティブなグラフィカルインターフェースを提供し、セキュリティ担当者が問題の原因や影響範囲を迅速に把握できるようにします。

## コンプライアンス
### AWS Artifact
AWS Artifact は、AWS のコンプライアンスレポートや証明書をダウンロードできるサービスで、ISO、SOC、PCI DSS などの国際的な規制や業界標準に準拠していることを証明する資料を提供します。
AWS Artifact は、セキュアなポータルからレポートや証明書にアクセスできるほか、レポートの共有や追跡も簡単に行えます。

## AWS Audit Manager
AWS Audit Manager は、AWS の監査準備を支援するサービスで、監査対象の AWS リソースやアカウントの設定を自動的に評価し、監査証拠として収集します。
AWS Audit Manager は、CIS AWS Foundations Benchmark や PCI DSS などの事前定義されたフレームワークに基づいて評価を行うことができ、カスタムフレームワークの作成や、監査証拠を整理し、監査レポートを作成することもできます。

## ベストプラクティス
以下の表は、これらのサービスの機能やベストプラクティスをまとめたものです。

| サービス | ベストプラクティス |
| ---|--- |
| AWS Firewall Manager | AWS Organizationsを使ってアカウントやリソースをグループ化する |
| AWS WAF | AWS Managed RulesやAWS Marketplaceのルールセットを利用する |
| AWS Shield | Advancedレベルを利用して、専門家のサポートや費用補償を受ける |
| AWS Network Firewall | SuricataのルールやAWS Marketplaceのルールセットを利用する |
| AWS KMS | - CMK の作成時に適切なキーポリシーと IAM ポリシーを設定することで、キーへのアクセス権限を制御する。<br>- CMK の有効期限や削除保護などの設定を確認する。<br>- AWS KMS の監査ログを有効にし、CloudTrail や CloudWatch を利用してキーの使用状況や異常なアクティビティを監視する。 |
| AWS CloudHSM | - HSM クラスター内に少なくとも 2 台の HSM を配置し、可用性と耐障害性を高める。<br>- HSM のバックアップと復元を定期的に行う。<br>- HSM のパッチや更新を適用する。 |
| AWS Secrets Manager | - シークレットのローテーションを有効にし、定期的にシークレットの値を変更する。<br>- シークレットのライフサイクルを管理し、不要なシークレットを削除する。<br>- シークレットへのアクセス権限を最小限にする。 |
| Amazon Macie | - S3 バケットを Amazon Macie に登録し、データの分類と検出を開始する。<br>- Amazon Macie のダッシュボードやレポートを確認し、データのリスクレベルやセキュリティの状況を把握する。<br>- Amazon Macie のアラートや通知を設定し、機密データの漏洩や不正アクセスなどの問題に対応する。 |
| Amazon Inspector | - アセスメント対象となるEC2インスタンスにエージェントをインストールする<br>- アセスメントテンプレートを作成し、適用するルールパッケージやタグを指定する<br>- アセスメントランを実行し、レポートから脆弱性や偏りを確認する<br>- レポートから改善策を適用する |
| Amazon GuardDuty | - Amazon GuardDutyを有効化する<br>- 既存のAWSアカウントやAWSオーガニゼーションにAmazon GuardDutyを関連付ける<br>- Amazon GuardDutyの検出結果を確認し、必要に応じてフィルターを適用する<br>- Amazon GuardDutyの検出結果に対して対応策を実行する |
| AWS Config | - AWS Configを有効化する<br>- 記録対象となるAWSリソースの種類を選択する<br>- 設定ルールを作成し、所望の状態を定義する<br>- 設定アイテムや設定履歴を確認する<br>- 設定ルールの評価結果や準拠状況を確認する |
| AWS IAM Access Analyzer | - アナライザーを作成し、分析対象となるリージョンやリソースタイプを指定する<br>- アナライザーの分析結果からアクセス権限やエンティティを確認する<br>- アクセス権限が必要な場合は、IAMポリシーを修正する<br>- アクセス権限が不要な場合は、IAMポリシーを削除する |
| AWS Security Hub | - AWS Security Hubを有効化する<br>- 他のAWSサービスやパートナー製品との統合を設定する<br>- セキュリティ情報や優先度スコアを確認する<br>- 業界標準に対する準拠状況やレポートを確認する |
| Amazon Detective | - Amazon Detective を有効化する際には、必要なデータソース（VPC フローログ、CloudTrail、GuardDuty）も有効化すること。<br>- Amazon Detective の分析結果を確認する際には、時間範囲やフィルター条件を適切に設定すること。<br>- Amazon Detective の分析結果を活用して、セキュリティインシデントへの対応策を立案すること。 |
| AWS Artifact | - AWS Artifact を利用する際には、適切な IAM ポリシーを付与すること。<br>- AWS Artifact でダウンロードしたレポートや証明書は、セキュアな場所に保存すること。<br>- AWS Artifact で共有したレポートや証明書は、必要な期間だけ有効にすること。 |
| AWS Audit Manager | - AWS Audit Manager を利用する際には、適切な IAM ロールを付与すること。<br>- AWS Audit Manager で評価を行う際には、適切なフレームワークやスコープを選択すること。<br>- AWS Audit Manager で収集した監査証拠は、定期的に確認し、必要に応じて手動で追加や削除すること。 |


# アーキテクチャの策定
ここからはやりたいことを順番に考えながらアーキテクチャを策定していきます。
## インフラストラクチャを保護したい
セキュリティを順番に考えるときにまず、インフラストラクチャの保護を最初に考える人は多いでしょう。
インフラストラクチャの保護をするためにはネットワークの保護が必要です。
WAF、FW、IDS/IPSをそれぞれAWSのサービスで実装します。

そして、これらの実装を束ねて管理するのがAWS FirewallManagerです。
これは特にマルチアカウントでネットワークの保護関連サービスを管理するときに有用ですが、シングルアカウントでもアカウント内のネットワーク保護関連サービスを束ねて管理できるので利用することをお勧めします。

これらをまとめると以下のようなアーキテクチャになります。
![](https://storage.googleapis.com/zenn-user-upload/c381bee5189f-20240115.png)

## データを保護したい
データ保護は大きく暗号化と、保存されたデータに意図しないものがないかのチェックが必要になります。
そのために、鍵の管理とデータのスキャンが必要になるため、これらをAWSサービスで実現します。

また、少しデータ保護とは違いますが、データベースへの接続情報などシークレット値は平文で管理するとセキュリティレベルが低下します。
そのため、シークレット値の管理は専用のサービスで行い、定期的なローテーションも実行しておくとセキュリティのベストプラクティスになります。

これらをまとめると以下のようなアーキテクチャになります。
![](https://storage.googleapis.com/zenn-user-upload/172e60a54cfb-20240115.png)

## 脅威や脆弱性を検知したい
インフラストラクチャとデータを保護した後はシステム全体として脅威や脆弱性がないかを検知できるようにする必要があります。

脆弱性検知はOS/ソフトウェアレベルで、実施し一方、脅威検知と変更検知はシステム全体で実施します。
また、不用意なアクセス権がAWSの各種リソースに付与されていないかの確認も重要です。

ただ、これらはチェック項目が多く個別に管理するのは非常に手間がかかります。
そこでSecurity Hubにこれらのチェック項目すべてを連携します。
なお、Security HubにはFirewall Managerの連携も実施できるためインフラストラクチャ保護と検知部分は統合されます。

これらをまとめると以下のようなアーキテクチャになります。
![](https://storage.googleapis.com/zenn-user-upload/c6cd15662fbd-20240115.png)

## 検知したセキュリティリスクを簡単に調査したい
実際にセキュリティインシデントが発生した際あるいは事前検知できた場合には調査が必要になります。
しかしここまで、インフラストラクチャ保護、データ保護、検知を実装するために使ったAWSサービスは数が多く個別に調査していくのはとても大変です。

これを解決するのがDetectiveです。
ここまででSecurity Hubにインフラストラクチャ保護と検知を集約しているため、DetectiveをSecurity Hubと連携させるだけで、調査の際に見るべき項目のかなりの部分をDetectiveで調査できるようになります。

これらをまとめると以下のようなアーキテクチャになります。
![](https://storage.googleapis.com/zenn-user-upload/fa985c8829b0-20240115.png)

## コンプライアンスを担保したい
最後におまけですが、セキュリティをしっかりしたい、というシステムの場合にはコンプライアンスの担保も求められることがあります。

具体的にはISOの認証を満たしているか、といった細かいところや監査に耐えられる証跡を集められているかといった観点です。

これらもAWSのサービスで解決することができるので、最後に追加しておきましょう。

これらをまとめると以下のようなアーキテクチャになります。
![](https://storage.googleapis.com/zenn-user-upload/f72671e8e116-20240115.png)

# まとめ
本記事ではAWSであらゆるものをモニタリングするアーキテクチャをまとめました。

今回策定したアーキテクチャで実現できたのは以下の項目です。
- AWS上に構築するシステムの保護
- セキュリティ管理の一元管理
- セキュリティに関連する検出項目の簡便な調査
- コンプライアンス担保

以上でDevOps on AWS大全 実践編は連載終了です。
1カ月にわたり読んでくださった皆様ありがとうございました。