本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 Amazon EventBridge 中使用 IAM 政策条件
要授予权限,可在策略语句中使用 IAM 策略语言指定条件,规定策略何时生效。例如,您可以指定仅在特定日期后应用的策略。
策略中的条件由键值对组成。条件键不区分大小写。
如果您指定了多个条件,或在单一条件中指定了多个键,必须满足所有条件或键,EventBridge 才会授予权限。如果您在单一条件中指定了具有多个值的键,只要满足其中一个值 EventBridge 就会授予权限。
指定条件时,您也可以使用占位符或策略变量。有关更多信息,请参阅《IAM 用户指南》中的策略变量。有关使用 IAM 策略语言指定条件的更多信息,请参阅《IAM 用户指南》中的条件。
默认情况下,IAM 用户和角色无法访问您账户中的事件。要访问事件,用户必须获得 PutRule
API 操作的授权。如果授权 IAM 用户或角色执行 events:PutRule
操作,他们可以创建匹配特定事件的规则。但是,要使该规则发挥作用,用户还必须拥有 events:PutTargets
操作的权限,因为如果您希望规则的作用不仅仅是发布 CloudWatch 指标,还必须向规则中添加目标。
可以在 IAM 用户或角色的策略语句中提供条件,允许该用户或角色创建仅匹配一组特定源和事件类型的规则。要对特定源和事件类型授予访问权限,请使用 events:source
和 events:detail-type
条件键。
同样,您可以在 IAM 用户或角色的策略语句中提供条件,允许该用户或角色创建规则,仅匹配您账户中的特定资源。要对特定资源授予访问权限,请使用 events:TargetArn
条件键。
以下示例是一个策略,允许用户使用对 PutRule
API 操作的拒绝声明,访问除 EventBridge 中的 Amazon EC2 事件之外的所有事件。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyPutRuleForAllEC2Events", "Effect": "Deny", "Action": "events:PutRule", "Resource": "*", "Condition": { "StringEquals": { "events:source": "aws.ec2" } } } ] }
EventBridge 条件键
下表显示了可以在 EventBridge 的策略中使用的条件键和键值对。
条件键 | 键值对 | 评估类型 |
---|---|---|
aws:SourceAccount |
|
Account Id、Null |
aws:SourceArn |
发送事件的规则的 ARN。 |
ARN,Null |
events:creatorAccount |
对于 |
creatorAccount、Null |
events:detail-type |
其中, |
Detail Type,Null |
events: detail.eventTypeCode |
对于 |
eventTypeCode,Null |
events: detail.service |
对于 |
service,Null |
events: detail.userIdentity.principalId |
对于 |
Principal Id,Null |
events:eventBusInvocation |
对于 |
eventBusInvocation, Null |
events:ManagedBy |
由AWS服务内部使用。如果某个规则由 AWS 服务代表您创建,此值是创建规则的服务主体名称。 |
不要在客户策略中使用。 |
events:source |
使用 |
Source,Null |
events:TargetArn |
对于 |
ArrayOfARN, Null |
有关适用于 EventBridge 的策略语句示例,请参阅管理对 Amazon EventBridge 资源的访问权限。
主题
EventBridge Pipes 具体信息
EventBridge Pipes 不支持任何额外的 IAM 策略条件键。
示例:使用 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 允许的 |
---|---|---|
|
是 |
是 |
|
是 |
否(不允许源 aws.s3) |
|
是 |
是 |
|
是 |
否 (必须指定源) |
示例:定义可在事件模式中分别使用的多个源
以下策略允许 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 和 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" } } } ] }
下表显示此策略允许或拒绝的一些事件模式的示例。
事件模式 | 策略允许 |
---|---|
|
否 |
|
否 |
|
是 |
|
否 |
|
否 |
示例:确保在事件模式中定义源
以下策略仅允许用户创建 EventPatterns
具有源字段的规则。使用此策略,IAM 用户或角色不能创建 EventPattern
不提供特定源的规则。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutRuleIfSourceIsSpecified", "Effect": "Allow", "Action": "events:PutRule", "Resource": "*", "Condition": { "Null": { "events:source": "false" } } } ] }
下表显示此策略允许或拒绝的一些事件模式的示例。
事件模式 | 策略允许 |
---|---|
|
是 |
|
是 |
|
否 |
示例:在包含多个源的事件模式中定义允许的源的列表
以下策略允许用户创建 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" } } } ] }
下表显示此策略允许或拒绝的一些事件模式的示例。
事件模式 | 策略允许 |
---|---|
|
是 |
|
是 |
|
否 |
|
否 |
示例:由 detail.service
限制 PutRule
访问权限
您可以限制 IAM 用户或角色仅为 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
访问权限
您可以限制 IAM 用户或角色仅为 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 调用的用户的 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": [ "AWS API Call via CloudTrail" ], "events:detail.userIdentity.principalId": [ "AIDAJ45Q7YFFAREXAMPLE" ] } } } ] }
下表显示此策略允许或拒绝的一些事件模式的示例。
事件模式 | 策略允许 |
---|---|
|
否 |
|
是 |
|
否 |
示例:限制对目标的访问
如果 IAM 用户或角色具有 events:PutTargets
权限,他们就可以在相同账户下将任何目标添加到他们有权访问的规则。以下策略仅限用户将目标添加到特定规则:账户 123456789012
下的 MyRule
。
{ "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:*" } } } ] }