ENGINEER BLOG ENGINEER BLOG
  • 公開日
  • 最終更新日

【EventBridge】スケジューラの IAM ロール権限を厳格化

この記事を共有する

目次

はじめに

本記事は 【EventBridge】EC2 の停止をスケジュールする設定手順 の内容を深掘りした記事です。
Amazon EventBridge スケジューラ(以下、「EventBridge スケジューラ」)が使用する IAM ポリシーの許可を厳格化する手段を説明します。
必要以上に許可権限を与えてしまうと、想定外の操作が実行される危険性があります。

構成図

EC2 インスタンス(以下、「インスタンス」)を定期的に停止する構成は、以下のとおりです。

ここで使用している IAM ロールの許可を厳格化します。

現在の設定

許可ポリシー

IAM ロールにアタッチされている IAM ポリシーには、以下を設定しています。
"Resource"の固有情報は {Region}:{Account} に置き換えています。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "ec2:StopInstances",
            "Resource": "arn:aws:ec2:{Region}:{Account}:instance/*"
        }
    ]
}

"Action"は必要な"ec2:StopInstances"のみに絞っています。
一方で"Resource"は、指定リージョン・アカウントのすべてのインスタンスを許可しています。
意図しないインスタンスの停止を防ぐため、"Resource"をより厳格に指定します。

信頼ポリシー

IAM ロールの「信頼ポリシー」には、以下を設定しています。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Statement1",
            "Effect": "Allow",
            "Principal": {
                "Service": "scheduler.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

"Principal"は EventBridge スケジューラのサービスを指定しています。
この IAM ポリシーを使用できる EventBridge スケジューラをさらに制限します。

修正後の設定

許可ポリシー

対象インスタンスの数にあわせて、IAM ポリシーを以下のように変更します。

インスタンスが 1 つ

"Resource"に対象インスタンスの ARN を指定します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "ec2:StopInstances",
            "Resource": "arn:aws:ec2:{Region}:{Account}:instance/i-xxxxxxxxxxxxxxxxx"
        }
    ]
}

インスタンスが複数(ARN 指定)

"Resource"に配列で複数のインスタンス ARN を指定できます¹。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "ec2:StopInstances",
            "Resource": [
                "arn:aws:ec2:{Region}:{Account}:instance/i-xxxxxxxxxxxxxxxxx",
                "arn:aws:ec2:{Region}:{Account}:instance/i-xxxxxxxxxxxxxxxxx"
            ]
        }
    ]
}

ただしインスタンスが多数ある場合、IAM ポリシーに対象 ARN を全て記載するのは非効率です。
次に説明するとおり、インスタンスに付与されたタグを使用することで、包括的に指定が可能です。

インスタンスが複数(タグ指定)

IAM ポリシーでは、タグを使用して対象リソースへのアクセスを制御できます²。
以下、タグを使用した設定例を記載します。

  • タグ「System」が「test」の インスタンスのみを対象
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "ec2:StopInstances",
            "Resource": "arn:aws:ec2:{Region}:{Account}:instance/*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/System": "test"
                }
            }
        }
    ]
}
  • タグ「Name」が「test-」で始まるインスタンスのみを対象
    ※条件に * を含んでいるため、"StringEquals"ではなく"StringLike"を使用します³。
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "ec2:StopInstances",
            "Resource": "arn:aws:ec2:{Region}:{Account}:instance/*",
            "Condition": {
                "StringLike": {
                    "aws:ResourceTag/Name": "test-*"
                }
            }
        }
    ]
}

信頼ポリシー

「信頼ポリシー」は"aws:SourceArn"と"aws:SourceAccount"を使用して制限できます⁴。
指定のスケジュールグループ ARN とアカウントの両方が一致する場合、IAM ロールの引き受け(sts:AssumeRole)を許可します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Statement1",
            "Effect": "Allow",
            "Principal": {
                "Service": "scheduler.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "aws:SourceArn": "arn:aws:scheduler:{Region}:{Account}:schedule-group/{Schedule group name}",
                    "aws:SourceAccount": "{Account}"
                }
            }
        }
    ]
}

"aws:SourceArn"の注意点

EventBridge スケジューラでの混乱した代理の防止⁴の以下記載のとおり、"aws:SourceArn"にはスケジュールの ARN は指定できませんスケジュールグループの ARN を指定します

重要
aws:SourceArn ステートメントの範囲を特定のスケジュールやスケジュール名のプレフィックスに限定しないでください。指定する ARN はスケジュールグループである必要があります。

(筆者は本仕様を認識しておらず、検証に時間を費やしました)

まとめ

本記事では、EventBridge スケジューラにアタッチする IAM ポリシーの許可を厳格化する手段を説明しました。
厳格化にあたっては、「許可ポリシー」と「信頼ポリシー」の設定を変更します。

「許可ポリシー」の変更では、 API 実行対象になるリソースを厳密に指定します。
「信頼ポリシー」の変更では、 "aws:SourceArn"と"aws:SourceAccount"を使用して、IAM ロールの引き受け元を制限します。

本記事が少しでもお役に立てば幸いです。

参考文献

¹ "IAM JSON ポリシー要素Resource - AWS Identity and Access Management". AWS Documentation. https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/reference_policies_elements_resource.html, (参照 2025-11-03)
² "タグを使用した AWS リソースへのアクセスの制御 - AWS Identity and Access Management". AWS Documentation. https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/access_tags.html, (参照 2025-11-03)
³ "IAM ポリシー検証チェックリファレンス - AWS Identity and Access Management". AWS Documentation. https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/access-analyzer-reference-policy-checks.html, (参照 2025-11-03)
⁴ "EventBridge スケジューラでの混乱した代理の防止 - EventBridge スケジューラ". AWS Documentation. https://docs.aws.amazon.com/ja_jp/scheduler/latest/UserGuide/cross-service-confused-deputy-prevention.html, (参照 2025-11-04)

この記事は私が書きました

Hirano

記事一覧

AWSの知見を身につけるため、一大決心でP&Sに入社しました。 目標はシステム改善に大きく貢献できるエンジニアになることです。 簡単な内容であっても自身が戸惑った点を投稿することで、同じ苦労をしている方の助けになれば嬉しいです!

Hirano

この記事を共有する

クラウドのご相談

CONTACT

クラウド導入や運用でお悩みの方は、お気軽にご相談ください。
専門家がサポートします。

サービス資料ダウンロード

DOWNLOAD

ビジネスをクラウドで加速させる準備はできていますか?
今すぐサービス資料をダウンロードして、詳細をご確認ください。