View a markdown version of this page

自定义事件总线的操作、资源和条件键 - 亚马逊 EventBridge

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

自定义事件总线的操作、资源和条件键

在编写 IAM 策略时使用此页面。它列出了自定义事件总线的所有events:操作、检查每个操作所对应的资源 ARN、是否可以向另一个账户授予该操作以及您可以添加的条件密钥。例如,要让角色附加METADATA过滤器名称tenant为的订阅者acme,则在总线events:CreateSubscriber上授予ForAnyValue:StringEquals条件为开启的条件events:Metadata/tenant。

条件键

EventBridge 从请求中提供以下条件密钥,这样您就可以将授权范围缩小到操作和资源以外的范围。有关全局条件密钥,请参阅 IAM 用户指南中的AWS 全局条件上下文密钥。

条件键值供应于
events:source事件的来源,或正在转发的来源PutEvents, CreateEventSource, UpdateEventSource
events:detail-type事件的详细信息类型PutEvents
events:Metadata/keyMETADATA过滤器在该键上匹配的值CreateSubscriber
events:Metadata/key/MatcherexactCreateSubscriber
events:ContentFilterPresenttrue当订阅者声明DATA过滤器时CreateSubscriber
aws:ResourceTag/key正在检查总线、订阅者或事件源上的标签对照资源检查每项操作
aws:RequestTag/key, aws:TagKeys请求中的标签创建操作和TagResource,UntagResource

元数据密钥以一组值的形式提供,因此请将其与集合运算符(如)进行匹配ForAnyValue:StringEquals。METADATA过滤器只能精确匹配,这就是匹配器值始终为的原因。exactDATA过滤器匹配任意 JSON,因此只会暴露其存在,而不是其内容。UpdateEventSource使用替换配置中的events:source设置重新运行总线检查,因此该密钥上的条件将控制重新指向的事件源和新的事件源。

以下资源策略允许账户仅在订阅者的METADATA筛选条件tenant完全匹配时才在orders总线上444455556666创建订阅者acme。没有METADATA过滤器或命名其他租户的订阅者将被拒绝。 EventBridge 仅为过滤器声明的字段提供元数据条件密钥,因此该Null条件是拒绝过滤器遗漏的原因tenant。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "SubscribeToAcmeEventsOnly", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::444455556666:root" }, "Action": "events:CreateSubscriber", "Resource": "arn:aws:events:us-east-1:111122223333:event-busv2/orders/EXAMPLE1234567890abcdef", "Condition": { "Null": { "events:Metadata/tenant": "false" }, "ForAnyValue:StringEquals": { "events:Metadata/tenant": "acme" }, "StringEquals": { "events:Metadata/tenant/Matcher": "exact" } } } ] }

操作及其检查对照的资源

下表列出了每项操作、要放入策略Resource元素的资源 ARN,以及总线所有者是否可以通过资源策略或 AWS RAM 共享将该操作授予另一个账户。这三个List操作不针对任何资源进行检查,因此请授予它们权限"Resource": "*"。

