View a markdown version of this page

在亚马逊使用 IAM 政策条件 EventBridge - 亚马逊 EventBridge
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在亚马逊使用 IAM 政策条件 EventBridge

要授予权限,可在策略语句中使用 IAM 策略语言指定条件,规定策略何时生效。例如,您可以指定仅在特定日期后应用的策略。

策略中的条件由键值对组成。条件键不区分大小写。

如果您在单个条件中指定多个条件或密钥,则必须满足所有条件和密钥 EventBridge 才能授予权限。如果您为一个密钥指定了具有多个值的单一条件,则在满足其中一个值时 EventBridge 授予权限。

指定条件时,您也可以使用占位符或策略变量。有关更多信息,请参阅《IAM 用户指南》中的策略变量有关使用 IAM 策略语言指定条件的更多信息,请参阅《IAM 用户指南》中的条件

默认情况下,IAM 用户和角色无法访问您账户中的事件。要访问事件,用户必须获得 PutRule API 操作的授权。如果授权 IAM 用户或角色执行 events:PutRule 操作,他们可以创建匹配特定事件的规则。但是,要使规则有用,用户还必须具有events:PutTargets操作权限,因为如果您希望规则执行的不仅仅是发布 CloudWatch 指标,则还必须向规则添加目标。

可以在 IAM 用户或角色的策略语句中提供条件,允许该用户或角色创建仅匹配一组特定源和事件类型的规则。要对特定源和事件类型授予访问权限,请使用 events:sourceevents:detail-type 条件键。

同样,您可以在 IAM 用户或角色的策略语句中提供条件,允许该用户或角色创建规则,仅匹配您账户中的特定资源。要对特定资源授予访问权限,请使用 events:TargetArn 条件键。

EventBridge 条件键

下表显示了您可以在策略中使用的条件键以及密钥和值对 EventBridge。

条件键 键值对 评估类型

aws: SourceAccount

aws:SourceArn 指定的规则所在的账户。

Account Id、Null

aws: SourceArn

发送事件的规则的 ARN。

ARN,Null

events:creatorAccount

"events:creatorAccount":"creatorAccount"

对于creatorAccount,使用创建规则的账户的账户 ID。使用此条件授权 API 调用来自特定账户的规则。

creatorAccount、Null

events:detail-type

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

其中detail-type是事件的详细类型字段(例如和)的文字字符串。"Amazon API Call via CloudTrail" "EC2 Instance State-change Notification"

Detail Type,Null

活动:detail.event TypeCode

"events:detail.eventTypeCode":"eventTypeCode"

对于eventTypeCode,使用文字字符串作为事件的 detail.event TypeCode 字段,例如。"AWS_ABUSE_DOS_REPORT"

事件TypeCode,空

events: detail.service

"events:detail.service":"service"

对于service,使用文字字符串作为事件的 detail.service 字段,例如。"ABUSE"

service,Null

活动:detail.user Identity.principalId

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

对于principal-id,使用文字字符串作为事件的 detail.user 字Identity.principalId段,其详细"Amazon API Call via CloudTrail"类型为,例如。"AROAIDPPEZS35WEXAMPLE:AssumedRoleSessionName."

Principal Id,Null

事件:事件 BusInvocation

"events:eventBusInvocation":"boolean"

对于boolean,当规则向作为另一个账户中的事件总线的目标发送事件时,使用 true。使用 PutEvents API 调用时,使用 false。

事件BusInvocation,空

事件:ManagedBy

由 Amazon 服务内部使用。对于由 Amazon 服务代表您创建的规则,该值是创建该规则的服务的主要名称。

用于将权限范围限定为 Amazon 服务代表您创建的规则(托管规则)。例如,AmazonS3FilesFullAccess托管策略使用此密钥仅允许创建托管 EventBridge 规则。

events:source

"events:source":"source "

source用于事件源字段的文字字符串,例如"aws.ec2""aws.s3"。有关更多可能的值source,请参阅中的示例事件活动来自 Amazon 务

Source,Null

事件:TargetArn

"events:TargetArn":"target-arn "

例如 target-arn"arn:aws:lambda:*:*:function:*",使用目标的 ARN 作为规则。

ArrayOfARN,空值

有关政策声明的示例 EventBridge,请参阅管理对您的 Amazon EventBridge 资源的访问权限

