Amazon VPC周りのセキュリティをBenchmarksから覗く！

本記事は、[AWS Jr.Champions Adventcalendar 2024](https://qiita.com/advent-calendar/2024/japan-aws-jr-champions) の23日目の記事です（遅くなりました、、）。

# はじめに

こんにちは。
セキュリティって難しいですよね、、笑

Amazon VPC周りでは特に初学者自身が設計したときに、NWがセキュリティルールに準拠できているのか、不安に思うこともあるのではないでしょうか？

AWS Security Hubで利用する各種設定ルールが8個あります。

本記事では、各種設定ルールからVPCの設定項目のセキュリティチェックポイントを一覧化して、**NW周り**のセキュリティ監視項目をピックアップしてみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/420620/f7680517-f08f-7a68-eb6f-9754cb88a4f0.png)

:::note warn
各種ルールで重複する項目がたくさんあるので、重複したルールに:eight_spoked_asterisk:を先頭に付けました。
Security Hubはチェック数に応じた料金体制なので、重複の内容を把握して、適用するルールを正しく定めることでコストの最適化が見込めます。
:::

# AWS Foundational Security Best Practices 
https://docs.aws.amazon.com/ja_jp/securityhub/latest/userguide/fsbp-standard.html

> AWS Foundational Security Best Practices 標準は、AWSアカウントおよびリソースがセキュリティのベストプラクティスから逸脱した場合に検出する一連のコントロールです。

各種設定ルールの中で最もボリュームがあります。

| 重要度 | サービス | 内容 |  
| --- | --- | --- |
| 高 | EC2 | VPCデフォルトのセキュリティグループでは、インバウンドトラフィックまたはアウトバウンドトラフィックを許可しないでください。|
| 中 | EC2 | VPCフローログ記録はすべてのVPCで有効にする必要があります。|
| 高 | EC2 | EC2インスタンスにはパブリックIPv4アドレスを指定しないでください。(正当なパブリックIPアドレスを持つEC2インスタンスを維持する正当なユースケースがある場合は、このコントロールの結果を抑制できます。) |
| 低 | EC2 | 未使用のEIPsは削除する必要があります。|
| 高 | EC2 | セキュリティグループは、`0.0.0.0/0`または`::/0`からポート22への入力は許可しないでください。|
| 高 | EC2 | セキュリティグループは、`0.0.0.0/0`または`::/0`からポート3389への入力は許可しないでください。|
| 中 | EC2 | サブネットはパブリックIPアドレスを自動的に割り当てないでください。|
| 低 | EC2 | 未使用のネットワークアクセスコントロールリストは削除する必要があります。
| 高 | EC2 | セキュリティグループは、許可されたポートに対する無制限の受信トラフィックのみを許可する必要があります。|
| 高 | EC2 | セキュリティグループは、高リスクのポートへの無制限アクセスを許可しないでください。|
| 中 | EC2 | ネットワークACLsは 0.0.0.0/0 からポート 22 またはポート 3389 への入力を許可しないでください。|
| 高 | EC2 | Transit Gateway はVPCアタッチメントリクエストを自動的に受け入れないでください。|
| 中 | EC2 | EC2VPN接続ではログ記録が有効になっている必要があります。|
| 高 | ECS | ECSサービスには、パブリック IP アドレスを自動的に割り当てないでください。|
| 高 | ECS | ECSタスクセットには、パブリック IP アドレスを自動的に割り当てないでください。|
| 中 | ELB | Application、Network、Gateway Load Balancer は**複数のアベイラビリティーゾーン**にまたがる必要があります。|
| 中 | RDS | RDS DBクラスターは**複数のアベイラビリティーゾーン**にまたがる必要があります。|
| 中 | Lambda | Lambda 関数は**複数のアベイラビリティーゾーン**で動作する必要があります。|

- エンドポイントシリーズ

| 重要度 | サービス | 内容 |  
| --- | --- | --- |
| 中 | EC2 | VPCsでXXXサービスのインターフェースエンドポイント設定すべきです。|

下記は設定が推奨されているサービスです。事前にインターフェースエンドポイントがあるか確認して、NAT-Gatewayで通信すべきか確認するステップを挟みたいですね。

- タグ付シリーズ

| 重要度 | サービス | 内容 |  
| --- | --- | --- |
| 低 | EC2 | XXXにはタグを付ける必要があります。|

特にGatewayシリーズは他環境も挟み、IaC管理下にしていない場合などもケースによってはあると思うので、気をつけたいです。

# CIS AWS Foundations Benchmark
https://docs.aws.amazon.com/ja_jp/securityhub/latest/userguide/cis-aws-foundations-benchmark.html

> Center for Internet Security (CIS) AWS Foundations Benchmark は、一連のセキュリティ設定のベストプラクティスとして機能します。これらの業界で認められているベストプラクティスは、明確でstep-by-stepに実装と評価の手順を提供します。

