

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

# 自定义事件总线的操作、资源和条件键
<a name="eb-custom-bus-access-actions"></a>

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

## 条件键
<a name="eb-custom-bus-access-conditions"></a>

EventBridge 提供请求中的以下条件密钥，以便您可以将授权范围缩小到操作和资源之外。有关全局条件密钥，请参阅 *IAM 用户指南*中的[Amazon 全局条件上下文密钥](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_condition-keys.html)。


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

*转发事件*是指规则或订阅者根据您提供的角色向总线传送的事件。 EventBridge 将其`events:eventBusInvocation`设置为时进行检查`true`；请参阅[在没有发布电话的情况下到达的事件](eb-custom-bus-sharing.md#eb-custom-bus-access-forwarded)。除非订阅者对其进行了转换`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 上 `CreateSubscriber``UpdateSubscriber`，它会保存`METADATA`过滤器在该键上匹配的所有值。过滤器可以匹配多个值，因此请将密钥与集合运算符进行匹配。 `ForAllValues:StringEquals`仅当每个值都是您列出的值时才匹配。 `ForAnyValue:StringEquals`当任何一个值是你列出的值时匹配，因此它还允许过滤器添加其他值。 `ForAllValues`当过滤器未命名密钥时也会匹配，因此请添加一个`Null`条件来要求使用密钥。 `METADATA`过滤器仅精确匹配，这就是为什么匹配器值始终是精确匹配的原因。`exact``DATA`过滤器匹配任意 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`将委托人限制为总线的两个资源策略之一；请参阅[编写自定义资源策略](eb-custom-bus-sharing.md#eb-custom-bus-access-policy)。密钥包含请求所针对的策略的名称。当你`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" }
            }
        }
    ]
}
```

## 操作及其检查所依据的资源
<a name="eb-custom-bus-access-actions-table"></a>

下表列出了每项操作、要放入策略`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:UpdateSubscriber``FilterConfiguration`。当请求包含角色`InvokeConfiguration.RoleArn`时，它还会检查`iam:PassRole`其中的角色。因此，你的公交车`events:UpdateSubscriber`上需要`events:CreateSubscriber`另一个账户来连接订阅者并更新他们的过滤器。用于连接订阅者的 Amazon RAM 托管权限包括两者。

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

## 基于 身份的策略示例
<a name="eb-custom-bus-access-identity"></a>

**制作人**需要总线 ARN `events:PutEvents``events:PutRawEvents`，或者两者兼而有之。授予与其调用的 API 相匹配的操作。使用客户管理的密钥加密的总线的生产者也需要访问该密钥；请参阅[Amazon EventBridge 自定义事件总线的静态加密](eb-custom-bus-encryption.md)。订**阅者所有者**需要`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"
        }
    ]
}
```

## 标签
<a name="eb-custom-bus-access-tagging"></a>

您可以标记总线、订阅者或事件源。`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:RequestTag``aws:ResourceTag`、和`aws:TagKeys`条件键。