こちらの投稿は2025 Japan AWS Jr.Championsの有志メンバーで作成した『30日間で主要AWSサービスを構築できるようになる』をテーマにした初学者向けのハンズオン問題集のDAY20になります!
問題集の趣旨や作成に至るまでの経緯は以下の記事をご覧いただければと思います。
https://qiita.com/satosato_kozakana/items/446971c2deca7e27d0aa
📝 概要
| 項目 | 内容 |
|---|---|
| 所要時間 | 約45分 |
| メインサービス | AWS Config ,AWS Security Hub ,IAM Access Analyzer ,Amazon GuardDuty |
| 学べること | セキュリティサービスに関する基礎知識 |
| 想定費用 | 約60 円(※有効期間、実行回数、30日無料トライアル利用により変動します。) |
⚠️ 注意:以下のリソースを削除し忘れると課金が継続します。
🎯 課題内容
AWSのセキュリティサービスの有効化を行い、Security Hubで各サービスの検出結果(Finding)の集約・通知を行います。
前提として、本ハンズオンは東京リージョン(ap-northeast-1)で実施するものとします。また、ハンズオンで作成・設定するサービスに関しては、マネジメントコンソール上で実装を行う想定とします。
📊 アーキテクチャ図
🔧 実装機能
- セキュリティサービスの有効化
- AWS Config
- IAM Access Analyzer
- Amazon GuardDuty
- AWS Security Hub CSPMの有効化と他セキュリティサービスとの統合
- Amazon EventBrdigeによるSecurity Hubイベントのキャッチ
- イベントパターン
- レコードの状態:
ACTIVE - 重要度の高い検出結果:
CRITICAL,HIGH - ワークフローステータス:
NEW
- レコードの状態:
- イベントパターン
- 入力トランスフォーマーによる通知内容の整形
- Amazon SNSによるメール通知の実装
💡 実装のヒント
セキュリティサービスの展開リージョン
本ハンズオンは 東京(ap-northeast-1)リージョンを前提に実施します。扱う AWS Config / IAM Access Analyzer / Amazon GuardDuty / AWS Security Hubはいずれもリージョナルサービスのため、有効化や設定変更の際は、コンソール右上のリージョンが東京(ap-northeast-1)リージョンになっているか必ず確認してください。セキュリティサービスの展開順
Security Hub CSPMは多くのセキュリティチェックでConfigの記録データを参照します。したがって、Security Hubを有効化する前に必ずConfigを有効化してください。Configが無効化のままSecurity Hubを有効化すると、一部チェックが評価されずステータスが「未評価」になる場合があります。SNSのサブスクリプション確認
SNS Topicにメールアドレスを登録したら、届くメールの件名 「Confirm subscription」 を必ず確認して承認してください。承認(有効化)を完了しない場合、以後のメール通知は届きません。EventBridgeの整形
メール本文を読みやすく整形して SNS に渡すために、EventBridgeの入力トランスフォーマーを利用します。入力トランスフォーマーはEventBridgeルールの作成の際に設定することができ、「入力パス」と「入力テンプレート」の定義が必要になります。参考:https://docs.aws.amazon.com/ja_jp/eventbridge/latest/userguide/eb-transform-target-input.html
✅ 完成後のチェックポイント
- サービス(Config / Access Analyzer / GuardDuty / Security Hub)が有効化されている
- Security Hubの検出結果を生成されると、SNS経由でメールが届く
- メール本文に タイトル、アカウントID、リージョン、重大度(Severity)、リソース、イベントの説明が記載されている
-
EventBridgeルールのメトリクス
MatchedEventsのカウント数が増加している - SNSトピックのステータスに確認済みが表示される
🧰 使用資材
以下、EventBridgeに関するサンプルになります。
オリジナルで作成しても良いですが、こちらのサンプルを使用してもOKです。
まずは、使用資材を見ずに実装にチャレンジしてみましょう!
EventBridgeイベントパターン
{
"source": ["aws.securityhub"],
"detail-type": ["Security Hub Findings - Imported"],
"detail": {
"findings": {
"RecordState": ["ACTIVE"],
"Severity": {
"Label": ["CRITICAL", "HIGH"]
},
"Workflow": {
"Status": ["NEW"]
}
}
}
}
EventBridge入力トランスフォーマーの入力パス
{
"title": "$.detail.findings[0].Title",
"severity": "$.detail.findings[0].Severity.Label",
"account": "$.account",
"region": "$.region",
"resource": "$.detail.findings[0].Resources",
"controlid": "$.detail.findings[0].Compliance.SecurityControlId",
"description": "$.detail.findings[0].Description"
}
EventBridge入力トランスフォーマーの入力テンプレート
"Title: <title>"
"Severity: <severity>"
"Account: <account>"
"Region: <region>"
"Resource: <resource>"
"ControlID: <controlid>"
"Description: <description>"
🔗 リファレンスリンク
- AWS Configとは
- AWS Identity and Access Management Access Analyzerの使用
- AWS Security Hub CSPM の概要
- Amazon GuardDuty とは
- Amazon EventBridge 入力変換
🛠️ 解答・構築手順(クリックで開く)
解答と構築手順を見る
事前準備
1. 右上のリージョンを東京(ap-northeast-1)に切り替える
2. 通知を受け取るメールアドレスを用意する
✅ ステップ1:Configの有効化(※既に有効化済みの場合はスキップ)
1. Configのマネジメントコンソールを開く
Configが既に有効化されている(ダッシュボードが表示される)場合は、ステップ1をスキップします。

