AWS Security Hubの「露出」検出結果で潜在リスクを可視化してみた

AWS Security Hubの「露出」検出結果で潜在リスクを可視化してみた

Security Hubに追加された「露出(Exposure)」の検出結果を実環境で確認しました。パブリック公開に限らず、設定ミスや権限に関する文脈などを関連付けて生成される潜在的なセキュリティリスクを指す概念で、Essentials Planに含まれるため追加オプション費用なしで利用開始できます。
2026.07.08

はじめに

2026年7月6日、AWSから以下のアナウンスが公開されました。

https://aws.amazon.com/jp/about-aws/whats-new/2026/07/impact-analysis-aws-security-hub/

Security Hubに「露出(Exposure)」という新しいカテゴリの検出結果が追加されています。マネジメントコンソールで確認すると、以下のように説明されています。

エクスポージャーの検出結果は、ソフトウェアの脆弱性、誤った構成、その他のセキュリティ検出など、さまざまな特性を関連付けて生成される、環境内の潜在的なセキュリティ問題です。

「露出」と聞くと、リソースがインターネットに公開されている状態をイメージしがちです。しかしSecurity HubのExposure Findingsで扱う「露出」は、それより広い概念です。ソフトウェアの脆弱性、設定ミス、権限に関する文脈、到達可能性などの特性を関連付け、環境内に存在する潜在的なセキュリティ問題として提示します。

従来のSecurity Hub(CSPM)とExposure Findingsの違いを整理します。

項目 従来の Security Hub (CSPM) Exposure Findings
検出の粒度 個別コントロール単位(例: DynamoDB.6 FAILED) 1つ以上のシグナルを関連付けて「露出」として提示する
リスクの文脈 「何が違反しているか」 「何が起きうるか」(Data Destruction, Unauthorized Access 等)
重大度の決め方 コントロールの固定 severity Likelihood × Impact のリスクマトリクス

Exposure FindingsはSecurity HubのEssentials Planに含まれています。Essentials Plan自体はリソース単位の従量課金ですが、Exposure Findingsのために追加のオプション費用を支払う必要はありません。30日間の無料トライアルがあるため、既存環境でも気軽に試せます。

https://docs.aws.amazon.com/securityhub/latest/userguide/exposure-findings.html

検証内容

CLIでExposure Findingsを取得する

Exposure FindingsはSecurity Hub v2のAPIであるget-findings-v2で取得します。従来のget-findings(v1 API)では取得できません。

まずv1 APIでExposureタイプを検索してみます。

aws securityhub get-findings \
  --region ap-northeast-1 \
  --filters '{"Type": [{"Value": "Exposure", "Comparison": "PREFIX"}]}' \
  --query 'Findings | length(@)'
0

結果は0件です。v1 APIのASFF形式ではExposure Findingsは返されません。

次にget-findings-v2を使います。v2 APIではフィルタ構造がCompositeFilters形式に変わっています。

aws securityhub get-findings-v2 \
  --region ap-northeast-1 \
  --filters '{
    "CompositeFilters": [{
      "StringFilters": [{
        "FieldName": "finding_info.types",
        "Filter": {"Value": "Exposure", "Comparison": "EQUALS"}
      }]
    }]
  }'

今回の環境では6件のExposure Findingsが検出されました。

# リソース タイプ Likelihood Impact Severity
1 Lambda 関数 A Unauthorized Access(API Gateway 経由) Moderate Low Low
2 Lambda 関数 B Unauthorized Access(Publicly Invocable) High Low Medium
3 Lambda 関数 C Unauthorized Access(Publicly Invocable) High Low Medium
4 Lambda 関数 D Unauthorized Access(Publicly Invocable) High Low Medium
5 Lambda 関数 E Unauthorized Access(Publicly Invocable) High Low Medium
6 DynamoDB テーブル Data Destruction(削除保護無効) Low Low

検出結果の構造を読み解く

Lambda関数がPublicly Invocableと判定されたMedium severityの検出結果を例に、構造を見ていきます。

