

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

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

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

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

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


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

元数据密钥以一组值的形式提供，因此请将其与集合运算符（如）进行匹配`ForAnyValue:StringEquals`。`METADATA`过滤器只能精确匹配，这就是匹配器值始终为的原因。`exact``DATA`过滤器匹配任意 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" }
            }
        }
    ]
}
```

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

下表列出了每项操作、要放入策略`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`条件会拒绝该资源。

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

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

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

您可以标记总线、订阅者或事件源。`Tags`在创建呼叫时设置，或使用`TagResource``UntagResource`、，`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:RequestTag``aws:ResourceTag`、和`aws:TagKeys`条件键。