AWS Security Hubの「露出」検出結果で潜在リスクを可視化してみた
はじめに
2026年7月6日、AWSから以下のアナウンスが公開されました。
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日間の無料トライアルがあるため、既存環境でも気軽に試せます。
検証内容
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_nameはDetection Finding固定です。finding_info.typesにExposureが含まれることで、このfindingが露出カテゴリであると識別できます。より詳細な分類(Exposure/Potential Privilege Escalation/Valid Cloud Credentials等)もここに格納されています。
finding_info.desc / title
findingの説明文(desc)とタイトルです。何が起きうるか、なぜリスクなのかが自然言語で記述されています。この例では「Lambda関数が誰でも呼び出せる状態にあり、不正アクセスや権限昇格につながりうる」と説明されています。
finding_info.related_events / traits
この露出に関連付けられたイベントや検出結果の情報です。ドキュメント上、traitsはContributing 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で確認できます。


対象リソースとトレイトタイプ
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 |
また、各findingを構成するトレイト(特性)は以下の6カテゴリに分類されます。
| カテゴリ | 概要 |
|---|---|
| Assumability | ロールの引き受け可能性 |
| Impact | 影響度を加減する要因(権限の広さ等) |
| Misconfiguration | 設定ミス(公開設定、保護無効等) |
| Reachability | ネットワーク到達可能性 |
| Sensitive Data | 機密データの存在 |
| Vulnerability | ソフトウェアの脆弱性 |
今回検出された実例と対応付けると、以下のようになります。
- 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 |
まとめ
Security Hubの「露出(Exposure)」検出結果は、単にリソースがパブリックかどうかだけでなく、設定ミスや権限に関する文脈など、1つ以上のシグナルを関連付けて潜在的なリスクを提示してくれる機能でした。今回の検証では、Lambda関数のパブリック呼び出し設定やDynamoDBテーブルの削除保護無効が検出され、従来のコントロール単位の検出結果とは異なる観点でリスクを確認できました。









