詳細に設定されたアクセスコントロールのための IAM ポリシー条件の使用 - Amazon EventBridge

詳細に設定されたアクセスコントロールのための IAM ポリシー条件の使用

アクセス権限を付与するには、ポリシーステートメントで IAM ポリシー言語を使用して、ポリシーが有効になる必要がある条件を指定できます。例えば、特定の日付の後にのみ適用されるポリシーを設定することができます。

ポリシーの条件は、キーと値のペアで構成されます。条件キーは大文字小文字を区別しません。

1 つの条件に複数の条件またはキーを指定した場合、EventBridge が許可を付与するにはすべての条件およびキーを満たす必要があります。1 つのキーに複数の値を持つ 1 つの条件を指定した場合、EventBridge は値の 1 つが満たされた場合にアクセス許可を付与します。

条件を指定する際にプレースホルダー、つまりポリシー変数も使用できます。詳細については、IAM ユーザーガイド の「ポリシー変数」を参照してください。IAM ポリシー言語での条件の指定の詳細については、IAM ユーザーガイドの「条件」を参照してください。

デフォルトでは、IAM ユーザー/ロールはお客様のアカウントのイベントにアクセスすることはできません。イベントにアクセスするには、ユーザーは PutRule API アクションに対するアクセス権限が必要です。ユーザーまたはロールは、events:PutRule アクションが許可されている場合、特定のイベントに一致するルールを作成できます。ただし、ルールが有用であるためには、ユーザーは events:PutTargets アクションに対するアクセス許可も必要です。なぜなら、ルールによって CloudWatch メトリクスの発行以上のことを行いたい場合は、ルールにターゲットを追加する必要もあるからです。

IAM ユーザー/ロールのポリシーステートメントに、特定の一連のソースとイベントタイプにのみ一致するルールの作成を許可する条件を追加できます。特定タイプのソースやイベントへのアクセスを許可するには、events:source および events:detail-type の条件キーを使用します。

同様に、IAM ユーザー/ロールのポリシーステートメントに、特定のリソースとアカウントにのみ一致するルールの作成を許可する条件を追加できます。特定のリソースへのアクセスを許可するには、events:TargetArn の条件キーを使用します。

次の例は、PutRule API アクションで deny ステートメントを使用して、ユーザーが EventBridge の Amazon EC2 イベント以外のすべてのイベントにアクセスすることを許可するポリシーです。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyPutRuleForAllEC2Events", "Effect": "Deny", "Action": "events:PutRule", "Resource": "*", "Condition": { "StringEquals": { "events:source": "aws.ec2" } } } ] }

EventBridge のポリシーで使用できる条件キーおよび、キーと値のペアは、次の表のとおりです。

条件キー キーと値のペア 評価の種類

events:creatorAccount

"events:creatorAccount":"creatorAccount"

creatorAccount には、ルールが作成されたアカウントのアカウント ID を使用します。特定のアカウントからのルールに対する API コールを認可するには、この条件を使用します。

creatorAccount、Null

events:eventBusInvocation

"events:eventBusInvocation":"boolean"

boolean には、ルールが他のアカウントのイベントバスであるターゲットにイベントを送信する場合、true を使用します。PutEvents API コールを使用する場合は、false を使用します。

eventBusInvocation、Null

events:source

"events:source":"source "

イベントのソースフィールドを表すリテラル文字列 ("aws.ec2" または "aws.s3") には source を使用します。source に指定できるその他の値については、AWS サービスからのイベント のイベント例を参照してください。

ソース、Null

events:detail-type

"events:detail-type":"detail-type "

ここで、detail-type は、イベントの [detail-type] フィールドのリテラル文字列 ("AWS API Call via CloudTrail""EC2 Instance State-change Notification" など) です。

詳細タイプ、Null

events: detail.userIdentity.principalId

"events:detail.userIdentity.principalId":"principal-id"

principal-id には、detail-type が "AWS API Call via CloudTrail" のイベントの detail.userIdentity.principalId フィールドのリテラル文字列、例えば "AROAIDPPEZS35WEXAMPLE:AssumedRoleSessionName." などを使用します。

プリンシパル ID、Null

events: detail.service

"events:detail.service":"service"

