【小ネタ】 EventBridge のターゲット実行ロールで、特定インスタンス指定からタグ条件指定に変更しても動作するか確認してみた

【小ネタ】 EventBridge のターゲット実行ロールで、特定インスタンス指定からタグ条件指定に変更しても動作するか確認してみた

2026.05.05

はじめに

テクニカルサポートの 片方 です。
今回は小ネタとして、EventBridge のターゲット実行ロールにおいて、EC2 インスタンスの操作対象に対する許可を「特定インスタンス指定」から「タグ条件付き」に変更しても意図どおり動作するかを検証しました。
検証では S3 イベントをトリガーとして EventBridge から EC2 インスタンスを停止する構成を用意し、実行ロールの IAM ポリシーをタグ条件付きに変更した場合の挙動を確認しました。

09

先に結論から

EventBridge ルールのターゲットを特定 EC2 インスタンスのままにした状態で、ターゲット実行ロールの IAM ポリシーをタグ条件付きに変更しても動作しました。
また、今回の構成では EventBridge ルールに設定したターゲット EC2 インスタンスのみが StopInstances の対象になります。

事前準備

今回は検証として、同じタグを付与した 2 台の EC2 インスタンスを起動しました。

  • i-06eb6366bb0e47eb7
  • i-032fe21f5f0def84a

両 EC2 インスタンスには、EventBridge=true タグを付与しています。

01

今回の検証では、S3 バケットにオブジェクトがアップロードされたことを契機に、EventBridge から EC2 インスタンスを停止する構成を用意しました。
なお、EventBridge ルールのターゲットとして設定しているインスタンスは i-06eb6366bb0e47eb7 のみです。

02
03
04

https://docs.aws.amazon.com/ja_jp/eventbridge/latest/userguide/eb-create-rule-wizard.html

やってみた

事前準備ができたので、[この特定のリソースについて新しいロールを作成] で作成された実行ロールを確認します。
検証時に EventBridge コンソールで作成された実行ロールのポリシーは以下でした。

作成された実行ロールのポリシー例
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "CloudWatchEventsBuiltInTargetExecutionAccess",
            "Effect": "Allow",
            "Action": [
                "ec2:RebootInstances",
                "ec2:StopInstances",
                "ec2:TerminateInstances"
            ],
            "Resource": [
                "arn:aws:ec2:ap-northeast-1:xxxxxxxxxxxx:instance/i-06eb6366bb0e47eb7"
            ]
        }
    ]
}

こちらの EventBridge 実行ロールを、EC2 インスタンスのタグに基づいて許可する IAM ポリシーに変更します。

タグ条件付きの IAM ポリシー
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "CloudWatchEventsBuiltInTargetExecutionAccess",
      "Effect": "Allow",
      "Action": [
        "ec2:RebootInstances",
        "ec2:StopInstances",
        "ec2:TerminateInstances"
      ],
      "Resource": "arn:aws:ec2:ap-northeast-1:xxxxxxxxxxxx:instance/*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/EventBridge": "true"
        }
      }
    }
  ]
}

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/access_tags.html

05

確認してみた

準備が完了しましたので、S3 バケットに適当なオブジェクトをアップロードして確認します。

06

その後、すぐに対象 EC2 インスタンスのみが停止済みであることを確認できました。

07

念のため CloudTrail を確認し、誰が実行したかを確認します。
以下の CloudTrail から、EventBridge が実行ロールを引き受けて StopInstances を実行したことを確認できました。

08

※ マスクします

該当 CloudTrail イベント履歴 StopInstances
{
    "eventVersion": "1.11",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AxxxxxxxxxxxxTYWH2:980xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "arn": "arn:aws:sts::xxxxxxxxxxx:assumed-role/Amazon_EventBridge_Invoke_Action_On_EC2_Instance_1971188022/980a2836a1f83f90b18dde48900d1b7b",
        "accountId": "xxxxxxxxxxx",
        "accessKeyId": "xxxxxxxxxxxxxxxxxx",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "ARxxxxxxxxxxxH2",
                "arn": "arn:aws:iam::xxxxxxxxxxx:role/service-role/Amazon_EventBridge_Invoke_Action_On_EC2_Instance_1971188022",
                "accountId": "xxxxxxxxxxx",
                "userName": "Amazon_EventBridge_Invoke_Action_On_EC2_Instance_1971188022"
            },
            "attributes": {
                "creationDate": "2026-05-04T06:11:16Z",
                "mfaAuthenticated": "false"
            }
        },
        "invokedBy": "events.amazonaws.com"
    },
    "eventTime": "2026-05-04T06:11:17Z",
    "eventSource": "ec2.amazonaws.com",
    "eventName": "StopInstances",
    "awsRegion": "ap-northeast-1",
    "sourceIPAddress": "events.amazonaws.com",
    "userAgent": "events.amazonaws.com",
    "requestParameters": {
        "instancesSet": {
            "items": [
                {
                    "instanceId": "i-06eb6366bb0e47eb7"
                }
            ]
        },
        "force": false,
        "skipOsShutdown": false
    },
    "responseElements": {
        "requestId": "55c1d8c0-xxxxxxxxxxxxxxxxxxxxxx",
        "instancesSet": {
            "items": [
                {
                    "instanceId": "i-06eb6366bb0e47eb7",
                    "currentState": {
                        "code": 64,
                        "name": "stopping"
                    },
                    "previousState": {
                        "code": 16,
                        "name": "running"
                    }
                }
            ]
        }
    },
    "requestID": "55c1d8c0-xxxxxxxxxxxxxxxxxxxxxx",
    "eventID": "6c9a6683-xxxxxxxxxxxxxxxxxxxxxx",
    "readOnly": false,
    "resources": [
        {
            "accountId": "xxxxxxxxxxx",
            "type": "AWS::EC2::Instance",
            "ARN": "arn:aws:ec2:ap-northeast-1:xxxxxxxxxxx:instance/i-06eb6366bb0e47eb7"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "xxxxxxxxxxx",
    "eventCategory": "Management"
}

まとめ

本ブログが同様の検証を行う際の参考になれば幸いです。

参考資料

クラスメソッドオペレーションズ株式会社について

クラスメソッドグループのオペレーション企業です。
運用・保守開発・サポート・情シス・バックオフィスの専門チームが、IT・AIをフル活用した「しくみ」を通じて、お客様の業務代行から課題解決や高付加価値サービスまでを提供するエキスパート集団です。
当社は様々な職種でメンバーを募集しています。
「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、クラスメソッドオペレーションズ株式会社 コーポレートサイト をぜひご覧ください。※2026年1月 アノテーション㈱から社名変更しました

この記事をシェアする

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

関連記事