Security Hub は CIS AWS Foundations Benchmark の各バージョンをサポートしていますが、セキュリティのベストプラクティスを常に最新の状態に保つため、v3.0.0 を使用することをお勧めします。

### CIS AWS Foundamental BenchMark v3.0.0

| 重要度 | サービス | 内容 |  
| --- | --- | --- |
| 高 | EC2 |:eight_spoked_asterisk: VPCデフォルトのセキュリティグループは、インバウンドまたはアウトバウンドを許可しないでください。|
| 中 | EC2 |:eight_spoked_asterisk: VPCフローログ記録はすべてのVPCで有効にする必要があります。|
| 中 | EC2 |:eight_spoked_asterisk: ネットワークACLsは、`0.0.0.0/0`からポート22またはポート3389への入力は許可しないでください。|
| 高 | EC2 |:eight_spoked_asterisk: EC2セキュリティグループは、`0.0.0.0/0`からリモートサーバー管理ポートへの入力を許可しないでください。|
| 高 | EC2 |:eight_spoked_asterisk: EC2セキュリティグループ`::0/0`からリモートサーバー管理ポートへの入力を許可しないでください。|

### CIS AWS Foundamental BenchMark v1.4.0

| 重要度 | サービス | 内容 |  
| --- | --- | --- |
| 低 | CloudWatch | セキュリティグループの変更に対してログメトリクスフィルターとアラートが存在することを確認する。|
| 低 | CloudWatch | ネットワークACLsの変更に対してログメトリクスフィルターとアラートが存在することを確認する。|
| 低 | CloudWatch | ネットワークゲートウェイの変更に対してログメトリクスフィルターとアラートが存在することを確認する。|
| 低 | CloudWatch | ルートテーブルの変更に対してログメトリクスフィルターとアラートが存在することを確認する。|
| 低 | CloudWatch | VPCの変更に対してログメトリクスフィルターとアラートが存在することを確認する。|
| 高 | EC2 |:eight_spoked_asterisk: VPCデフォルトのセキュリティグループは、インバウンドまたはアウトバウンドを許可しないでください。|
| 中 | EC2 |:eight_spoked_asterisk: VPCフローログ記録はすべてのVPCで有効にする必要があります。|
| 中 | EC2 |:eight_spoked_asterisk: ネットワークACLsは、`0.0.0.0/0`からポート22またはポート3389への入力は許可しないでください。|

### CIS AWS Foundamental BenchMark v1.2.0

| 重要度 | サービス | 内容 |  
| --- | --- | --- |
| 低 | CloudWatch | :eight_spoked_asterisk: セキュリティグループの変更に対してログメトリクスフィルターとアラートが存在することを確認する。|
| 低 | CloudWatch | :eight_spoked_asterisk: ネットワークACLsの変更に対してログメトリクスフィルターとアラートが存在することを確認する。|
| 低 | CloudWatch | :eight_spoked_asterisk: ネットワークゲートウェイの変更に対してログメトリクスフィルターとアラートが存在することを確認する|
| 低 | CloudWatch | :eight_spoked_asterisk: ルートテーブルの変更に対してログメトリクスフィルターとアラートが存在することを確認する。|
| 低 | CloudWatch | :eight_spoked_asterisk: VPCの変更に対してログメトリクスフィルターとアラートが存在することを確認する。|
| 高 | EC2 | :eight_spoked_asterisk: VPCデフォルトのセキュリティグループは、インバウンドまたはアウトバウンドを許可しないでください。|
| 中 | EC2 | :eight_spoked_asterisk: VPCフローログ記録はすべてのVPCで有効にする必要があります。|
| 中 | EC2 | :eight_spoked_asterisk: ネットワークACLsは、`0.0.0.0/0`からポート22またはポート3389への入力は許可しないでください。|

# NIST Special Publication 800-53 Revision 5
https://docs.aws.amazon.com/ja_jp/securityhub/latest/userguide/nist-standard.html

> NIST SP 800-53 Rev.5 は、米国商業省の一部である米国国立標準技術研究所 (NIST) によって開発されたサイバーセキュリティとコンプライアンスのフレームワークです。

AWS Foundational Security Best Practicesとほぼ同じような内容がそろっている印象でした。