service には、イベントの detail.service フィールドのリテラル文字列、例えば "ABUSE" などを使用します。

サービス、Null

events: detail.eventTypeCode

"events:detail.eventTypeCode":"eventTypeCode"

eventTypeCode には、イベントの detail.eventTypeCode フィールドのリテラル文字列、例えば "AWS_ABUSE_DOS_REPORT" などを使用します。

eventTypeCode、Null

events:TargetArn

"events:TargetArn":"target-arn "

target-arn には、ルールのターゲットの ARN、例えば "arn:aws:lambda:*:*:function:*" などを使用します。

ARN、Null

events:ManagedBy

AWS のサービスによって内部で使用されます。お客様の代わりに AWS のサービスによってルールが作成された場合、値はルールを作成したサービスのプリンシパル名です。

カスタマーポリシーで使用することは想定されていません。

aws:SourceArn

イベントを送信しているルールの ARN。

ARN、Null

aws:SourceAccount

aws:SourceArn によって指定されたルールが存在するアカウント。

アカウント ID、Null

Eventbridge のポリシーステートメントの例については、Amazon EventBridge リソースへのアクセス許可の管理 を参照してください。

例: creatorAccount 条件を使用する

次のポリシーステートメントの例では、ポリシーで creatorAccount 条件を使用し、creatorAccount として指定されているアカウントがルールを作成したアカウントである場合にのみ、ルールの作成を許可する方法を示しています。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutRuleForOwnedRules", "Effect": "Allow", "Action": "events:PutRule", "Resource": "*", "Condition": { "StringEqualsIfExists": { "events:creatorAccount": "${aws:PrincipalAccount}" } } } ] }

例: eventBusInvocation 条件を使用する

eventBusInvocation は、呼び出しがクロスアカウントターゲットまたは PutEvents API リクエストから実行されるかどうかを示します。この値は、ターゲットが他のアカウントのイベントバスである場合など、クロスアカウントターゲットを含むルールからの呼び出しの結果である場合、true になります。PutEvents API リクエストからの呼び出しの場合は、値は false となります。次の例は、クロスアカウントターゲットからの呼び出しを示しています。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCrossAccountInvocationEventsOnly", "Effect": "Allow", "Action": "events:PutEvents", "Resource": "*", "Condition": { "BoolIfExists": { "events:eventBusInvocation": "true" } } } ] }

例: 特定のソースへのアクセスの制限

以下のポリシー例は IAM ユーザーにアタッチできます。ポリシー A では、すべてのイベントに対する PutRule API アクションを許可します。一方、ポリシー B では、作成するルールのイベントパターンが Amazon EC2 イベントに一致する場合にのみ PutRule を許可します。

ポリシー A: すべてのイベントを許可

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutRuleForAllEvents", "Effect": "Allow", "Action": "events:PutRule", "Resource": "*" } ] }

ポリシー B: Amazon EC2 からのイベントのみを許可

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutRuleForAllEC2Events", "Effect": "Allow", "Action": "events:PutRule", "Resource": "*", "Condition": { "StringEquals": { "events:source": "aws.ec2" } } } ] }

EventPattern は の必須引数です。PutRuleそのため、ポリシー B が適用されるユーザーが以下のようなイベントパターンで PutRule を呼び出すとします。

{ "source": [ "aws.ec2" ] }

この場合、ポリシーではこの特定のソース "aws.ec2" を許可するため、ルールが作成されます。ただし、ポリシー B のユーザーが次のようなイベントパターンで PutRule を呼び出した場合、ポリシーはこの特定のソース "aws.s3" を許可しないため、ルールの作成は拒否されます。

{ "source": [ "aws.s3" ] }

基本的に、ポリシー B が適用されるユーザーのみが、Amazon EC2 から発生したイベントに一致するルールの作成を許可されます。そのため、Amazon EC2 から発生したイベントのみへのアクセスを許可されます。

ポリシー A とポリシー B の比較については、以下の表を参照してください。

イベントパターン ポリシー A で許可 ポリシー B で許可
{ "source": [ "aws.ec2" ] }

はい

はい

{ "source": [ "aws.ec2", "aws.s3" ] }

はい

いいえ (ソース aws.s3 は許可されない)