IAM 操作已对照检查可授予其他账户
events:CreateEventBus正在创建的巴士不。在来电者自己的账户中创建
events:DescribeEventBus公共汽车是
events:UpdateEventBus公共汽车不。仅限公交车所有者
events:DeleteEventBus公共汽车不。仅限公交车所有者
events:ListEventBuses什么都没有。 Account-wide不。列出来电者自己的和共享的总线
events:PutEvents公共汽车,请求中每个条目一次是
events:PutRawEvents公共汽车,请求中每个条目一次是
events:CreateSubscriber总线和正在创建的订阅者是
events:DescribeSubscriber订阅者订阅者的所有者授权
events:UpdateSubscriber订阅者订阅者的所有者授权
events:DeleteSubscriber订阅者订阅者的所有者授权
events:ListSubscribers什么都没有。 Account-wide不。列出来电者自己的订阅者
events:RevokeResource公共汽车不。仅限公交车所有者
events:CreateEventSource总线和正在创建的事件源是
events:DescribeEventSource事件源事件源的所有者对其进行授权
events:UpdateEventSource事件源,还有总线是的,用于公交车支票
events:DeleteEventSource事件源事件源的所有者对其进行授权
events:ListEventSources什么都没有。 Account-wide不。列出调用者自己的事件源
events:PutResourcePolicy公共汽车不。仅限公交车所有者
events:GetResourcePolicy公共汽车是
events:DeleteResourcePolicy公共汽车不。仅限公交车所有者
events:ListResourcePolicies公共汽车是
events:TagResource请求中命名的总线、订阅者或事件源巴士:是的。订阅者或事件来源:其所有者
events:UntagResource请求中命名的总线、订阅者或事件源巴士:是的。订阅者或事件来源:其所有者
events:ListTagsForResource请求中命名的总线、订阅者或事件源巴士:是的。订阅者或事件来源:其所有者

要在总线上创建订阅者或事件源,调用者需要在总线和新资源上执行操作。这就是公交车所有者在公交车自己的政策中决定哪些账户可以附加任何东西的原因。CreateSubscriber进行四次单独的授权检查,所有四项检查都必须允许:events:CreateSubscriber在总线events:CreateSubscriber上、在订阅者iam:PassRole上InvokeConfiguration.RoleArn、在角色events:TagResource上以及在请求带有标签时在订阅者上。CreateEventSource不运行相同的检查iam:PassRole,因为事件源没有角色。

注意

尚不存在的资源没有完整的 ARN,因此创建校验使用以通配符结尾的 ARN,例如。arn:aws:events:us-east-1:111122223333:subscriber/name/*因此,范围限定为一个订阅者的策略按名称前缀进行匹配,不完全匹配。未标记的创建不会aws:ResourceTag为新资源提供,因此该密钥上的StringEquals条件会拒绝该资源。

基于 身份的策略示例

制片人需要在公交车上使用 ARN events:PutEventsevents:PutRawEvents,或两者兼而有之。授予与其调用的 API 相匹配的操作。使用客户管理的密钥加密的总线的生产者也需要访问该密钥;请参阅在自定义事件总线上加密事件。订阅者所有者需要events:CreateSubscriber在总线和订阅者iam:PassRole上,在交付角色上对其管理的订阅者进行描述、更新和删除订阅者操作。总线管理员需要创建、更新和删除总线操作、四个资源策略操作以及events:RevokeResource。

以下策略允许生产者使用任一发布 API 发布到一个总线,并读取该总线,这样它就可以确认该总线在ACTIVE第一位。对于请求中的每一个条目,发布会获得一次授权,并且没有部分授权:如果一个条目未通过条件检查,则 EventBridge 拒绝整个请求,包括本应通过的条目。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "PublishToOrdersBus", "Effect": "Allow", "Action": [ "events:PutEvents", "events:PutRawEvents", "events:DescribeEventBus" ], "Resource": "arn:aws:events:us-east-1:111122223333:event-busv2/orders/EXAMPLE1234567890abcdef" } ] }

标签

您可以标记总线、订阅者或事件源。Tags在创建呼叫时设置,或使用TagResourceUntagResource、,ListTagsForResource之后进行设置。每个资源都有自己的标签集,因此标记总线不会标记与其连接的订阅者或事件源。

aws eventsv2 tag-resource \ --resource-arn arn:aws:events:us-east-1:111122223333:event-busv2/orders/EXAMPLE1234567890abcdef \ --tags team=payments,environment=production

创建响应不会呼应您提供的标签,因此在需要确认list-tags-for-resource时请仔细阅读它们。以开头的密钥aws:在每次写入时都会被保留 AWS 并被拒绝,包括UntagResource。要控制谁可以标记并编写依赖于标签的策略,请使用上表中的三个标签操作以及aws:RequestTagaws:ResourceTag、和aws:TagKeys条件键。