Security Hub CSPM
Security Hub CSPM とは
AWS Security Hub の CSPM(Cloud Security Posture Management)機能は、AWS リソースの設定がセキュリティベストプラクティスに準拠しているかを自動チェックするサービスである。各チェック項目は「コントロール」と呼ばれ、AWS Config ルールにより評価される。
他のツールとの位置づけ
Security Hub CSPM で検出された問題に対して、「予防」と「検出の深掘り」の両面で補完するツールがある。
検出
| ツール | 役割 | チェック方法 |
|---|---|---|
| Security Hub CSPM | 設定の逸脱を継続的にチェック | AWS Config ルールによる設定チェック |
| IAM Access Analyzer | 外部からの到達可能性を分析 | Zelkova 自動推論エンジンによるポリシー分析 |
Security Hub CSPM は「設定がどうなっているか」をチェックする。IAM Access Analyzer は「最終的に誰がアクセスできるか」を分析する。Security Hub CSPM がパブリックアクセスの設定チェックを中心とするのに対し、IAM Access Analyzer はクロスアカウントアクセスも含めた到達可能性を分析する。
なお、Control Tower にも独自の検出コントロール(Strongly recommended / Elective)があり、パブリックアクセス関連のものも含まれる。ただし、FSBP の方がコントロール数が多く網羅性が高いため、本記事では FSBP を基準として整理する(Control Tower のコントロール種別ごとの本サイトでの扱いは本サイトでのコントロール種別の扱いを参照)。
予防
| ツール | 役割 | 適用方法 |
|---|---|---|
| Control Tower 予防コントロール | AWS が提供するマネージドな予防ガードレール | Control Tower コンソールから OU 単位で有効化 |
| 宣言型ポリシー | サービスの基本設定を組織全体に宣言的に強制 | Organizations で OU 単位またはアカウント単位で適用 |
| カスタム SCP / RCP 等 | 予防コントロールが存在しないサービスを補完 | Organizations で独自のポリシーを作成・適用 |
予防コントロールおよび Declarative Policies が存在するサービスについては、これらを優先的に活用すべきである。予防コントロールは AWS がポリシーの内容を管理しており、サービスの仕様変更に追従する。Declarative Policies はサービスのコントロールプレーンで直接強制されるため、新しい API が追加されてもポリシーの更新なしに設定を維持できる。カスタム SCP / RCP は自分でメンテナンスが必要であり、サービスの API 変更や新機能追加に対して追従漏れのリスクがある。
予防コントロールが存在しないサービスについては、カスタム SCP / RCP 等で補完する必要がある。個別コントロールの検証で、カスタムポリシーの実装例と妥当性を検証する。
セキュリティ基準と重大度
FSBP を対象とする理由
Security Hub には複数のセキュリティ基準(CIS AWS Foundations Benchmark、PCI DSS 等)があるが、本記事では AWS Foundational Security Best Practices(FSBP) を対象とする。FSBP は AWS 自身が定義したベストプラクティス集であり、AWS サービス固有の設定チェックが最も網羅的に含まれている。他の基準(CIS 等)は業界標準の観点からのチェックであり、FSBP と重複するコントロールも多い。
重大度 CRITICAL / HIGH にフォーカスする理由
Security Hub コントロールの重大度は、悪用の難易度と侵害の可能性に基づいて AWS が割り当てている(AWS Prescriptive Guidance)。
| 重大度 | 定義 | 意味 |
|---|---|---|
| CRITICAL | 即座に修復すべき(escalating を避けるため) | 悪用が容易で、侵害の可能性が高い。放置するとリスクが拡大する |
| HIGH | 優先的に対処すべき | 悪用の難易度は中程度だが、侵害された場合の影響が大きい |
| MEDIUM | 緊急ではないが対処すべき | 悪用の難易度が高い、または侵害の影響が限定的 |
| LOW | 単独では対処不要 | 他の問題と組み合わさった場合にリスクとなる可能性がある |
MEDIUM / LOW のコントロールも対処すべきものであり、無視してよいわけではない。ただし、AWS は「CRITICAL と HIGH の finding を優先的に調査することを推奨」していることから、本記事では対処の優先順位に従い、まず CRITICAL / HIGH のコントロールを対象とする。
CRITICAL / HIGH コントロールの全体像
FSBP の CRITICAL / HIGH コントロールは合計 82 件(CRITICAL 27 件、HIGH 55 件)ある。セキュリティ上の懸念パターンで分類すると以下の通り。
| パターン | 件数 | 割合 | CRITICAL | HIGH | 概要 |
|---|---|---|---|---|---|
| パブリックアクセスの防止 | 35 | 43% | 21 | 14 | リソースがインターネットに公開されていないことを確認 |
| セキュリティサービスの有効化 | 14 | 17% | 1 | 13 | GuardDuty、Inspector、Config 等の有効化 |
| パッチ / バージョン管理 | 7 | 9% | 0 | 7 | IMDSv2 強制、マイナーバージョン自動アップグレード等 |
| 最小権限 / アクセス制御 | 6 | 7% | 0 | 6 | ワイルドカード権限の禁止、SG の制限等 |
| 認証情報の保護 | 6 | 7% | 4 | 2 | クリアテキスト認証情報の排除、ルートアクセスキー排除 |
| ログ・監視の確保 | 4 | 5% | 0 | 4 | CloudTrail マルチリージョン証跡、ログ設定 |
| ネットワーク分離 / VPC 設計 | 6 | 7% | 0 | 6 | カスタム VPC 配置、拡張 VPC ルーティング |
| 暗号鍵の保護 | 2 | 2% | 1 | 1 | KMS キーの削除防止 |
| その他 | 2 | 2% | 0 | 2 | 上記に含まれないもの |
CRITICAL 27 件中 21 件(78%)がパブリックアクセスの防止に分類される。
選定の考え方
本記事では、パブリックアクセスの防止(35 件)を検証対象とする。
パブリックアクセスにフォーカスする理由:
- CRITICAL 27 件中 21 件(78%)がパブリックアクセス関連であり、最もリスクが高いパターン
- 全 82 件の 43% を占める最大のカテゴリ
残り 47 件は、テーマが異なるため今回は扱わない。セキュリティサービスの有効化(GuardDuty / Inspector 等)は組織設計、パッチ管理やネットワーク分離はワークロード固有の運用設計に依存するテーマであり、パブリックアクセスの防止とは検証の観点が異なる。なお、CloudFront.12(CloudFront ディストリビューションが存在しない S3 オリジンを指さない)は FSBP では HIGH に分類されているが、削除済みの S3 バケット名を第三者に取得されるリスク(サブドメインテイクオーバー)を検出するものであり、リソースの公開設定をチェックする他のパブリックアクセス防止コントロールとは性質が異なるため、本記事のスコープ外とする。
パブリックアクセスの分類
35 件のコントロールを「何がパブリックになるか」の観点で 5 つに分類した。
| 分類 | 概要 | 件数 | 関連する Organizations ポリシー |
|---|---|---|---|
| S3 パブリックアクセス | S3 バケット・アクセスポイントのデータが公開される | 5 | S3 ポリシー(宣言型) |
| スナップショット公開 | スナップショットが他アカウントから復元可能になる | 5 | EBS Snapshot BPA(EBS のみ) |
| インターネット到達性 | VPC 内リソースがインターネットから到達可能になる | 13 | VPC BPA |
| リソースポリシー系 | リソースポリシーでパブリックアクセスが許可される | 7 | なし(カスタム SCP で補完) |
| サービス独自の公開設定 | サービス固有の BPA やパブリックアクセス設定 | 5 | なし(カスタム SCP で補完) |
S3 パブリックアクセス(5 件)
| コントロール | タイトル | 重大度 | 記事 |
|---|---|---|---|
| S3.2 | S3 汎用バケットでパブリック読み取りアクセスをブロックする | CRITICAL | 検証済み |
| S3.3 | S3 汎用バケットでパブリック書き込みアクセスをブロックする | CRITICAL | 検証済み |
| S3.19 | S3 アクセスポイントで BPA 設定を有効にする | CRITICAL | 検証済み |
| S3.6 | S3 汎用バケットポリシーで他の AWS アカウントからのアクセスを制限する | HIGH | 検証済み |
| S3.8 | S3 汎用バケットで BPA を有効にする | HIGH | 検証済み |
スナップショット公開(5 件)
| コントロール | タイトル | 重大度 | 記事 |
|---|---|---|---|
| EC2.1 | EBS スナップショットがパブリック共有されていないこと | CRITICAL | 検証済み |
| EC2.182 | EBS スナップショットの BPA 設定が有効であること | HIGH | 検証済み |
| RDS.1 | RDS スナップショットがプライベートであること | CRITICAL | 検証済み |
| DocumentDB.3 | DocumentDB 手動クラスタースナップショットがパブリックでないこと | CRITICAL | 検証済み |
| Neptune.3 | Neptune DB クラスタースナップショットがパブリックでないこと | CRITICAL | 検証済み |
インターネット到達性(15 件)
| コントロール | タイトル | 重大度 | 記事 |
|---|---|---|---|
| EC2.9 | EC2 インスタンスがパブリック IPv4 アドレスを持っていないこと | HIGH | 検証済み |
| EC2.25 | EC2 起動テンプレートがパブリック IP を割り当てていないこと | HIGH | 検証済み |
| Autoscaling.5 | Auto Scaling 起動設定でパブリック IP を持っていないこと | HIGH | 検証済み(一部) |
| ECS.2 | ECS サービスにパブリック IP が自動割り当てされていないこと | HIGH | 検証済み |
| ECS.16 | ECS タスクセットにパブリック IP が自動割り当てされていないこと | HIGH | 検証済み |
| EMR.1 | EMR クラスタープライマリノードがパブリック IP を持っていないこと | HIGH | 検証済み |
| RDS.2 | RDS DB インスタンスが PubliclyAccessible でないこと | CRITICAL | 検証済み |
| RDS.46 | RDS DB インスタンスがパブリックサブネットにデプロイされていないこと | HIGH | 検証済み |
| DMS.1 | DMS レプリケーションインスタンスがパブリックでないこと | CRITICAL | 検証済み |
| Redshift.1 | Redshift クラスターがパブリックアクセスを許可していないこと | CRITICAL | 検証済み |
| RedshiftServerless.3 | Redshift Serverless ワークグループがパブリックアクセスを許可していないこと | HIGH | 検証済み |
| SageMaker.1 | SageMaker ノートブックインスタンスがインターネットに直接アクセスできないこと | HIGH | 検証済み |
| ES.2 | Elasticsearch ドメインがパブリックにアクセス可能でないこと | CRITICAL | 検証済み |
| Opensearch.2 | OpenSearch ドメインがパブリックにアクセス可能でないこと | CRITICAL | 検証済み |
| EC2.19 | SG がハイリスクポートへの無制限インバウンドアクセスを許可していないこと | CRITICAL | 検証済み |
リソースポリシー系(5 件)
| コントロール | タイトル | 重大度 | 記事 |
|---|---|---|---|
| Lambda.1 | Lambda 関数ポリシーがパブリックアクセスを許可していないこと | CRITICAL | 検証済み |
| KMS.5 | KMS キーがパブリックにアクセス可能でないこと | CRITICAL | 検証済み |
| SNS.4 | SNS トピックアクセスポリシーがパブリックアクセスを許可していないこと | CRITICAL | 検証済み |
| SQS.3 | SQS キューアクセスポリシーがパブリックアクセスを許可していないこと | CRITICAL | 検証済み |
| SSM.4 | SSM ドキュメントがパブリックでないこと | CRITICAL | 検証済み |
サービス独自の公開設定(5 件)
| コントロール | タイトル | 重大度 | 記事 |
|---|---|---|---|
| SSM.7 | SSM ドキュメントのパブリック共有ブロック設定が有効であること | CRITICAL | 検証済み |
| EMR.2 | EMR の BPA 設定が有効であること | CRITICAL | 検証済み |
| MSK.4 | MSK クラスターのパブリックアクセスが無効であること | CRITICAL | 検証済み |
| EKS.1 | EKS クラスターエンドポイントがパブリックにアクセス可能でないこと | HIGH | 検証済み |
| Redshift.15 | Redshift SG がクラスターポートへのアクセスを制限していること | HIGH | 検証済み |
デフォルト保護と IAM Access Analyzer
デフォルト保護
コントロールによっては、AWS がデフォルトでパブリックアクセスをブロックしている場合がある(例: S3 の Block Public Access は 2023 年 4 月以降のバケットでデフォルト有効)。デフォルトで保護されているかどうかは、検証のアプローチに影響する。詳細は各カテゴリのページを参照。
本記事における「デフォルト保護」は API のデフォルト値(CLI でオプションを省略した場合の値)に基づく。マネジメントコンソールの作成ウィザードでは、API のデフォルトとは異なる、より安全な値がプリセットされている場合がある。
IAM Access Analyzer との関係
Security Hub CSPM は主にパブリックアクセスの設定をチェックする。一方、IAM Access Analyzer はパブリックアクセスに加えてクロスアカウントアクセスも検出する。IAM Access Analyzer 対象のリソースについては、CSPM がパブリックアクセスのみを検出するコントロールであっても、IAM Access Analyzer でクロスアカウントアクセスを補完的に検出できる。対象リソースの詳細は各カテゴリのページを参照。
検証環境
--profile 指定がない場合は Workload アカウントで実行する。export AWS_PROFILE=Workload でデフォルトを設定しておくと便利。