コンテンツにスキップ

SNS.4

検証日: 2026-05-24 / リージョン: ap-northeast-1

概要

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.3SNS.4(本記事)
対象 APIrds:Modify*SnapshotAttributesns:SetTopicAttributes
修復操作restore 属性から all を削除Policy 属性を default policy に置き換え
Security Hub finding の Resource TypeAwsRdsDbSnapshot / AwsRdsDbClusterSnapshotAwsSnsTopic
修復の破壊性低(パブリック共有解除のみ)高(既存ポリシー全体を上書き、後述)

既存カスタムポリシーの上書きリスク: 本修復は 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 → PASSED
EventBridge 発火タイミングの注意: Security Hub は Config の評価結果が変化した時点で finding を発行・更新する。同じ状態(FAILED → FAILED)が続く場合、Security Hub Findings - Imported イベントは発行されないため、EventBridge の発火タイミングは「コンプライアンス状態の変化点」に限られる。本番運用では新規パブリック化時の PASSED → FAILED 変化で発火するため問題にならないが、本記事の検証では FAILED finding の観測タイミングを確保するために EventBridge を一時的に DISABLED にしているため、後述のステップ 6.3〜6.6 で「PASSED → FAILED」の状態変化を意図的に起こしている。詳細は RDS.1 自動修復の構成 の callout 参照。

使用するランブック

カスタムランブック SnsTopicResetPolicy を作成する。AWS マネージドの修復ドキュメントは存在しない。

パラメータ役割
TopicArnString修復対象のトピック ARN
AccountIdStringdefault policy の AWS:SourceOwner Condition に設定するアカウント ID
AutomationAssumeRoleARNSSM Automation が sns:SetTopicAttributes を呼ぶための IAM ロール

aws:executeAwsApisns:SetTopicAttributes を呼び、AttributeValue にパラメータ展開した default policy JSON を渡す単一ステップ構成。

Security Hub finding 構造

SNS.4 の finding には Resources[0].Details.AwsSnsTopicTopicName などが含まれるが、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_IDCondition: 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-1
securityhub-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
done
HH:MM:SS status: Active

3. 修復用 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 text
arn:aws:iam::<アカウント ID>:role/sns-4-automation-role
cat <<'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 text
arn:aws:iam::<アカウント ID>:role/sns-4-eventbridge-role
cat <<'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 text
arn: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 json

State が DISABLED、EventPattern 内の SecurityControlIdSNS.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 text
arn: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: なし

SidCondition も無いポリシーが設定された(パブリック状態)。

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

(出力なし)

参考

Amazonアソシエイトリンク