使用 IAM 策略条件进行精细访问控制 - Amazon EventBridge
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

使用 IAM 策略条件进行精细访问控制

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

策略中的条件包括键值对。条件键不区分大小写。

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

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

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

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

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

以下示例是一个策略,允许用户访问 EventBridge 中除 Amazon EC2 事件之外的所有事件,使用PutRuleAPI 操作。

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

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

条件键 密钥值对 评估类型

活动:创建者帐户

"events:creatorAccount":"creatorAccount"

适用于创建者帐户中,请使用创建规则的账户的账户 ID。使用此条件授权对来自特定账户的规则进行 API 调用。

Creator 帐户,Null

事件:事件总结

"events:eventBusInvocation":"boolean"

适用于布尔值,则在规则将事件发送到另一个帐户中的事件总线的目标时使用 true。使用 false 时,当PutEvents使用 API 调用。

EventBusch,Null

事件:源

"events:source":"source "

使用source作为事件的源字段的文字符串,例如"aws.ec2"或者"aws.s3"。有关的更多可能的值source,请参阅来自 的事件Amazon服务

Source,Null

活动:详细类型

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

其中,detail-type 为事件的 detail-type 字段的文字字符串,例如 "Amazon API Call via CloudTrail""EC2 Instance State-change Notification"

Detail Type,Null

事件:详细信息。用户标识。委托人 ID

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

适用于委托人编号,请使用文字字符串作为详细信息。用户身份。委托人 ID具有详细信息类型的事件字段"Amazon API Call via CloudTrail"例如"AROAIDPPEZS35WEXAMPLE:AssumedRoleSessionName."

Principal Id,Null

事件:详细信息

"events:detail.service":"service"

适用于服务,请使用文字字符串作为详细信息服务字段,例如"ABUSE"

service,Null

事件:详细信息。事件编码

"events:detail.eventTypeCode":"eventTypeCode"

适用于eventTypeCode,请使用文字字符串作为详细信息。事件编码字段,例如"AWS_ABUSE_DOS_REPORT"

eventTypeCode,Null

活动:目标塔恩

"events:TargetArn":"target-arn "

适用于目标 arn中,使用目标的 ARN 作为规则,例如"arn:aws:lambda:*:*:function:*"

ARN,Null

活动:管理

内部使用Amazon服务。对于由Amazon服务时,值是创建规则的服务的委托人名称。

不适用于客户策略。

aws:SourceArn

发送事件的规则的 ARN。

ARN,Null

aws:SourceAccount

在其中指定的规则aws:SourceArn存在。

账户编号,Null

有关 EventBridge 的策略语句示例,请参阅管理您的 Amazon EventBridge 资源的访问权限

例如:使用creatorAccountcondition

以下示例策略语句演示如何使用creatorAccount条件,以便只允许在指定为creatorAccount是创建规则的帐户。

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

例如:使用eventBusInvocationcondition

这些区域有:eventBusInvocation指示调用是来自跨账户目标还是PutEventsAPI 请求。该值为true当调用来自包含跨账户目标的规则(例如,当目标是另一个帐户中的事件总线时)。该值为,当调用来自PutEventsAPI 请求。以下示例指示来自跨账户目标的调用。

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

例如:将访问权限定为特定源

以下示例策略可附加到 IAM 用户。策略 A 允许PutRule针对所有事件的 API 操作,而策略 B 允许PutRule仅在要创建的规则的事件模式与 Amazon EC2 事件匹配时。

策略 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" } } } ] }

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" ] }

否 (必须指定源)

例如:定义可在事件模式中单独使用的多个源

以下策略允许 IAM 用户或角色创建一个规则,其中EventPattern是 Amazon EC2 或亚马逊云服务器。

{ "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": [ "Amazon API Call via CloudTrail" ] }

例如:定义源和DetailType ,可以在事件模式中使用

以下策略仅允许来自aws.ec2源代码DetailType等于EC2 instance state change notification

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

{ "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" ] }

例如:限制PutRule访问者detail.service

您可以限制 IAM 用户或角色仅为在events:details.service字段。的值events:details.service不一定是Amazon服务。

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

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

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

例如:限制PutRule访问者detail.eventTypeCode

您可以限制 IAM 用户或角色仅为在events:details.eventTypeCode字段。在您使用来自的事件时,此策略条件有所帮助。Amazon 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" } } } ] }

例如:确保仅Amazon CloudTrail来自某个 API 调用的事件PrincipalId允许

全部Amazon CloudTrail事件具有执行 API 调用的用户的委托人 IDdetail.userIdentity.principalId事件的路径。使用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权限,他们可以将相同账户下的任何目标添加到他们有权访问的规则。以下策略仅限用户将目标添加到特定规则:MyRule在帐户下123456789012

{ "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:*" } } } ] }