{ "source": [ "aws.ec2" ], "detail-type": [ "EC2 Instance State-change Notification" ] }

はい

はい

{ "detail-type": [ "EC2 Instance State-change Notification" ] }

はい

いいえ(ソースの指定が必要)

例: イベントパターンで個々に使用できる複数のソースの定義

次のポリシーでは、IAM ユーザーまたはロールは、EventPattern のソースが Amazon EC2 または Amazon ECS のいずれかであるルールを作成することができます。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutRuleIfSourceIsEC2OrECS", "Effect": "Allow", "Action": "events:PutRule", "Resource": "*", "Condition": { "StringEquals": { "events:source": [ "aws.ec2", "aws.ecs" ] } } } ] }

以下の表で、このポリシーで許可または拒否されるイベントパターンを示しています。

イベントパターン ポリシーで許可
{ "source": [ "aws.ec2" ] }

はい

{ "source": [ "aws.ecs" ] }

はい

{ "source": [ "aws.s3" ] }

いいえ

{ "source": [ "aws.ec2", "aws.ecs" ] }

いいえ

{ "detail-type": [ "AWS API Call via CloudTrail" ] }

いいえ

例: イベントパターンで使用できるソースと DetailType を定義する

以下のポリシーでは、DetailTypeEC2 instance state change notification に等しい aws.ec2 ソースからのイベントのみを許可します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutRuleIfSourceIsEC2AndDetailTypeIsInstanceStateChangeNotification", "Effect": "Allow", "Action": "events:PutRule", "Resource": "*", "Condition": { "StringEquals": { "events:source": "aws.ec2", "events:detail-type": "EC2 Instance State-change Notification" } } } ] }

以下の表で、このポリシーで許可または拒否されるイベントパターンを示しています。

イベントパターン ポリシーで許可
{ "source": [ "aws.ec2" ] }

いいえ

{ "source": [ "aws.ecs" ] }

いいえ

{ "source": [ "aws.ec2" ], "detail-type": [ "EC2 Instance State-change Notification" ] }

はい

{ "source": [ "aws.ec2" ], "detail-type": [ "EC2 Instance Health Failed" ] }

いいえ

{ "detail-type": [ "EC2 Instance State-change Notification" ] }

いいえ

例: ソースがイベントパターンで定義されていることを確認する

以下のポリシーでは、ソースフィールドがある EventPatterns に対するルールの作成のみを許可します。このポリシーでは、IAM ユーザーまたはロールは、特定のソースを指定しない EventPattern を持つルールを作成することはできません。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutRuleIfSourceIsSpecified", "Effect": "Allow", "Action": "events:PutRule", "Resource": "*", "Condition": { "Null": { "events:source": "false" } } } ] }

以下の表で、このポリシーで許可または拒否されるイベントパターンを示しています。

イベントパターン ポリシーで許可
{ "source": [ "aws.ec2" ], "detail-type": [ "EC2 Instance State-change Notification" ] }

はい

{ "source": [ "aws.ecs", "aws.ec2" ] }

はい

{ "detail-type": [ "EC2 Instance State-change Notification" ] }

いいえ

例: イベントパターンに複数のソースがある場合にのみ許可されるソースのリストを定義する

以下のポリシーでは、複数のソースがある EventPatterns に対してのみルールの作成を許可します。イベントパターンにある各ソースは、条件に指定されたリストに含まれている必要があります。ForAllValues 条件を使用するときは、条件リストの少なくとも 1 つの項目が定義されていることを確認してください。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutRuleIfSourceIsSpecifiedAndIsEitherS3OrEC2OrBoth", "Effect": "Allow", "Action": "events:PutRule", "Resource": "*", "Condition": { "ForAllValues:StringEquals": { "events:source": [ "aws.ec2", "aws.s3" ] }, "Null": { "events:source": "false" } } } ] }

以下の表で、このポリシーで許可または拒否されるイベントパターンを示しています。

イベントパターン ポリシーで許可
{ "source": [ "aws.ec2" ] }

はい

{ "source": [ "aws.ec2", "aws.s3" ] }

はい

{ "source": [ "aws.ec2", "aws.autoscaling" ] }

いいえ

