SNS.4
概要
SNS.4 は SNS トピックのアクセスポリシーがパブリックアクセス(Principal: "*" で Condition による制限なし)を許可している場合に FAILED となる Security Hub CSPM コントロール。本記事では、Security Hub finding を EventBridge でフィルタし、カスタム SSM Automation ランブックを起動してトピックポリシーを default policy(自アカウントのみ許可)に戻す構成を検証する。
スナップショット系自動修復との差分
RDS.1 自動修復 / DocumentDB.3 自動修復 / Neptune.3 自動修復 は「属性値(パブリック共有 ON/OFF)の切り替え」を扱うのに対し、SNS.4 は「アクセスポリシー JSON 全体の上書き」を行う。修復処理は sns:SetTopicAttributes で Policy 属性を default policy に置き換える。
| 項目 | RDS.1 / DocumentDB.3 / Neptune.3 | SNS.4(本記事) |
|---|---|---|
| 対象 API | rds:Modify*SnapshotAttribute | sns:SetTopicAttributes |
| 修復操作 | restore 属性から all を削除 | Policy 属性を default policy に置き換え |
| Security Hub finding の Resource Type | AwsRdsDbSnapshot / AwsRdsDbClusterSnapshot | AwsSnsTopic |
| 修復の破壊性 | 低(パブリック共有解除のみ) | 高(既存ポリシー全体を上書き、後述) |
既存カスタムポリシーの上書きリスク: 本修復は sns:SetTopicAttributes でアクセスポリシー全体を default policy に上書きする。クロスアカウント許可、IP 制限、カスタム Condition などを設定していたトピックは、修復によってそれらすべてが失われる。本番運用前に SNS.4 finding が出ているトピックのポリシーを棚卸しし、必要なカスタム設定があれば修復前に退避する運用を推奨する。
なお、ハードコードする default policy の Action リストは検証時点(2026 年 5 月)の標準 8 アクション。AWS が将来新アクションを追加しても本ランブックは追従しないため、新アクションが必要な場合はランブックの更新が必要。
自動修復の構成
SNS トピックポリシーがパブリック化(set-topic-attributes で Principal: * かつ Condition なしを設定)
→ Config ルール securityhub-sns-topic-no-public-access-<サフィックス> が NON_COMPLIANT
→ Security Hub finding SNS.4 が FAILED
→ EventBridge ルールが finding をフィルタ(Input Transformer でトピック ARN とアカウント ID を抽出)
→ カスタム SSM Automation ランブックを起動
→ sns:SetTopicAttributes で Policy 属性を default policy に置き換え
→ トピックポリシーが「Principal: * + Condition: SourceOwner = 自アカウント」に戻る
→ Config 再評価 → COMPLIANT
→ Security Hub finding → PASSEDSecurity Hub Findings - Imported イベントは発行されないため、EventBridge の発火タイミングは「コンプライアンス状態の変化点」に限られる。本番運用では新規パブリック化時の PASSED → FAILED 変化で発火するため問題にならないが、本記事の検証では FAILED finding の観測タイミングを確保するために EventBridge を一時的に DISABLED にしているため、後述のステップ 6.3〜6.6 で「PASSED → FAILED」の状態変化を意図的に起こしている。詳細は RDS.1 自動修復の構成 の callout 参照。使用するランブック
カスタムランブック SnsTopicResetPolicy を作成する。AWS マネージドの修復ドキュメントは存在しない。
| パラメータ | 型 | 役割 |
|---|---|---|
TopicArn | String | 修復対象のトピック ARN |
AccountId | String | default policy の AWS:SourceOwner Condition に設定するアカウント ID |
AutomationAssumeRole | ARN | SSM Automation が sns:SetTopicAttributes を呼ぶための IAM ロール |
aws:executeAwsApi で sns:SetTopicAttributes を呼び、AttributeValue にパラメータ展開した default policy JSON を渡す単一ステップ構成。
Security Hub finding 構造
SNS.4 の finding には Resources[0].Details.AwsSnsTopic に TopicName などが含まれるが、TopicArn フィールドは含まれない(ASFF AwsSns リソース で確認)。代わりに Resources[0].Id がトピック ARN(例: arn:aws:sns:ap-northeast-1:<アカウント ID>:<トピック名>)になっている。アカウント ID は findings[0].AwsAccountId フィールドから取得できる。
{
"AwsAccountId": "<アカウント ID>",
"Compliance": {"SecurityControlId": "SNS.4", "Status": "FAILED"},
"Workflow": {"Status": "NEW"},
"Resources": [{
"Type": "AwsSnsTopic",
"Id": "arn:aws:sns:<リージョン>:<アカウント ID>:<トピック名>",
"Details": {
"AwsSnsTopic": {
"TopicName": "<トピック名>",
"Owner": "<アカウント ID>",
...
}
}
}]
}EventBridge Input Transformer では Resources[0].Id(トピック ARN)と findings[0].AwsAccountId(アカウント ID)の 2 つを抽出してランブックに渡す。
検証環境
本記事のコマンドは、--profile 指定がない場合は Workload アカウントで実行する。事前に export AWS_PROFILE=Workload でデフォルトを設定しておくと便利。
結果
| 検証項目 | 結果 |
|---|---|
| カスタムランブック作成と動作確認 | ✓ Active 即座、aws:executeAwsApi の {{ }} 展開が JSON 文字列内で正常動作 |
| Security Hub finding(FAILED)から EventBridge へのトリガー | ✓ 状態変化(PASSED → FAILED)で発火確認 |
| Input Transformer でトピック ARN とアカウント ID 抽出 | ✓ Resources[0].Id / AwsAccountId から取得 |
| カスタムランブック起動と修復実行 | ✓ Status: Success |
| トピックポリシーが default policy に置き換わる | ✓ Sid: __default_statement_ID、Condition: SourceOwner 確認 |
| Config / Security Hub PASSED 復帰 | ✓ Compliance: PASSED, Workflow: RESOLVED |
実測時間:
- SNS トピック作成 → Config 発見 → Security Hub finding 反映: 約 15 分
- default policy 設定 → PASSED 反映: 約 10 分
- 再パブリック化 → EventBridge 発火 → SSM Automation 実行完了: 約 1.5 分
- 修復完了 → Security Hub PASSED 復帰: 約 2 分
検証の流れ
flowchart LR
A[1. 事前確認] --> B[2. カスタムランブック作成]
B --> C[3. 修復用 IAM ロール作成]
C --> D[4. EventBridge ルール作成<br>DISABLED 状態]
D --> E[5. SNS トピック作成]
E --> F[6.1 パブリック化<br>6.2 FAILED 観測]
F --> G[6.3 default policy に戻す<br>6.4 PASSED 観測]
G --> H[6.5 EventBridge 有効化<br>6.6 再パブリック化]
H --> I[7. 自動修復実行確認]
I --> J[8. PASSED 復帰確認]
J --> K[9. クリーンアップ]
1. 事前確認
Config ルールの存在確認
aws configservice describe-config-rules \
--query "ConfigRules[?contains(ConfigRuleName, 'sns-topic-no-public-access')].ConfigRuleName" \
--output text \
--region ap-northeast-1securityhub-sns-topic-no-public-access-<サフィックス>既存の SSM ドキュメント確認
aws ssm list-documents \
--filters Key=Owner,Values=Self Key=Name,Values=SnsTopicResetPolicy \
--region ap-northeast-1 \
--query 'DocumentIdentifiers[].Name' \
--output json[]既存の EventBridge ルール確認
aws events list-rules \
--name-prefix "sns-4-auto-remediation" \
--region ap-northeast-1 \
--query 'Rules[].Name' \
--output json[]既存の IAM ロール確認
aws iam list-roles \
--query "Roles[?starts_with(RoleName, 'sns-4-')].RoleName" \
--output json[]2. カスタムランブック作成
トピックポリシーを default policy に上書きする SSM Automation ドキュメントを作成する。
cat <<'EOF' > /tmp/sns-topic-reset-policy.yaml
schemaVersion: "0.3"
description: "Reset SNS topic policy to default (revoke public access)"
parameters:
TopicArn:
type: String
description: "(Required) The ARN of the SNS topic whose policy is reset to default."
AccountId:
type: String
description: "(Required) The account ID for the default policy AWS:SourceOwner condition."
AutomationAssumeRole:
type: AWS::IAM::Role::Arn
description: "(Required) The IAM role ARN that the runbook assumes."
assumeRole: "{{ AutomationAssumeRole }}"
mainSteps:
- name: ResetTopicPolicy
action: aws:executeAwsApi
inputs:
Service: sns
Api: SetTopicAttributes
TopicArn: "{{ TopicArn }}"
AttributeName: "Policy"
AttributeValue: '{"Version":"2008-10-17","Id":"__default_policy_ID","Statement":[{"Sid":"__default_statement_ID","Effect":"Allow","Principal":{"AWS":"*"},"Action":["SNS:GetTopicAttributes","SNS:SetTopicAttributes","SNS:AddPermission","SNS:RemovePermission","SNS:DeleteTopic","SNS:Subscribe","SNS:ListSubscriptionsByTopic","SNS:Publish"],"Resource":"{{ TopicArn }}","Condition":{"StringEquals":{"AWS:SourceOwner":"{{ AccountId }}"}}}]}'
EOF
aws ssm create-document \
--name SnsTopicResetPolicy \
--document-type Automation \
--document-format YAML \
--content file:///tmp/sns-topic-reset-policy.yaml \
--region ap-northeast-1 \
--query 'DocumentDescription.{Name:Name,Status:Status,DocumentType:DocumentType}' \
--output json{
"Name": "SnsTopicResetPolicy",
"Status": "Creating",
"DocumentType": "Automation"
}Active になるまで待機。
while true; do
STATUS=$(aws ssm describe-document \
--name SnsTopicResetPolicy \
--region ap-northeast-1 \
--query 'Document.Status' \
--output text)
echo "$(date '+%H:%M:%S') status: $STATUS"
case "$STATUS" in
Active) break ;;
Failed) echo "失敗"; break ;;
*) sleep 5 ;;
esac
doneHH:MM:SS status: Active3. 修復用 IAM ロール作成
3.1 SSM Automation 実行ロール
cat <<'EOF' > /tmp/ssm-automation-trust.json
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": {"Service": "ssm.amazonaws.com"},
"Action": "sts:AssumeRole"
}]
}
EOF
aws iam create-role \
--role-name sns-4-automation-role \
--assume-role-policy-document file:///tmp/ssm-automation-trust.json \
--query 'Role.Arn' \
--output textarn:aws:iam::<アカウント ID>:role/sns-4-automation-rolecat <<'EOF' > /tmp/sns-topic-policy.json
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": [
"sns:GetTopicAttributes",
"sns:SetTopicAttributes"
],
"Resource": "*"
}]
}
EOF
aws iam put-role-policy \
--role-name sns-4-automation-role \
--policy-name sns-topic-permission \
--policy-document file:///tmp/sns-topic-policy.json(出力なし)
3.2 EventBridge から SSM Automation 起動するロール
cat <<'EOF' > /tmp/eventbridge-trust.json
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": {"Service": "events.amazonaws.com"},
"Action": "sts:AssumeRole"
}]
}
EOF
aws iam create-role \
--role-name sns-4-eventbridge-role \
--assume-role-policy-document file:///tmp/eventbridge-trust.json \
--query 'Role.Arn' \
--output textarn:aws:iam::<アカウント ID>:role/sns-4-eventbridge-rolecat <<'EOF' > /tmp/eventbridge-policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ssm:StartAutomationExecution",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "arn:aws:iam::<アカウント ID>:role/sns-4-automation-role",
"Condition": {
"StringEquals": {
"iam:PassedToService": "ssm.amazonaws.com"
}
}
}
]
}
EOF
aws iam put-role-policy \
--role-name sns-4-eventbridge-role \
--policy-name eventbridge-ssm-automation \
--policy-document file:///tmp/eventbridge-policy.json(出力なし)
4. EventBridge ルール作成
4.1 ルール本体作成(DISABLED 状態)
Security Hub finding のうち、SNS.4 で FAILED かつ Workflow.Status が NEW のものをフィルタする。最初は DISABLED 状態で作成し、ステップ 6.5 で有効化する。
cat <<'EOF' > /tmp/eventbridge-pattern.json
{
"source": ["aws.securityhub"],
"detail-type": ["Security Hub Findings - Imported"],
"detail": {
"findings": {
"Compliance": {
"SecurityControlId": ["SNS.4"],
"Status": ["FAILED"]
},
"Workflow": {
"Status": ["NEW"]
},
"Resources": {
"Type": ["AwsSnsTopic"]
}
}
}
}
EOF
aws events put-rule \
--name sns-4-auto-remediation \
--event-pattern file:///tmp/eventbridge-pattern.json \
--state DISABLED \
--region ap-northeast-1 \
--query 'RuleArn' \
--output textarn:aws:events:ap-northeast-1:<アカウント ID>:rule/sns-4-auto-remediationルール作成後、EventPattern が正しいことを確認する。
aws events describe-rule \
--name sns-4-auto-remediation \
--region ap-northeast-1 \
--query '{State:State,EventPattern:EventPattern}' \
--output jsonState が DISABLED、EventPattern 内の SecurityControlId が SNS.4 であることを確認する。
4.2 ターゲット設定(Input Transformer 付き)
Resources[0].Id からトピック ARN、AwsAccountId からアカウント ID を抽出してカスタムランブックに渡す。
EVENTBRIDGE_ROLE_ARN=$(aws iam get-role \
--role-name sns-4-eventbridge-role \
--query 'Role.Arn' \
--output text)
AUTOMATION_ROLE_ARN=$(aws iam get-role \
--role-name sns-4-automation-role \
--query 'Role.Arn' \
--output text)
cat <<EOF > /tmp/eventbridge-target.json
[
{
"Id": "ssm-automation-target",
"Arn": "arn:aws:ssm:ap-northeast-1::automation-definition/SnsTopicResetPolicy:\$DEFAULT",
"RoleArn": "$EVENTBRIDGE_ROLE_ARN",
"InputTransformer": {
"InputPathsMap": {
"topicArn": "\$.detail.findings[0].Resources[0].Id",
"accountId": "\$.detail.findings[0].AwsAccountId"
},
"InputTemplate": "{\"TopicArn\": [\"<topicArn>\"], \"AccountId\": [\"<accountId>\"], \"AutomationAssumeRole\": [\"$AUTOMATION_ROLE_ARN\"]}"
}
}
]
EOF
aws events put-targets \
--rule sns-4-auto-remediation \
--targets file:///tmp/eventbridge-target.json \
--region ap-northeast-1{
"FailedEntryCount": 0,
"FailedEntries": []
}5. SNS トピック作成
aws sns create-topic \
--name sns4-remediation-test \
--region ap-northeast-1 \
--query 'TopicArn' \
--output textarn:aws:sns:ap-northeast-1:<アカウント ID>:sns4-remediation-test作成直後はデフォルトポリシーが設定されており、Security Hub では PASSED になる。
aws sns get-topic-attributes \
--topic-arn arn:aws:sns:ap-northeast-1:<アカウント ID>:sns4-remediation-test \
--region ap-northeast-1 \
--query 'Attributes.Policy' \
--output text | python3 -m json.tool{
"Version": "2008-10-17",
"Id": "__default_policy_ID",
"Statement": [
{
"Sid": "__default_statement_ID",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": [
"SNS:GetTopicAttributes",
"SNS:SetTopicAttributes",
"SNS:AddPermission",
"SNS:RemovePermission",
"SNS:DeleteTopic",
"SNS:Subscribe",
"SNS:ListSubscriptionsByTopic",
"SNS:Publish"
],
"Resource": "arn:aws:sns:ap-northeast-1:<アカウント ID>:sns4-remediation-test",
"Condition": {
"StringEquals": {
"AWS:SourceOwner": "<アカウント ID>"
}
}
}
]
}6. パブリック化と FAILED → 状態変化フロー
RDS.1 自動修復 と同様、Config 手動トリガーだけでは Security Hub finding の再 import が発火しないため、「PASSED → FAILED」の状態変化を起こして finding を新規 import させる必要がある。本番運用では EventBridge ルールが常時 ENABLED のため、新規パブリック化時の PASSED → FAILED で自然に発火する(本記事の検証手順は EventBridge を DISABLED で作成しているため、6.3〜6.6 の状態変化を起こす手順が必要となる)。詳細は RDS.1 自動修復の構成 の callout 参照。
6.1 トピックポリシーをパブリック化
Principal: "*" を含み Condition 制限のないポリシーを設定する。
cat <<EOF > /tmp/sns-public-policy.json
{
"Version": "2008-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": {"AWS": "*"},
"Action": "SNS:Publish",
"Resource": "arn:aws:sns:ap-northeast-1:<アカウント ID>:sns4-remediation-test"
}]
}
EOF
aws sns set-topic-attributes \
--topic-arn arn:aws:sns:ap-northeast-1:<アカウント ID>:sns4-remediation-test \
--attribute-name Policy \
--attribute-value file:///tmp/sns-public-policy.json \
--region ap-northeast-1(出力なし)
aws sns get-topic-attributes \
--topic-arn arn:aws:sns:ap-northeast-1:<アカウント ID>:sns4-remediation-test \
--region ap-northeast-1 \
--query 'Attributes.Policy' \
--output text | python3 -c "import json,sys; d=json.load(sys.stdin); s=d['Statement'][0]; print('Sid:', s.get('Sid','なし')); print('Condition:', s.get('Condition','なし'))"Sid: なし
Condition: なしSid も Condition も無いポリシーが設定された(パブリック状態)。
6.2 Security Hub finding が FAILED になることを確認
SNS は新規リソース作成から Config が認識するまで約 10 分のラグがある(SNS.4 の検証 で確認済み)。設定変更の反映を含めて十分待機する。
sleep 600
aws securityhub get-findings \
--filters '{"ComplianceSecurityControlId":[{"Comparison":"EQUALS","Value":"SNS.4"}],"ComplianceStatus":[{"Comparison":"EQUALS","Value":"FAILED"}],"ResourceId":[{"Comparison":"PREFIX","Value":"arn:aws:sns:ap-northeast-1:<アカウント ID>:sns4-remediation-test"}]}' \
--region ap-northeast-1 \
--query 'Findings[0].{Compliance:Compliance.Status,Workflow:Workflow.Status,TopicArn:Resources[0].Id,AwsAccountId:AwsAccountId}' \
--output json{
"Compliance": "FAILED",
"Workflow": "NEW",
"TopicArn": "arn:aws:sns:ap-northeast-1:<アカウント ID>:sns4-remediation-test",
"AwsAccountId": "<アカウント ID>"
}6.3 一度 default policy に戻して finding の状態を変化させる
トピックポリシーを default policy に戻す(修復後の状態と同じ)。
cat <<EOF > /tmp/sns-default-policy.json
{
"Version": "2008-10-17",
"Id": "__default_policy_ID",
"Statement": [{
"Sid": "__default_statement_ID",
"Effect": "Allow",
"Principal": {"AWS": "*"},
"Action": [
"SNS:GetTopicAttributes",
"SNS:SetTopicAttributes",
"SNS:AddPermission",
"SNS:RemovePermission",
"SNS:DeleteTopic",
"SNS:Subscribe",
"SNS:ListSubscriptionsByTopic",
"SNS:Publish"
],
"Resource": "arn:aws:sns:ap-northeast-1:<アカウント ID>:sns4-remediation-test",
"Condition": {
"StringEquals": {
"AWS:SourceOwner": "<アカウント ID>"
}
}
}]
}
EOF
aws sns set-topic-attributes \
--topic-arn arn:aws:sns:ap-northeast-1:<アカウント ID>:sns4-remediation-test \
--attribute-name Policy \
--attribute-value file:///tmp/sns-default-policy.json \
--region ap-northeast-1(出力なし)
6.4 PASSED 観測
sleep 600
aws securityhub get-findings \
--filters '{"ComplianceSecurityControlId":[{"Comparison":"EQUALS","Value":"SNS.4"}],"ResourceId":[{"Comparison":"PREFIX","Value":"arn:aws:sns:ap-northeast-1:<アカウント ID>:sns4-remediation-test"}]}' \
--region ap-northeast-1 \
--query 'Findings[0].{Compliance:Compliance.Status,Workflow:Workflow.Status}' \
--output json{
"Compliance": "PASSED",
"Workflow": "RESOLVED"
}6.5 EventBridge ルールを有効化
aws events enable-rule \
--name sns-4-auto-remediation \
--region ap-northeast-1
aws events describe-rule \
--name sns-4-auto-remediation \
--region ap-northeast-1 \
--query 'State'"ENABLED"6.6 再度パブリック化(自動修復の起動)
aws sns set-topic-attributes \
--topic-arn arn:aws:sns:ap-northeast-1:<アカウント ID>:sns4-remediation-test \
--attribute-name Policy \
--attribute-value file:///tmp/sns-public-policy.json \
--region ap-northeast-1(出力なし)
7. 自動修復の実行確認
EventBridge が finding を捕捉してカスタムランブックを起動するはず。
sleep 600
aws ssm describe-automation-executions \
--filters Key=DocumentNamePrefix,Values=SnsTopicResetPolicy \
--max-results 5 \
--region ap-northeast-1 \
--query 'AutomationExecutionMetadataList[].{Status:AutomationExecutionStatus,ExecutionStartTime:ExecutionStartTime,ExecutionId:AutomationExecutionId}' \
--output json[
{
"Status": "Success",
"ExecutionStartTime": "<開始時刻>",
"ExecutionId": "<実行 ID>"
}
]8. PASSED 復帰確認
8.1 トピックポリシーが default policy に戻ったことを確認
aws sns get-topic-attributes \
--topic-arn arn:aws:sns:ap-northeast-1:<アカウント ID>:sns4-remediation-test \
--region ap-northeast-1 \
--query 'Attributes.Policy' \
--output text | python3 -c "import json,sys; d=json.load(sys.stdin); s=d['Statement'][0]; print('Sid:', s.get('Sid')); print('Condition:', s.get('Condition'))"Sid: __default_statement_ID
Condition: {'StringEquals': {'AWS:SourceOwner': '<アカウント ID>'}}8.2 Security Hub finding 確認
sleep 120
aws securityhub get-findings \
--filters '{"ComplianceSecurityControlId":[{"Comparison":"EQUALS","Value":"SNS.4"}],"ResourceId":[{"Comparison":"PREFIX","Value":"arn:aws:sns:ap-northeast-1:<アカウント ID>:sns4-remediation-test"}]}' \
--region ap-northeast-1 \
--query 'Findings[0].{Compliance:Compliance.Status,Workflow:Workflow.Status,UpdatedAt:UpdatedAt}' \
--output json{
"Compliance": "PASSED",
"Workflow": "RESOLVED",
"UpdatedAt": "<更新時刻>"
}9. クリーンアップ
SNS トピック削除
aws sns delete-topic \
--topic-arn arn:aws:sns:ap-northeast-1:<アカウント ID>:sns4-remediation-test \
--region ap-northeast-1(出力なし)
EventBridge ルール削除
aws events remove-targets \
--rule sns-4-auto-remediation \
--ids ssm-automation-target \
--region ap-northeast-1 \
--query '{FailedEntryCount:FailedEntryCount,FailedEntries:FailedEntries}' \
--output json{
"FailedEntryCount": 0,
"FailedEntries": []
}aws events delete-rule \
--name sns-4-auto-remediation \
--region ap-northeast-1(出力なし)
IAM ロール削除
aws iam delete-role-policy \
--role-name sns-4-automation-role \
--policy-name sns-topic-permission
aws iam delete-role \
--role-name sns-4-automation-role
aws iam delete-role-policy \
--role-name sns-4-eventbridge-role \
--policy-name eventbridge-ssm-automation
aws iam delete-role \
--role-name sns-4-eventbridge-role(4 つとも出力なし)
aws iam list-roles \
--query "Roles[?starts_with(RoleName, 'sns-4-')].RoleName" \
--output json[]SSM Automation ドキュメント削除
aws ssm delete-document \
--name SnsTopicResetPolicy \
--region ap-northeast-1(出力なし)
参考
- SNS.4 SNS トピックアクセスポリシーがパブリックアクセスを許可していないこと - コントロール自体の検証
- 自動修復の概要 - 全コントロールの一覧と方針
- RDS.1 自動修復 - 同じ EventBridge → SSM Automation 構成(マネージドランブック使用)
- DocumentDB.3 自動修復 - 同じカスタムランブックパターン
- ASFF AwsSns リソース - finding 構造の公式ドキュメント