View a markdown version of this page

自定义事件总线的操作、资源和条件键 - Amazon EventBridge
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)。

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

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

在编写 IAM 策略时,请使用此页面。它列出了自定义事件总线的每个events:操作、每个操作所依据的资源 ARN、是否可以向其他账户授予该操作以及您可以添加的条件密钥。例如,您可以将角色限制为METADATA筛选条件与acme单独匹配tenant的订阅者。要做到这一点,events:CreateSubscriber请在ForAllValues:StringEquals条件events:UpdateSubscriber开启的情况下Null准予上车events:Metadata/tenant。

条件键

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

条件键值已提供于
events:source事件的来源,或被转发的来源PutEvents, CreateEventSource, UpdateEventSource
events:detail-type事件的详细信息类型PutEvents
events:eventBusInvocationtrue对于转发的事件,false用于直接发布PutEvents, PutRawEvents
events:SystemMetadata/ContentType事件系统元数据中的内容类型PutRawEvents,PutEvents对于已转发的事件
events:SystemMetadata/AwsSource转发事件的来源PutEvents,PutRawEvents,仅适用于已转发的事件
events:SystemMetadata/AwsDetailType转发事件的详细信息类型PutEvents,PutRawEvents,仅适用于已转发的事件
events:Metadata/keyO PutRawEvents n,表示事件中该元数据键的值。在订阅者操作中,METADATA筛选器在该键上匹配的值PutRawEvents, CreateSubscriber, UpdateSubscriber
events:Metadata/key/MatcherexactCreateSubscriber, UpdateSubscriber
events:ContentFilterPresenttrue当过滤器配置声明过滤DATA器时,否则 falseCreateSubscriber, UpdateSubscriber
events:PolicyName请求所依据的资源策略,default或 AWS_RAMPutResourcePolicy, GetResourcePolicy, DeleteResourcePolicy
aws:ResourceTag/key正在检查的总线、订阅者或事件源上的标签每个操作都根据资源进行检查
aws:RequestTag/key请求中该标签的值创建操作和 TagResource
aws:TagKeys请求中的标签密钥创建操作TagResource、和 UntagResource

转发事件是指规则或订阅者根据您提供的角色向总线传送的事件。 EventBridge 将其events:eventBusInvocation设置为时进行检查true;请参阅在没有发布电话的情况下到达的事件。除非订阅者对其进行了转换PutEvents,否则转发的 Amazon 服务或合作伙伴事件将被检查为。当事件为WITH_METADATA或JSONATA时,订阅者会对其进行Transformer.Type转换。将转发的事件检查为PutEvents进events:source位,并events:detail-type带有事件的来源和详细信息类型。任何其他转发的事件均按以下方式进行检查PutRawEvents。无论哪种方式events:SystemMetadata/AwsSource,都要events:SystemMetadata/AwsDetailType按住事件的来源和详细信息类型。当事件没有来源或详细信息类型时,或者当订阅者对其进行转换时,两个键都不存在。因此,测试其中一个键值的Deny语句不适用于缺少该密钥的事件。

O PutRawEvents n,events:Metadata/key保存一个值:该元数据键的事件值。在 and 上 CreateSubscriberUpdateSubscriber,它会保存METADATA过滤器在该键上匹配的所有值。过滤器可以匹配多个值,因此请将密钥与集合运算符进行匹配。 ForAllValues:StringEquals仅当每个值都是您列出的值时才匹配。 ForAnyValue:StringEquals当任何一个值是你列出的值时匹配,因此它还允许过滤器添加其他值。 ForAllValues当过滤器未命名密钥时也会匹配,因此请添加一个Null条件来要求使用密钥。 METADATA过滤器仅精确匹配,这就是为什么匹配器值始终是精确匹配的原因。exactDATA过滤器匹配任意 JSON,因此只显示其存在,而不显示其内容。SYSTEM_METADATA过滤器不提供条件键。

UpdateSubscriber仅当请求中包含一个过滤器密钥时,才会提供三个过滤键FilterConfiguration,即使是过滤器保持不变的密钥。该请求也将与公交车进行核events:UpdateSubscriber对。声明中仅授予的条件events:CreateSubscriber不适用于该支票。因此,设置同样的条件events:UpdateSubscriber。A o FilterConfiguration f 会{}移除所有过滤器。它提供 events:ContentFilterPresent as false 和 no 元数据密钥,因此元数据密钥上的Null条件会拒绝它。