| 重要度 | サービス | 内容 |  
| --- | --- | --- |
| 中 | AutoScaling | :eight_spoked_asterisk: Auto Scaling グループは**複数のアベイラビリティーゾーン**をカバーする必要があります。|
| 中 | AutoScaling | :eight_spoked_asterisk: Auto Scaling グループの起動設定を使用して起動される Amazon EC2インスタンスにはパブリックIPアドレスを設定しないでください。|
| 中 | EC2 |  :eight_spoked_asterisk: VPCフローログ記録はすべての で有効にする必要があります。|
| 中 | AutoScaling | :eight_spoked_asterisk: Amazon EC2インスタンスにはパブリックIPアドレスを設定しないでください。|
| 低 | EC2 | :eight_spoked_asterisk: 未使用のEIPsは削除する必要があります。|
| 高 | EC2 | :eight_spoked_asterisk: セキュリティグループは、`0.0.0.0/0`または`::/0`からポート22への入力は許可しないでください。|
| 中 | EC2 | :eight_spoked_asterisk: サブネットはパブリックIPアドレスを自動的に割り当てないでください。|
| 低 | EC2 | :eight_spoked_asterisk: 未使用のネットワークアクセスコントロールリストは削除する必要があります。
| 高 | EC2 | :eight_spoked_asterisk: セキュリティグループは、許可されたポートに対する無制限の受信トラフィックのみを許可する必要があります。|
| 高 | EC2 | :eight_spoked_asterisk: セキュリティグループは、高リスクのポートへの無制限アクセスを許可しないでください。|
| 中 | EC2 | :eight_spoked_asterisk: ネットワークACLsは 0.0.0.0/0 からポート 22 またはポート 3389 への入力を許可しないでください。|
| 高 | EC2 | :eight_spoked_asterisk: Transit Gateway はVPCアタッチメントリクエストを自動的に受け入れないでください。|
 高 | ECS | :eight_spoked_asterisk: ECSサービスには、パブリック IP アドレスを自動的に割り当てないでください。|
| 高 | ECS | :eight_spoked_asterisk: ECSタスクセットには、パブリック IP アドレスを自動的に割り当てないでください。|
| 中 | NetworkFirewall | Network Firewall ファイアウォールを複数のアベイラビリティーゾーンにデプロイする必要があります。

- エンドポイントシリーズ

| 重要度 | サービス | 内容 |  
| --- | --- | --- |
| 中 | EC2 | VPCsでXXXサービスのインターフェースエンドポイント設定すべきです。|

# Enable PCI DSS
https://docs.aws.amazon.com/ja_jp/securityhub/latest/userguide/pci-standard.html
> Payment Card Industry Data Security Standard (PCIDSS) は、クレジットカードおよびデビットカードの情報を安全に処理するための一連のルールとガイドラインを提供するサードパーティーのコンプライアンスフレームワークです。

## Enable PCI DSS v3.2.1

| 重要度 | サービス | 内容 |  
| --- | --- | --- |
| 高 | EC2 | :eight_spoked_asterisk: VPCデフォルトのセキュリティグループでは、インバウンドトラフィックまたはアウトバウンドトラフィックを許可しないでください。|
| 中 | EC2 | :eight_spoked_asterisk: VPCフローログ記録はすべてのVPCで有効にする必要があります。|
| 低 | EC2 | :eight_spoked_asterisk: 未使用のEIPsは削除する必要があります。|
| 高 | EC2 | :eight_spoked_asterisk: セキュリティグループは、`0.0.0.0/0`または`::/0`からポート22への入力は許可しないでください。|
| 中 | ELB | Application Load Balancer は、すべてのHTTPリクエストをHTTPSにリダイレクトするように設定する必要があります。|

## Enable PCI DSS v4.0.1

| 重要度 | サービス | 内容 |  
| --- | --- | --- |
| 高 | EC2 | :eight_spoked_asterisk: セキュリティグループは、`0.0.0.0/0`または`::/0`からポート22への入力は許可しないでください。|
| 高 | EC2 | :eight_spoked_asterisk: セキュリティグループは、`0.0.0.0/0`または`::/0`からポート3389への入力は許可しないでください。|
| 中 | EC2 | :eight_spoked_asterisk: サブネットはパブリックIPアドレスを自動的に割り当てないでください。|
| 中 | EC2 | :eight_spoked_asterisk: ネットワークACLsは、`0.0.0.0/0`からポート22またはポート3389への入力は許可しないでください。|
| 高 | EC2 |:eight_spoked_asterisk: EC2セキュリティグループは、`0.0.0.0/0`からリモートサーバー管理ポートへの入力を許可しないでください。|
| 高 | EC2 |:eight_spoked_asterisk: EC2セキュリティグループ`::0/0`からリモートサーバー管理ポートへの入力を許可しないでください。|
 高 | ECS | :eight_spoked_asterisk: ECSサービスには、パブリック IP アドレスを自動的に割り当てないでください。|
| 高 | ECS | :eight_spoked_asterisk: ECSタスクセットには、パブリック IP アドレスを自動的に割り当てないでください。|

# 最後に
各ルールともに重複している内容が多いですが、共通して読み取れたことは、不必要なパブリックアクセス（穴開け）はシステム的に除去することでした。

今後も定期的にルールを見直し、AWS Security Hubやベストプラクティスを活用して、セキュリティの強化を進めましょう。