{ "detail-type": [ "EC2 Instance State-change Notification" ] }

いいえ

例: detail.service による PutRule アクセスの制限

IIAM ユーザーまたはロールを制限して、events:details.service フィールドに特定の値を持つイベントのみにルールの作成を制限することができます。events:details.service の値は AWS サービスの名前であるとは限りません。

このポリシー条件は、セキュリティまたは不正使用に関連する AWS Health からのイベントを処理するときに役立ちます。このポリシー条件を使用すると、これらの機密性の高いアラートへのアクセスを、必要があるユーザーのみに制限することができます。

たとえば、次のポリシーでは、events:details.service の値が ABUSE であるイベントのみにルールを作成することができます。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutRuleEventsWithDetailServiceEC2", "Effect": "Allow", "Action": "events:PutRule", "Resource": "*", "Condition": { "StringEquals": { "events:detail.service": "ABUSE" } } } ] }

例: detail.eventTypeCode による PutRule アクセスの制限

IIAM ユーザーまたはロールを制限して、events:details.eventTypeCode フィールドに特定の値を持つイベントのみにルールの作成を制限することができます。このポリシー条件は、セキュリティまたは不正使用に関連する AWS Health からのイベントを処理するときに役立ちます。このポリシー条件を使用すると、これらの機密性の高いアラートへのアクセスを、必要があるユーザーのみに制限することができます。

たとえば、次のポリシーでは、events:details.eventTypeCode の値が AWS_ABUSE_DOS_REPORT であるイベントのみにルールを作成することができます。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutRuleEventsWithDetailServiceEC2", "Effect": "Allow", "Action": "events:PutRule", "Resource": "*", "Condition": { "StringEquals": { "events:detail.eventTypeCode": "AWS_ABUSE_DOS_REPORT" } } } ] }

例: 特定の PrincipalId からの API コールの AWS CloudTrail イベントのみが許可されていることを確認する

すべての AWS CloudTrail イベントの detail.userIdentity.principalId パスには、API コールを行ったユーザーのプリンシパル ID があります。events:detail.userIdentity.principalId 条件キーを利用して、IAM ユーザーまたはロールのアクセス先を、特定のアカウントからのみ発生した CloudTrail イベントに制限できます。

"Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutRuleOnlyForCloudTrailEventsWhereUserIsASpecificIAMUser", "Effect": "Allow", "Action": "events:PutRule", "Resource": "*", "Condition": { "StringEquals": { "events:detail-type": [ "AWS API Call via CloudTrail" ], "events:detail.userIdentity.principalId": [ "AIDAJ45Q7YFFAREXAMPLE" ] } } } ] }

以下の表で、このポリシーで許可または拒否されるイベントパターンを示しています。

イベントパターン ポリシーで許可
{ "detail-type": [ "AWS API Call via CloudTrail" ] }

いいえ

{ "detail-type": [ "AWS API Call via CloudTrail" ], "detail.userIdentity.principalId": [ "AIDAJ45Q7YFFAREXAMPLE" ] }

はい

{ "detail-type": [ "AWS API Call via CloudTrail" ], "detail.userIdentity.principalId": [ "AROAIDPPEZS35WEXAMPLE:AssumedRoleSessionName" ] }

いいえ

例: ターゲットへのアクセスの制限

IAM ユーザーまたはロールに events:PutTargets アクセス許可がある場合は、アクセスできるルールと同じアカウントでターゲットを追加できます。次のポリシーでは、ターゲットを特定のルール (アカウント 123456789012MyRule) のみに追加することができます。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutTargetsOnASpecificRule", "Effect": "Allow", "Action": "events:PutTargets", "Resource": "arn:aws:events:us-east-1:123456789012:rule/MyRule" } ] }

ルールに追加できるターゲットを制限するには、events:TargetArn 条件キーを使用します。次のように、ターゲットを Lambda 関数だけに制限できます。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutTargetsOnASpecificRuleAndOnlyLambdaFunctions", "Effect": "Allow", "Action": "events:PutTargets", "Resource": "arn:aws:events:us-east-1:123456789012:rule/MyRule", "Condition": { "ArnLike": { "events:TargetArn": "arn:aws:lambda:*:*:function:*" } } } ] }