当UpdateEventSource请求包含 a 时Configuration, EventBridge 还会events:UpdateEventSource对照总线进行检查。它根据events:source该配置进行设置。因此,也要设定你events:CreateEventSource设events:UpdateEventSource定的条件。events:source然后,条件控制重新定位的事件源和新的事件源。

用于events:PolicyName将委托人限制为总线的两个资源策略之一;请参阅编写自定义资源策略。密钥包含请求所针对的策略的名称。当你PolicyName在自己的请求中省略时,请求就会生效default,密钥是default。 Amazon Resource Access Manager (Amazon RAM) 使用更改资源共享的委托人的凭据编写AWS_RAM策略。 EventBridge 勾选写为events:PutResourcePolicy,密钥设置为AWS_RAM。因此,您限制的委托人default无法共享总线 Amazon RAM。 ListResourcePolicies报告这两个策略,因此它不提供此密钥。因此,此密钥上的StringEquals条件永远不匹配ListResourcePolicies。允许在没有该条件的语句中执行该操作。

以下资源策略允许账户在orders总444455556666线上创建订阅者并更改其过滤器。只有当订阅者的METADATA过滤器tenant完全匹配时,它才允许两者兼而有之acme。如果订阅者没有METADATA筛选器,或者过滤器命名除此之外的任何租户acme,则会被拒绝。 EventBridge 仅为过滤器声明的字段提供元数据条件密钥。因此,Null条件是拒绝漏掉的过滤器。tenant这些条件仅限制本声明的授权。如果另一份events:CreateSubscriber对账单或 Amazon RAM 股票也允许该账户,则条件不限制该授予。

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

操作及其检查所依据的资源

下表列出了每项操作、要放入策略Resource元素的资源 ARN,以及总线所有者是否可以通过资源策略或共享将该操作授予其他账户。 Amazon 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订阅者,以及请求中包含的总线 FilterConfiguration是的,用于公交车支票
events:DeleteSubscriber订阅者订阅者的所有者授权
events:ListSubscribers什么都没有。 Account-wide不是。 列出来电者自己的订阅者
events:RevokeResource这辆公共汽车不是。 仅限公交车车主
events:CreateEventSource正在创建的总线和事件源是
events:DescribeEventSource事件源事件源的所有者对其进行授权
events:UpdateEventSource事件源,以及请求中包含的总线 Configuration是的,用于公交车支票
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,因为事件源没有角色。 UpdateSubscriber当请求包含 a 时,还会在总线上进行检查events:UpdateSubscriberFilterConfiguration。当请求包含角色InvokeConfiguration.RoleArn时,它还会检查iam:PassRole其中的角色。因此,你的公交车events:UpdateSubscriber上需要events:CreateSubscriber另一个账户来连接订阅者并更新他们的过滤器。用于连接订阅者的 Amazon RAM 托管权限包括两者。

注意

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

基于 身份的策略示例

制作人需要总线 ARN events:PutEventsevents:PutRawEvents,或者两者兼而有之。授予与其调用的 API 相匹配的操作。使用客户管理的密钥加密的总线的生产者也需要访问该密钥;请参阅Amazon EventBridge 自定义事件总线的静态加密。订阅者所有者需要events:CreateSubscriber在总线和订阅者身iam:PassRole上、分发角色以及对其管理的订阅者进行描述、更新和删除订阅者操作。对于包含 a 的UpdateSubscriber请求FilterConfiguration,它还需要events:UpdateSubscriber在总线上。总线管理员需要创建、更新和删除总线操作、四个资源策略操作以及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在 “创建呼叫” 或 “使用TagResource” 和 “” ListTagsForResource 之后进行设置。UntagResource每个资源都有自己的标签集,因此标记总线不会标记与其关联的订阅者或事件源。

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:是保留的 Amazon ,每次写入时都会被拒绝,包括UntagResource。要控制谁可以标记以及编写依赖于标签的策略,请使用上表中的三个标签操作以及aws:RequestTagaws:ResourceTag、和aws:TagKeys条件键。