EventBridge 管道细节

EventBridge 管道不支持任何额外的 IAM 策略条件密钥。

示例:使用 Creator Account 条件

以下示例策略语句说明如何在策略中使用 creatorAccount 条件,仅当指定为 creatorAccount 的账户是创建规则的账户时,才允许创建规则。

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

示例:使用事件BusInvocation条件

eventBusInvocation 指示调用是来自跨账户目标还是 PutEvents API 请求。如果调用源于包含跨账户目标的规则,例如目标为另一账户中的事件总线,则该值为 true。如果调用源于 PutEvents API 请求,该值为 false。以下示例表示来自跨账户目标的调用。

JSON
{ "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:允许所有事件

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

策略 B:仅允许来自 Amazon EC2 的事件

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

EventPatternPutRule 的必需参数。因此,如果具有策略 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" ] }

是的。ForAllValues计算一个空集合并返回 true,因为事件模式省略events:source了。请参阅以下重要说明。

无需检查 NULL 即可绕过策略 B 的来源限制

策略 B 限制规则只能在规则的事件模式包含events:source字段时才能匹配的事件。由于条件使用ForAllValues集合运算符而不进行Null检查,因此source完全省略的事件模式会导致条件在空集合上求值并返回 true。例如,指定事件模式仅detail-type触发此行为。因此,委托人可以通过创建事件模式未指定来源的规则来绕过预期的来源限制。

要要求规则的事件模式始终包含 asource,请将条件ForAllValues与启用Null条件结合起来events:source,如所示示例:确保在事件模式中定义源。有关集合运算符如何评估缺失条件密钥的更多信息,请参阅 IAM 用户指南中的使用多个密钥或值创建条件

示例:定义可在事件模式中分别使用的多个源

以下策略允许 IAM 用户或角色创建一条规则,EventPattern 中的源是 Amazon EC2 或 Amazon ECS。

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

下表显示此策略允许或拒绝的一些事件模式的示例。

事件模式 策略允许
{ "source": [ "aws.ec2" ] }

支持

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

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

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

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

示例:确保在事件模式中定义源

以下策略仅允许用户创建 EventPatterns 具有源字段的规则。使用此策略,IAM 用户或角色不能创建 EventPattern 不提供特定源的规则。

JSON
{ "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 条件时,请确保定义条件列表中的至少一个项。

JSON
{ "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访问权限

您可以限制 IAM 用户或角色仅为 events:details.service 字段中具有特定值的事件创建规则。的值events:details.service不一定是 Amazon 服务的名称。

当您处理与安全或滥用有关的事件时 Amazon Health ,此政策条件很有用。通过使用此策略条件,您可以限制只有需要查看敏感警报的那些用户才能访问它们。

例如,以下策略允许仅为 events:details.service 的值为 ABUSE 的事件创建规则。

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

示例:通过 detail.event 限制PutRule访问权限 TypeCode

您可以限制 IAM 用户或角色仅为 events:details.eventTypeCode 字段中具有特定值的事件创建规则。当您处理与安全或滥用有关的事件时 Amazon Health ,此政策条件很有用。通过使用此策略条件,您可以限制只有需要查看敏感警报的那些用户才能访问它们。

例如,以下策略允许仅为 events:details.eventTypeCode 的值为 AWS_ABUSE_DOS_REPORT 的事件创建规则。

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

示例:确保只有 Amazon CloudTrail 允许来自某PrincipalId人的 API 调用事件

所有 Amazon CloudTrail 事件都有在 PrincipalId 事件detail.userIdentity.principalId路径中进行 API 调用的用户的身份。使用events:detail.userIdentity.principalId条件密钥,您可以限制 IAM 用户或角色对 CloudTrail 事件的访问权限,仅限来自特定账户的用户或角色。

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

下表显示此策略允许或拒绝的一些事件模式的示例。

事件模式 策略允许
{ "detail-type": [ "Amazon API Call via CloudTrail" ] }

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

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

示例:限制对目标的访问

如果 IAM 用户或角色具有 events:PutTargets 权限,他们就可以在相同账户下将任何目标添加到他们有权访问的规则。以下策略仅限用户将目标添加到特定规则:账户 123456789012 下的 MyRule

JSON
{ "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 函数,如以下示例中所示。

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