コンテンツにスキップ

Security Hub CSPM

本ページの情報は 2026 年 4 月時点のものです。セキュリティ基準は AWS Foundational Security Best Practices(FSBP)v1.0.0 を対象としています。

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 件)ある。セキュリティ上の懸念パターンで分類すると以下の通り。

パターン件数割合CRITICALHIGH概要
パブリックアクセスの防止3543%2114リソースがインターネットに公開されていないことを確認
セキュリティサービスの有効化1417%113GuardDuty、Inspector、Config 等の有効化
パッチ / バージョン管理79%07IMDSv2 強制、マイナーバージョン自動アップグレード等
最小権限 / アクセス制御67%06ワイルドカード権限の禁止、SG の制限等
認証情報の保護67%42クリアテキスト認証情報の排除、ルートアクセスキー排除
ログ・監視の確保45%04CloudTrail マルチリージョン証跡、ログ設定
ネットワーク分離 / VPC 設計67%06カスタム VPC 配置、拡張 VPC ルーティング
暗号鍵の保護22%11KMS キーの削除防止
その他22%02上記に含まれないもの

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 バケット・アクセスポイントのデータが公開される5S3 ポリシー(宣言型)
スナップショット公開スナップショットが他アカウントから復元可能になる5EBS Snapshot BPA(EBS のみ)
インターネット到達性VPC 内リソースがインターネットから到達可能になる13VPC BPA
リソースポリシー系リソースポリシーでパブリックアクセスが許可される7なし(カスタム SCP で補完)
サービス独自の公開設定サービス固有の BPA やパブリックアクセス設定5なし(カスタム SCP で補完)

S3 パブリックアクセス(5 件)

コントロールタイトル重大度記事
S3.2S3 汎用バケットでパブリック読み取りアクセスをブロックするCRITICAL検証済み
S3.3S3 汎用バケットでパブリック書き込みアクセスをブロックするCRITICAL検証済み
S3.19S3 アクセスポイントで BPA 設定を有効にするCRITICAL検証済み
S3.6S3 汎用バケットポリシーで他の AWS アカウントからのアクセスを制限するHIGH検証済み
S3.8S3 汎用バケットで BPA を有効にするHIGH検証済み

スナップショット公開(5 件)

コントロールタイトル重大度記事
EC2.1EBS スナップショットがパブリック共有されていないことCRITICAL検証済み
EC2.182EBS スナップショットの BPA 設定が有効であることHIGH検証済み
RDS.1RDS スナップショットがプライベートであることCRITICAL検証済み
DocumentDB.3DocumentDB 手動クラスタースナップショットがパブリックでないことCRITICAL検証済み
Neptune.3Neptune DB クラスタースナップショットがパブリックでないことCRITICAL検証済み

インターネット到達性(15 件)

コントロールタイトル重大度記事
EC2.9EC2 インスタンスがパブリック IPv4 アドレスを持っていないことHIGH検証済み
EC2.25EC2 起動テンプレートがパブリック IP を割り当てていないことHIGH検証済み
Autoscaling.5Auto Scaling 起動設定でパブリック IP を持っていないことHIGH検証済み(一部)
ECS.2ECS サービスにパブリック IP が自動割り当てされていないことHIGH検証済み
ECS.16ECS タスクセットにパブリック IP が自動割り当てされていないことHIGH検証済み
EMR.1EMR クラスタープライマリノードがパブリック IP を持っていないことHIGH検証済み
RDS.2RDS DB インスタンスが PubliclyAccessible でないことCRITICAL検証済み
RDS.46RDS DB インスタンスがパブリックサブネットにデプロイされていないことHIGH検証済み
DMS.1DMS レプリケーションインスタンスがパブリックでないことCRITICAL検証済み
Redshift.1Redshift クラスターがパブリックアクセスを許可していないことCRITICAL検証済み
RedshiftServerless.3Redshift Serverless ワークグループがパブリックアクセスを許可していないことHIGH検証済み
SageMaker.1SageMaker ノートブックインスタンスがインターネットに直接アクセスできないことHIGH検証済み
ES.2Elasticsearch ドメインがパブリックにアクセス可能でないことCRITICAL検証済み
Opensearch.2OpenSearch ドメインがパブリックにアクセス可能でないことCRITICAL検証済み
EC2.19SG がハイリスクポートへの無制限インバウンドアクセスを許可していないことCRITICAL検証済み

リソースポリシー系(5 件)

コントロールタイトル重大度記事
Lambda.1Lambda 関数ポリシーがパブリックアクセスを許可していないことCRITICAL検証済み
KMS.5KMS キーがパブリックにアクセス可能でないことCRITICAL検証済み
SNS.4SNS トピックアクセスポリシーがパブリックアクセスを許可していないことCRITICAL検証済み
SQS.3SQS キューアクセスポリシーがパブリックアクセスを許可していないことCRITICAL検証済み
SSM.4SSM ドキュメントがパブリックでないことCRITICAL検証済み

サービス独自の公開設定(5 件)

コントロールタイトル重大度記事
SSM.7SSM ドキュメントのパブリック共有ブロック設定が有効であることCRITICAL検証済み
EMR.2EMR の BPA 設定が有効であることCRITICAL検証済み
MSK.4MSK クラスターのパブリックアクセスが無効であることCRITICAL検証済み
EKS.1EKS クラスターエンドポイントがパブリックにアクセス可能でないことHIGH検証済み
Redshift.15Redshift 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 でデフォルトを設定しておくと便利。