get-findings-v2 レスポンス全文(OCSF形式)
{
  "activity_id": 1,
  "activity_name": "Create",
  "category_name": "Findings",
  "class_name": "Detection Finding",
  "class_uid": 2004,
  "cloud": {
    "account": {
      "uid": "xxxxxxxxxxxx"
    },
    "provider": "AWS",
    "region": "ap-northeast-1"
  },
  "finding_info": {
    "analytic": {
      "type": "Rule",
      "type_id": 1,
      "uid": "v1"
    },
    "created_time_dt": "2026-07-08T01:35:39.661Z",
    "desc": "The Lambda function is publicly invocable, exposing it to unauthorized access and privilege escalation. The function can be invoked by anyone without requiring user interaction or special privilege. This combination enables a threat actor to potentially access the Lambda function and gain unauthorized access. The associated identity has limited effective permissions, reducing the potential blast radius of this finding.",
    "first_seen_time_dt": "2026-07-08T01:35:39.661Z",
    "last_seen_time_dt": "2026-07-08T01:35:39.661Z",
    "related_events": [
      {
        "product": {
          "name": "Security Hub",
          "vendor_name": "AWS"
        },
        "title": "Lambda.1 Lambda function policies should prohibit public access",
        "traits": [
          {
            "category": "Reachability",
            "name": "The Lambda function can be invoked by anyone",
            "type": "Contributing Trait"
          }
        ],
        "type": "Finding"
      }
    ],
    "related_events_count": 1,
    "title": "Potential Unauthorized Access: Lambda function is publicly invocable with limited effective permissions",
    "types": [
      "Exposure/Potential Privilege Escalation/Valid Cloud Credentials",
      "Exposure"
    ]
  },
  "impact": "Low",
  "impact_id": 1,
  "likelihood": "High",
  "likelihood_id": 4,
  "metadata": {
    "product": {
      "feature": {
        "uid": "security-hub/Exposure"
      },
      "name": "Security Hub Exposure Detection",
      "vendor_name": "AWS"
    },
    "version": "1.8.0"
  },
  "remediation": {
    "desc": "To remediate this finding, see the documentation. We recommend that you remediate traits in the order listed below.",
    "kb_article_list": [
      {
        "src_url": "https://docs.aws.amazon.com/securityhub/latest/userguide/exposure-lambda-function.html#publicly-invocable",
        "title": "Publicly Invocable"
      }
    ]
  },
  "resources": [
    {
      "cloud_function": {
        "name": "my-function",
        "version": "$LATEST"
      },
      "cloud_partition": "aws",
      "labels": ["primary_resource"],
      "name": "my-function",
      "owner": {
        "account": {
          "type": "AWS Account",
          "uid": "xxxxxxxxxxxx"
        }
      },
      "provider": "AWS",
      "region": "ap-northeast-1",
      "resource_relationship": {
        "edges": [
          {
            "name": "AWS::Lambda::Function->AWS::IAM::Role",
            "relation": "Is associated with",
            "source": "Node0",
            "target": "Node2"
          },
          {
            "name": "AWS::IAM::Role->AWS::IAM::Policy",
            "relation": "Is attached to Policy",
            "source": "Node2",
            "target": "Node1"
          }
        ],
        "nodes": [
          {"name": "Node0", "type": "AWS::Lambda::Function"},
          {"name": "Node1", "type": "AWS::IAM::Policy"},
          {"name": "Node2", "type": "AWS::IAM::Role"}
        ]
      },
      "type": "AWS::Lambda::Function"
    }
  ],
  "severity": "Medium",
  "severity_id": 3,
  "status": "New",
  "status_id": 1,
  "time_dt": "2026-07-08T01:35:39.661Z",
  "type_name": "Detection Finding: Create"
}

class_name / types

class_nameDetection Finding固定です。finding_info.typesExposureが含まれることで、このfindingが露出カテゴリであると識別できます。より詳細な分類(Exposure/Potential Privilege Escalation/Valid Cloud Credentials等)もここに格納されています。

