AWSにおけるインフラストラクチャ保護のベストプラクティス

## はじめに

> :memo: **Note:** [English version is available here.](https://qiita.com/hasmukhrathod_nttdintellilink/private/26671a3d7dddc09ec063)

AWSセキュリティの重要な側面の1つは、インフラストラクチャ保護です。これには、AWS環境のさまざまなレイヤーでセキュリティ制御を適用することが含まれます。インフラストラクチャ保護に関する以下のポイントを、この投稿でまとめしていきたいと思います。

- インフラストラクチャ保護とは何ですか？
- インフラストラクチャ保護には何が含まれますか？
- ネットワーク保護アプローチ
- コンピュート保護アプローチ
- 一般的なミスと対応するベストプラクティスは何ですか？

**注意：** セキュリティ要件はプロジェクトによって異なります。これが正解という訳ではありませんが、参考にしてただければと思います。最適なセキュリティ要件を特定するためには、AWSドキュメントを参照することをお勧めします。

## 対象者

この記事の対象読者は：
- AWS のセキュリティについて学びたい人。
- AWS セキュリティ サービスと、インフラストラクチャ ワークロードを保護するためのベスト プラクティスについて知りたい人。
- インフラ保護のよくある間違いを知りたい人。

## インフラ保護とは？ 

インフラの保護は、特に脅威と脆弱性が絶えず進化しているクラウド環境では、情報セキュリティの重要な側面だと思います。インフラ保護は意図しないや不正なアクセスからクラウド リソースを保護します。ですから、インフラストラクチャの保護は、どの組織にとっても最も重要な目標になっていると思います。

## どの方法でインフラ保護をできますか？

[AWS Well Architected Framework](https://aws.amazon.com/architecture/well-architected/)によると、インフラ保護には多くの方法があります。 主に「ネットワークの保護」と「コンピューティングの保護」の 2 種類の保護に焦点を当てています。

- **ネットワークの保護**
ネットワーク保護には以下が含まれます：  

    - ネットワークレイヤーを作成する。 例えば、インタネットアクセスが必要というコンポーネントをグループ化インターネットアクセスできるようなレイヤーを作成します。このように、レイヤー後で、レイヤーにあるコンポーネントの通信経路（通信チャネルも呼ばれている）をセキュアするのは重要です。
   - トラフィック フローを制御し、不要または悪意のあるパケットをフィルタリングするのは重要です。

- **コンピューティングの保護**
ネットワーク保護には以下が含まれます：
 
   -  脆弱性管理。
   - 攻撃面を縮小する。
   - 設定と運用の自動化する

AWS側でネットワーク リソースとコンピューティング リソースを保護できるようなさまざまなサービスと機能を提供しています。

# ネットワーク保護の方法

AWSのサービスを使用したネットワーク保護のアプローチをいくつかご紹介します。

- **ネットワークレイヤーを作成する**
 
  -  ネットワークトポロジを設計する際には、各コンポーネントの接続要件を調べる必要があります。共通の到達性要件をもつコンポーネントをグループ化します。レイヤーを作成することで、コンポーネントを整理し、攻撃面を狭めることができます。レイヤーされたアーキテクチャのサンプルを以下に示します。

  ![layer-architecture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3200244/dcfe8c19-5fef-64dc-96b2-f72be7012bf2.png)

  - ネットワーク レイヤーを作成に利用なAWSサービスとコンポーネント：
    -  VPC
       - Internet Gateway (IGW)
       - Subnets
       - Routing Tables
- **ネットワークレイヤーに設置されたコンポーネント間の通信チャネルを保護する**
  - AWS 内の接続
      - VPC Peering
      - PrivateLink
      - Transit Gateway
  - AWS 外の接続
      - AWS VPN
      - AWS Direct Connect
      - Transit Gateway

- **トラフィック フローを制御し、不要または悪意のあるパケットをフィルタリングする。**

  - トラフィック フローを制御するには、各コンポーネントのインバウンドとアウトバウンドの要件を把握する必要があります。アーキテクチャの各レイヤーでトラフィック制御を実装します。 サンプルを以下に示します。

![ddos-resilient-architecture-traffic-control.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3200244/8497a0e7-588b-f38f-2e37-e8a9cfd59020.jpeg)

Reference: [DDoS attack traffic control](https://docs.aws.amazon.com/ja_jp/whitepapers/latest/aws-best-practices-ddos-resiliency/mitigation-techniques.html)

  ![vpc-traffic-control.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3200244/c434cb68-9b4f-b5bc-9d95-076e92ff446f.png)

[Reference: VPC traffic control](https://explore.skillbuilder.aws/files/a/w/aws_prod1_docebosaas_com/1680087600/q3MbdXdW1Dcw2V6tDhA5xQ/tincan/1795780_1657214718_p1g7cr0dlbarm1thl1qhfduib7l4_zip/assets/XVLi-CuIk5v3FJhq_m8eSaGd5sjZRRLLM.png)

   - トラフィック制御に役に立つAWSサービスとコンポーネント：
      - エッジネットワークでトラフィック制御する
        - AWS Route53
        - AWS WAF
        - AWS Cloudfront
        - AWS Shield
      - ネットワークトラフィックをVPCで制御する
        - NACL(Network Access Control List) 設定してサブネットレベルへのトラフェックを制御することができます。
        - Security Groupを設定してインスタンスレベルのトラフェックを制御することができます。
        - VPCエンドポイントを使用して、AWSサービス間で安全な通信・接続をします。 (たとえば、EC2 または Lamda にデプロイされたアプリケーションは、S3 サービスに保存されたファイルにアクセスする必要があります。）
      - 複数のアカウント間でトラフィック制御/ルールを一元管理
        - AWS Network Firewall : 複数のアカウントと VPC 全体のセキュリティ ポリシーを一元管理するためのサービスです。
        - AWS Firewall Manager : 複数のアカウントに設定したファイアウォール ルールを一元的に構成および管理するためのサービスです。

## コンピューティング保護の方法

AWS のサービスを使用したコンピューティング保護のアプローチをいくつかご紹介します。

- 脆弱性管理
  - 脆弱性とは、攻撃者に悪用されてシステムやデータを侵害される可能性のある弱点や欠陥のことです。
  - 脆弱性管理は、コンピューティングリソースに存在する脆弱性を特定し、評価、優先順位付け、修正するプロセスです。 
  - [AWSの責任共有モデル](https://aws.amazon.com/jp/compliance/shared-responsibility-model/)によりますと、お客様（私たち）は、以下のようなリソースにパッチを適用する責任があります:
    - EC2の場合、ゲストオペレーティングシステムの管理 (更新やセキュリティパッチなど)
    - AMIの更新やセキュリティパッチなど。
  - 脆弱性管理実施に役に立つ AWS サービス
    - **AWS Systems Manager Patch Manager**: AWS Systems Manager Patch Managerは、AWS Systems Managerの一機能です。セキュリティ関連の更新およびその他の種類の更新の両方を使用してマネージドノードにパッチを適用するプロセスを自動化します。さらに、サポートされているオペレーティングシステム別に、どのパッチをどのようにインストールするかについて、技術的に詳しく説明しています。
    - **Amazon Inspector**: AWS Inspectorとは、脆弱性管理の一つフルマネージドサービスです。ワークロードをスキャンして、ソフトウェアの脆弱性と意図しないネットワークのエクスポージャーを検出します。定義済みのいろいろなルール パッケージを使用するか、要件によってのカスタム ルールを作成して、一般的な脆弱性とベスト プラクティスを確認できます。

- 攻撃面を縮小する
  - インターネット上で公開されているリソースは、攻撃に対してより脆弱になります。 目的としては、攻撃者があなたのアプリケーションを標的にするための選択肢を制限することです。
  - オペレーティングシステムを強化
      -  不要なサービスを無効にする
      -  不要なソフトウェアのアンインストール
      -  ファイアウォール等の設定
  - **EC2 Image Builder**を利用して安全なAMIを構築するプロセスを開発する。
  - サードパーティの静的コード分析ツールを使用し、セキュリティの問題や一般的な弱性（CVEs）の特定を支援する。

- 設定・運用の自動化など.
  - コンフィグレーション管理ツールを使用する
      - **AWS CloudFormation**
      - **AWS Systems Manager**
      - **AWS Systems Manager Patch Manager**
  - 侵入検知および防止ツールを実装して、インスタンスでの悪意のあるアクティビティを監視および停止します。

# よくある間違いとそれに対応するベストプラクティス


| よくある間違い       | ベストプラクティス |
|--------------|-----|
| AWS リソースをパブリックサブネットに配置してしまう。 例: データベース、Web サーバー |  ロード バランサーと NAT ゲートウェイを配置して、 Web サーバーとデータベース サーバーをプライベート サブネット配置する。 |
| サーバー アクセスするためには、パブリック サブネット内に Bastion ホスト サーバーを配置する。 | AWS System Managerの一つの機能Session Managerを利用して、安全にサーバーアクセスすることができます。 |
| VPC フロー ログを有効にしていない。 |   VPC フロー ログを使用して、VPC、サブネット、またはネットワーク インターフェイスとの間で通信される IP トラフィックを監視します。|
| VPC リソースは、パブリックエンドポイントを使用して他のAWSサービスと通信するよう設定。 たとえば、S3。 |  VPC とサポートされているAWSサービス間のプライベート接続を確立する AWS PrivateLinkを使用します。|
| セキュリティグループのアウトバウンドに、すべてのポートで 0.0.0.0/0 を許可している。 |  インバウンドだけでなく、アウトバウンドもポートごとに必要なIPアドレスにアクセスを制限するのはお勧めです。 |
| 公開されているS3オブジェクトを直接アクセスでくるような方法でリリースする。 |  Cloudfront を介して S3 オブジェクトを提供することは、より安全で、高速で、費用対効果の高い方法です。 |
| EC2 サーバーにOSとセキュリティパッチを適用しない。 |  AWS System Managerの パッチ マネージャーを使用して、パッチ ベースラインを定義し、スケジュールを設定します。 |

今回は、AWSにおけるインフラ保護について解決しました。読者の皆様がAWSインフラ構築・維持する際に，この記事がお役に立てれば幸いです。

# 参考

**AWS White Papers**

1. [Security Pillar – AWS Well Architected Framework](https://docs.aws.amazon.com/pdfs/wellarchitected/latest/security-pillar/wellarchitected-security-pillar.pdf)
2. [AWS Security Best Practices](https://d1.awsstatic.com/whitepapers/aws-security-best-practices.pdf)

**AWS Skill Builder Courses**

1. [AWS Security Best Practices: Overview](https://explore.skillbuilder.aws/learn/course/11172/aws-security-best-practices-overview)
2. [AWS Security Best Practices: Network Infrastructure](https://explore.skillbuilder.aws/learn/course/11218/aws-security-best-practices-network-infrastructure)
3. [Protect Your Web-facing Workloads with AWS Security Services](https://explore.skillbuilder.aws/learn/course/359/protect-your-web-facing-workloads-with-aws-security-services)
4. [Security-Fundamentals](https://explore.skillbuilder.aws/learn/course/13105/security-fundamentals-301)