

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

# 使用密钥加密 EventBridge 事件总线 Amazon KMS
<a name="eb-encryption-event-bus-cmkey"></a>

您可以指定 EventBridge 使用 Amazon KMS 来加密存储在事件总线上的数据，而不是使用 as Amazon 拥有的密钥 作为默认值。您可以在创建或更新事件总线时指定客户自主管理型密钥。您也可以更新默认事件总线，以便使用客户自主管理型密钥进行加密。有关更多信息，请参阅 [KMS 密钥选项](eb-encryption-at-rest-key-options.md)。

 当您为事件总线指定客户管理的密钥时，会 EventBridge 使用该密钥对以下内容进行加密：
+ 存储在事件总线上的[自定义](eb-putevents.md)事件和[合作伙伴](eb-saas.md)事件。

  来自 Amazon 服务的事件使用进行加密 Amazon 拥有的密钥。

  EventBridge 不加密事件元数据。有关事件元数据的更多信息，请参阅*事件参考文档*中的 [Amazon service event metadata](https://docs.amazonaws.cn/eventbridge/latest/ref/events-structure.html)。
+ 对于总线上的每条[规则](eb-rules.md)：
  + 规则[事件模式](eb-event-patterns.md)。
  + [目标](eb-targets.md)信息，包括目标输入、[输入转换器](eb-transform-target-input.md)和[配置参数](eb-create-rule-wizard.md#eb-create-rule-target)。
+ 如果启用了[事件总线日志记录](eb-event-bus-logs.md)，则会记录日志的 `detail` 和 `error` 部分。

如果您为事件总线指定客户托管密钥，则可以选择为事件总线指定死信队列 (DLQ)。 EventBridge 然后向该 DLQ 提供任何生成加密或解密错误的自定义事件或合作伙伴事件。有关更多信息，请参阅 [DLQs 用于加密事件](eb-encryption-event-bus-dlq.md)。

**注意**  
我们强烈建议为事件总线指定 DLQ，以确保在发生加密或解密错误时保留事件。

您还可以指定使用客户自主管理型密钥来加密事件总线归档。有关更多信息，请参阅 [加密归档](encryption-archives.md)。

**注意**  
使用客户自主管理型密钥进行加密的事件总线不支持架构发现。要在事件总线上启用架构发现，请选择使用 Amazon 拥有的密钥。有关更多信息，请参阅 [KMS 密钥选项](eb-encryption-at-rest-key-options.md)。

## 事件总线加密上下文
<a name="eb-encryption-at-rest-context-bus"></a>

[加密上下文](https://docs.amazonaws.cn/kms/latest/developerguide/concepts.html#encrypt_context) 是一组包含任意非机密数据的键值对。在请求中包含加密上下文以加密数据时， Amazon KMS 以加密方式将加密上下文绑定到加密的数据。要解密数据，您必须传入相同的加密上下文。

您还可以将加密上下文用作在策略和授权中进行授权的条件。

如果您使用客户托管密钥来保护您的 EventBridge 资源，则可以使用加密上下文来识别审计记录和日志 KMS key 中的使用情况。它也以明文形式显示在日志中，例如 [Amazon CloudTrail](https://docs.amazonaws.cn/awscloudtrail/latest/userguide/cloudtrail-user-guide.html) 和 [Amazon CloudWatch Logs](https://docs.amazonaws.cn/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html)。

对于事件总线，在所有加密操作中 EventBridge 使用相同的 Amazon KMS 加密上下文。该上下文包括单个键值对，其中包含事件总线 ARN。

```
"encryptionContext": {
    "kms:EncryptionContext:aws:events:event-bus:arn": "event-bus-arn"
}
```

## Amazon KMS 活动总线的密钥策略
<a name="eb-encryption-key-policy-bus"></a>

以下示例密钥策略提供事件总线所需的权限：
+ `kms:DescribeKey`
+ `kms:GenerateDataKey`
+ `kms:Decrypt`

作为安全最佳实践，我们建议您在密钥策略中包含条件密钥，以帮助确保仅对指定的资源或账户 EventBridge 使用 KMS 密钥。有关更多信息，请参阅 [安全注意事项](eb-encryption-key-policy.md#eb-encryption-event-bus-confused-deputy)。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowEventBridgeToValidateKeyPermission",
      "Effect": "Allow",
      "Principal": {
      "Service": "events.amazonaws.com"
       },
      "Action": [
        "kms:DescribeKey"
        ],
      "Resource": "*"
    },
  {
    "Sid": "AllowEventBridgeToEncryptEvents",
    "Effect": "Allow",
    "Principal": {
      "Service": "events.amazonaws.com"
    },
    "Action": [
      "kms:GenerateDataKey",
      "kms:Decrypt"
    ],
    "Resource": "*",
    "Condition": {
      "StringEquals": {
          "kms:EncryptionContext:aws:events:event-bus:arn": "arn:aws:events:us-east-1:123456789012:event-bus/event-bus-arn",
          "aws:SourceArn": "arn:aws:events:us-east-1:123456789012:event-bus/event-bus-name"
        }
      } 
    }
  ] }
```

------

## Amazon KMS 事件总线操作的密钥权限
<a name="eb-encryption-key-permissions-bus"></a>

要创建或更新使用客户自主管理型密钥加密的事件总线，您必须对指定的客户自主管理型密钥拥有以下权限：
+ `kms:GenerateDataKeyWithoutPlaintext`
+ `kms:Decrypt`
+ `kms:Encrypt`
+ `kms:ReEncryptFrom`
+ `kms:ReEncryptTo`
+ `kms:DescribeKey`

此外，要在使用客户自主管理型密钥加密的事件总线上执行某些事件总线操作，您必须对指定的客户自主管理型密钥拥有 `kms:Decrypt` 权限。这些操作包括：
+ `[DescribeRule](https://docs.amazonaws.cn/eventbridge/latest/APIReference/API_DescribeRule.html)`
+ `[DisableRule](https://docs.amazonaws.cn/eventbridge/latest/APIReference/API_DisableRule.html)`
+ `[EnableRule](https://docs.amazonaws.cn/eventbridge/latest/APIReference/API_EnableRule.html)`
+ `[ListRules](https://docs.amazonaws.cn/eventbridge/latest/APIReference/API_ListRules.html)`
+ `[ListTargetsByRule](https://docs.amazonaws.cn/eventbridge/latest/APIReference/API_ListTargetsByRule.html)`
+ `[PutRule](https://docs.amazonaws.cn/eventbridge/latest/APIReference/API_PutRule.html)`
+ `[ListRuleNamesByTarget](https://docs.amazonaws.cn/eventbridge/latest/APIReference/API_ListRuleNamesByTarget.html)`
+ `[PutTargets](https://docs.amazonaws.cn/eventbridge/latest/APIReference/API_PutTargets.html)`