finding_info.desc / title

findingの説明文(desc)とタイトルです。何が起きうるか、なぜリスクなのかが自然言語で記述されています。この例では「Lambda関数が誰でも呼び出せる状態にあり、不正アクセスや権限昇格につながりうる」と説明されています。

finding_info.related_events / traits

この露出に関連付けられたイベントや検出結果の情報です。ドキュメント上、traitsContributing Trait(直接的に露出を構成する要因)やContextual Trait(リスクの文脈情報)として扱われます。この例ではLambda.1コントロールの違反がContributing Traitとして関連付けられています。

severity / likelihood / impact

重大度はLikelihood(発生可能性)× Impact(影響度)のリスクマトリクスで算出されます。この例ではLikelihoodがHigh(誰でも呼び出し可能)、ImpactがLow(権限が限定的)で、総合severityはMediumです。

remediation

findingから修復手順のドキュメントに直接アクセスできます。

resources / resource_relationship

対象リソースの情報と、関連リソースのグラフ構造です。Lambda関数 → IAM Role → IAM Policyのような関連が可視化されており、影響範囲を把握する材料になります。

ダッシュボードでの見え方

マネジメントコンソールではSecurity Hub →「露出」メニューから確認できます。CLIで取得した情報と同等の内容がGUIで確認できます。

Security Hub 露出ダッシュボード

Lambda Exposure Finding 詳細

対象リソースとトレイトタイプ

Exposure Findingsが対応するリソースタイプは現時点で以下の9種類です。

リソースタイプ
AWS::AutoScaling::AutoScalingGroup
AWS::DynamoDB::Table
AWS::EC2::Instance
AWS::ECS::Service
AWS::EKS::Nodegroup
AWS::IAM::Role
AWS::Lambda::Function
AWS::RDS::DBInstance
AWS::S3::Bucket

https://docs.aws.amazon.com/securityhub/latest/userguide/exposure-findings-supported-resources.html

また、各findingを構成するトレイト(特性)は以下の6カテゴリに分類されます。

カテゴリ 概要
Assumability ロールの引き受け可能性
Impact 影響度を加減する要因(権限の広さ等)
Misconfiguration 設定ミス(公開設定、保護無効等)
Reachability ネットワーク到達可能性
Sensitive Data 機密データの存在
Vulnerability ソフトウェアの脆弱性

https://docs.aws.amazon.com/securityhub/latest/userguide/exposure-findings-supported-traits.html

今回検出された実例と対応付けると、以下のようになります。

  • Lambda関数(Medium): Reachability(Publicly Invocable)がContributing Trait。Impactは「limited effective permissions」でLow。結果としてLikelihood High × Impact Low = Medium
  • DynamoDBテーブル(Low): Misconfiguration(削除保護無効)。この検出結果ではImpactが算出されず(一覧表の「—」)、Likelihoodのみでseverityが決まるため、Likelihood Low = severity Low

重大度は以下のリスクマトリクスで決定されます。severityはLikelihoodとImpactの組み合わせで決まります。Impactが算出されないケースでは、Likelihoodのみでseverityが決まります。

Likelihood \ Impact Low Medium High
Low Low Low Medium
Moderate Low Medium High
High Medium High Critical
Very High High Critical Critical

https://docs.aws.amazon.com/securityhub/latest/userguide/exposure-findings-severity.html

まとめ

Security Hubの「露出(Exposure)」検出結果は、単にリソースがパブリックかどうかだけでなく、設定ミスや権限に関する文脈など、1つ以上のシグナルを関連付けて潜在的なリスクを提示してくれる機能でした。今回の検証では、Lambda関数のパブリック呼び出し設定やDynamoDBテーブルの削除保護無効が検出され、従来のコントロール単位の検出結果とは異なる観点でリスクを確認できました。

この記事をシェアする

AWSのお困り事はクラスメソッドへ

関連記事