2. AWS Config のセットアップから「今すぐ始める」を押下する
3. デフォルト設定で有効化を行う
- 記録対象:カスタマイズ可能なオーバーライドのあるすべてのリソースタイプ
- マネージドルール:選択なし
4. Configが有効化されていることを確認する
ダッシュボードが表示されていることを確認します。
✅ ステップ2:IAM Access Analyzerの有効化
1. IAM Access Analyzerのマネジメントコンソールを開く
IAM Access Analyzerは、IAMのマネジメントコンソールのアクセスレポートからアクセスすることができます。
2. アナライザーを作成する
「アナライザーを作成」を押下します。
- 検出結果のタイプ:「Resource analysis - External access」
- 名前:
test-ExternalAccess-yyyymmdd(yyyymmddはハンズオン実施日を入力)
3. アナライザーが作成されたことを確認する
アナライザーの設定画面から、先ほど作成したアナライザーが表示されることを確認します。
✅ ステップ3:GuardDutyの有効化
1. GuardDutyのマネジメントコンソールを開く
「今すぐ始める」を押下します。
2. GuardDutyの有効化を行う
「GuardDutyを有効にする」を押下します。
3. GuardDutyが有効化されてることを確認する
要約が表示されていることを確認します。
✅ ステップ4:Security Hubの有効化
1. Security Hub CSPMのマネジメントコンソールを開く
Security Hubのコンソールから、左のタブのSecurity Hub CSPMを選択します。
2. Security Hub CSPMの有効化を行う
「Go to Security Hub CSPM」を押下します。
- セキュリティ基準
- AWS 基礎セキュリティのベストプラクティス v1.0.0 を有効にする
- CIS AWS Foundations Benchmark v1.2.0 を有効にする
⚠️ 注意点
Security Hub有効化の前にConfigの有効化が必要です。
Configの有効化ができていない場合は、ステップ1を確認してください。
Security Hub有効時には、以下のようにConfigが事前に有効化されているか確認されます。
2. 統合の確認を行う
Security Hubの有効化が完了すると、自動的にセキュリティサービスの統合が行われます。今回は、集約対象とするConfig,IAM Access Analyzer,GuardDutyのステータスが「結果を受け入れます」という表示になっているか確認を行います。
✅ ステップ5:SNS Topicの作成
1. SNS Topicを作成
「トピックの作成」を押下します。
- タイプ:スタンダード
- 名前:
SecurityHubFindingTopic-yyyymmdd - 表示名 - オプション:
SecurityHubFindingTopic-yyyymmdd- ここで指定する表示名は、メール通知する際のメール送信元として表示されます。
- 他オプション:デフォルト
2. サブスクリプションの作成
作成したトピック(SecurityHubFindingTopic-yyyymmdd)を選択し、「サブスクリプションの作成」を行う
- トピック ARN:作成したSNS TopicのARN
- プロトコル:Eメール
- エンドポイント:準備したメールアドレス(※動作確認の際の通知先)
- 他オプション:デフォルト
3. メールにて、サブスクリプションの確認を行う
SNS Topicにメールアドレスの登録が完了すると、登録したメールアドレス宛にAWSからサブスクリプションの確認のメール(件名:AWS Notification - Subscription Confirmation)が送信されます。メールの本文に記載されているConfirm subscriptionのURLをクリックすることで、メッセージの受信を開始することができます。
4. サブスクリプションのステータスが確認済みになっていることを確認する
✅ ステップ6:EventBridgeルールの作成
1. EventBridgeのマネジメントコンソールを開く
バス > ルールから、EventBridgeルールの作成を行います。
2. ルールの詳細を定義
ルールの詳細を定義します。
- 名前:
test-rule-detect-securityhub-findings-yyyymmdd - イベントバス:default
- ルールタイプ:イベントパターンを持つルール
3. イベントパターンを構築
イベントパターンを構築します。
- イベントソース:AWS イベントまたは EventBridge パートナーイベント
- イベントパターン:パターンフォームを使用する
EventBridgeイベントパターン
{
"source": ["aws.securityhub"],
"detail-type": ["Security Hub Findings - Imported"],
"detail": {
"findings": {
"RecordState": ["ACTIVE"],
"Severity": {
"Label": ["CRITICAL", "HIGH"]
},
"Workflow": {
"Status": ["NEW"]
}
}
}
}
4. ターゲットを選択
入力トランスフォーマーとは、検知したイベントのJSONから必要項目だけ抜き出し、ターゲット向けのペイロードを即席で作る仕組みを指します。必要項目を抜き出す処理を「入力パス」で定義し、ターゲット向けのペイロードの組み立ては「入力テンプレート」で定義します。
- ターゲット:AWS のサービス
- ターゲットを選択:SNS トピック
- ターゲットの場所:このアカウントのターゲット
- トピック:
test-rule-detect-securityhub-findings-yyyymmdd - 許可:実行ロールを使用 (推奨)
- 実行ロール:この特定のリソースについて新しいロールを作成
- ロール名:デフォルト
- 追加設定
- ターゲット入力を設定:入力トランスフォーマー
- 「入力トランスフォーマーを設定」から以下を入力
- 入力パス
- 入力テンプレート
入力トランスフォーマーの入力パス
{
"title": "$.detail.findings[0].Title",
"severity": "$.detail.findings[0].Severity.Label",
"account": "$.account",
"region": "$.region",
"resource": "$.detail.findings[0].Resources",
"controlid": "$.detail.findings[0].Compliance.SecurityControlId",
"description": "$.detail.findings[0].Description"
}
入力トランスフォーマーの入力テンプレート
"Title: <title>"
"Severity: <severity>"
"Account: <account>"
"Region: <region>"
"Resource: <resource>"
"ControlID: <controlid>"
"Description: <description>"
✅ ステップ8:動作確認
最後に、Security HubとGuardDutyで通知確認を行います。IAM Access Analyzerの場合は、重大度HIGH以下が多く、今回ハンズオンで作成したEventBridgeのパターンではキャッチできないため、割愛します。Secuirty Hubと統合はされているため、試しに外部アクセスを許可したIAMロールを作成してみるとSecurity Hubの検出結果で確認することができます。
Security Hubの動作確認
1. 検証のため、セキュリティグループでフルオープンを作成
- セキュリティグループ名:
test-securityhub-finding-yyyymmdd - 説明:
- インバウンドルール
- タイプ:カスタムTCP
- ソース:
0.0.0.0/0
⚠️ 注意:作成したセキュリティグループをインスタンスにアタッチしないように注意してください
フルオープンのセキュリティグループを作成するため、誤ってインスタンスにアタッチしないようにしてください。
また、検証後は該当のセキュリティグループをすぐに削除するようにしてください。
2. 動作確認
数分後、SecurityHubの検出結果に追加され、メール通知がされます。
また、EventBridgeルールのメトリクスMatchedEventsのカウント数が増加していることを確認します。
GuardDutyの動作確認
1. 検出結果サンプルの生成
GuardDutyの設定から、「検出結果のサンプル」から「検出結果サンプルの生成」を押下します。
⚠️ 注意:検出結果サンプルの生成は150件くらいサンプルが生成されるため、メール通知が150件飛ぶことになります。
動作確認の際はご注意ください。
2. 動作確認
数分後、SecurityHubの検出結果に追加され、メール通知がされます。
🧹 片付け(リソース削除)
- Configの無効化
- IAM Access Analyzerの無効化
- GuardDutyの無効化
- SecurityHubの無効化
- SNS Topicの削除
- EventBridgeルールの削除
🏁 おつかれさまでした!
この課題ではConfig・IAM Access Analyzer・GuardDutyを有効化し、Security Hubに集約した結果をSNS経由で通知する一連の流れを通して、クラウドネイティブな監視・検出・通知パイプラインの設計と運用の基礎が身につきます。次回は応用編として、クロスアカウント/クロスリージョン転送、Slack などの外部通知連携、CloudFormationによるIaC化にも挑戦してみましょう!





















