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

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

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

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

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

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

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

默认情况下,IAM 用户和角色无法访问事件在您的账户中。用户必须获得授权才能访问事件PutRuleAPI 操作。如果 IAM 用户或角色获得授权events:PutRule行动,他们可以创建规则与某些事件相匹配。但是,为了使规则有用,用户还必须拥有events:PutTargets操作是因为,如果您希望规则做的不仅仅是发布 CloudWatch 指标,则还必须添加目标遵循规则。

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

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

以下示例是一项策略,允许 EventBridge 户使用在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

事件:EVENTBUS 调用

"events:eventBusInvocation":"boolean"

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

事件总线调用,Null

事件:来源

"events:source":"source "

使用资源用于事件的 source 字段的文字字符串,例如"aws.ec2"要么"aws.s3". 有关针对的更多可能的值资源,请参阅中的示例事件来自 的事件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

事件:详细信息。用户身份。PrincipalID

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

适用于Principal-Id中,使用文字字符串作为详细信息。用户身份。PrincapalID具有详细信息类型的活动字段"Amazon API Call via CloudTrail"例如"AROAIDPPEZS35WEXAMPLE:AssumedRoleSessionName.".

Principal Id,Null

活动:详细.service

"events:detail.service":"service"

适用于服务中,使用文字字符串作为详情。服务活动的字段,例如"ABUSE".

service,Null

事件:详细信息。eventType 代码

"events:detail.eventTypeCode":"eventTypeCode"

适用于eventTypeCode中,使用文字字符串作为详细信息。eventType 代码活动的字段,例如"AWS_ABUSE_DOS_REPORT".

eventTypeCode,Null

活动:目标 ARN

"events:TargetArn":"target-arn "

适用于目标 ARN例如,将目标的 ARN 用于规则"arn:aws:lambda:*:*:function:*".

ARN,Null

活动:由管理

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

不适用于客户策略。

aws:SourceArn

发送事件的规则的 ARN。

ARN,Null

aws:SourceAccount

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

Null 账户 ID

例如,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指示调用是来自跨账户目标还是来自PutEventsAPI 请求。值为:Value真的当调用产生于包含跨账户目标的规则时,例如当目标是另一个账户中的事件总线时。值为:Value假的当调用源于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" ] }

进程正在等待确保选择用于 Autovacuum 的表仍然需要进行 vacuum 操作。

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

进程正在等待 文件到达持久存储空间。

否 (不允许源 aws.s3)

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

进程正在等待确保选择用于 Autovacuum 的表仍然需要进行 vacuum 操作。

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

进程正在等待 文件到达持久存储空间。

否 (必须指定源)

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

允许 IAM 用户或角色创建规则,其中源在EventPattern是 Amazon EC2 或亚马逊 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": [ "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 调用的用户的 PrincipalIddetail.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:*" } } } ] }