

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

# EventBridge 调度器中的静态加密
<a name="encryption-rest"></a>

 本节介绍 Amazon S EventBridge cheduler 如何加密和解密您的静态数据。静态数据是存储在 EventBridge 调度器和服务的底层组件中的数据。 EventBridge 调度器与 AWS Key Management Service (AWS KMS) 集成，可使用加密和解密您的数据。[AWS KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys) EventBridge 计划程序支持两种类型的 KMS 密钥：[AWS 拥有的密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk)和[客户托管密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)。

**注意**  
 EventBridge 调度程序仅支持使用[对称](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#symmetric-cmks)加密 KMS 密钥。

 *AWS 拥有的密钥*是 AWS 服务拥有并管理的 KMS 密钥，可在多个 AWS 账户中使用。尽管 AWS 拥有的密钥 EventBridge 日程安排器使用的未存储在您的 AWS 账户中，但 EventBridge 日程安排器使用它们来保护您的数据和资源。默认情况下，S EventBridge cheduler 使用自有密钥加密和解密您的所有数据。 AWS 您无需管理自己的 AWS 拥有的密钥 或其访问策略。当S EventBridge cheduler使用 AWS 拥有的密钥 来保护您的数据时，您不会产生任何费用，并且这些费用的使用量不计入您账户中 AWS KMS 配额的一部分。

 *客户托管密钥*是存储在您的 AWS 账户中的 KMS 密钥，由您创建、拥有和管理这些密钥。如果您的特定用例要求您控制和审核在 EventBridge 计划程序上保护您的数据的加密密钥，则可以使用客户托管密钥。如果您选择客户托管密钥，您必须管理密钥策略。客户托管密钥会产生月费以及超过免费套餐使用量的费用。使用客户托管密钥也算作 [AWS KMS 配额](https://docs.aws.amazon.com/kms/latest/developerguide/limits.html)的一部分。有关定价的更多信息，请参阅 [AWS Key Management Service 定价](https://aws.amazon.com/kms/pricing/)。

**Topics**
+ [加密构件](#encryption-rest-artifacts)
+ [管理 KMS 密钥](#key-management)
+ [CloudTrail 事件示例](#key-management-cloud-trail)

## 加密构件
<a name="encryption-rest-artifacts"></a>

 下表描述了 S EventBridge cheduler 对静态数据进行加密的不同类型，以及它为每个类别支持哪种类型的 KMS 密钥。


| 数据类型 | 说明 | AWS 拥有的密钥 | 客户托管密钥 | 
| --- | --- | --- | --- | 
|  有效负载（最大 256KB）  |  您在配置要交付到目标的计划时在计划的 `TargetInput` 参数中指定的数据。  |  支持  |  支持  | 
|  标识符和状态  |  计划的唯一名称和状态（启用、禁用）。  |  支持  |  不支持  | 
|  计划配置  |  计划表达式，例如重复计划的 rate 或 cron 表达式，一次性调用的时间戳，以及计划的开始日期、结束日期和时区。  |  支持  |  不支持  | 
|  目标配置  |  目标的 Amazon 资源名称（ARN）以及其他与目标相关的配置详细信息。  |  支持  |  不支持  | 
|  调用和失败行为配置  |  灵活的时间窗配置、计划的重试策略以及用于失败交付的死信队列详细信息。  |  支持  |  不支持  | 

 EventBridge 如上表所述，Scheduler 仅在加密和解密目标负载时才使用您的客户托管密钥。如果您选择使用客户托管密钥，S EventBridge cheduler 会对有效负载进行两次加密和解密：一次使用默认密钥 AWS 拥有的密钥，另一次使用您指定的客户托管密钥。对于所有其他数据类型，S EventBridge cheduler 仅使用默认值 AWS 拥有的密钥 来保护您的静态数据。

 使用以下[管理 KMS 密钥](#key-management)部分了解您必须如何管理您的 IAM 资源和密钥策略，以便在 EventBridge 计划程序中使用客户托管密钥。

## 管理 KMS 密钥
<a name="key-management"></a>

 您可以选择提供客户托管密钥来加密和解密您的计划交付给目标的有效负载。 EventBridge 调度程序可加密和解密您的有效负载（最多 256KB 的数据）。使用客户托管密钥会产生月费以及超过免费套餐使用量的费用。使用客户托管密钥算作 [AWS KMS 配额](https://docs.aws.amazon.com/kms/latest/developerguide/limits.html)的一部分。有关定价的更多信息，请参阅 [AWS Key Management Service 定价](https://aws.amazon.com/kms/pricing/) 

 EventBridge 计划程序使用与创建计划的委托人关联的 IAM 权限来加密您的数据。这意味着您必须将所需的 AWS KMS 相关权限附加到调用 EventBridge 调度程序 API 的用户或角色。此外， EventBridge Scheduler 使用基于资源的策略来解密您的数据。这意味着与您的计划关联的执行角色还必须具有在解密数据时调用 AWS KMS API 所需的 AWS KMS 相关权限。

**注意**  
 EventBridge 计划程序不支持使用临时权限的[授](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html)权。

 使用以下部分了解如何管理 AWS KMS [密钥策略](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)以及在 S EventBridge cheduler 上使用客户托管密钥所需的 IAM 权限。

**Topics**
+ [添加 IAM 权限](#key-management-iam-permissions)
+ [管理密钥策略](#key-management-key-policy)

### 添加 IAM 权限
<a name="key-management-iam-permissions"></a>

 要使用客户托管密钥，您必须向创建计划的基于身份的 IAM 主体以及与计划关联的执行角色添加以下权限。

#### 客户托管密钥的基于身份的权限
<a name="key-management-iam-permissions-identity-based"></a>

在创建计划时，您必须将以下 AWS KMS 操作添加到与 EventBridge 调用 Scheduler API 的任何委托人（用户、群组或角色）关联的权限策略中。
+  **`kms:DescribeKey`**：验证您提供的密钥是否为[对称](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#symmetric-cmks)加密 KMS 密钥所必需。
+  **`kms:GenerateDataKey`**— 生成 EventBridge 调度器用于执行客户端加密的数据密钥时必需的。
+  **`kms:Decrypt`**— 必需解密 EventBridge 调度器与您的加密数据一起存储的加密数据密钥。

除以下操作外，还包括这些内容：
+  **`scheduler:*`** 
+  **`iam:PassRole`**：需要传递执行角色。

#### 客户托管密钥的执行角色权限
<a name="key-management-iam-permissions-execution-role"></a>

 您必须在日程安排的执行角色权限策略中添加以下操作，以便在解密数据时允许 EventBridge 调度程序调用 AWS KMS API。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowEventBridgeSchedulerToDecryptDataUsingCMKMS",
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": "arn:aws:kms:us-east-1:123456789012:key/your-key-id"
        }
    ]
}
```

------
+  **`kms:Decrypt`**— 必需解密 EventBridge 调度器与您的加密数据一起存储的加密数据密钥。

 如果您在创建新计划时使用 EventBridge 调度器控制台创建新的执行角色，则 EventBridge 调度器会自动将所需的权限附加到您的执行角色。但是，如果您选择现有的执行角色，则必须向该角色添加所需的权限才能使用您的客户托管密钥。

### 管理密钥策略
<a name="key-management-key-policy"></a>

 默认情况下 AWS KMS，当您使用客户托管密钥创建客户托管密钥时，您的密钥具有以下密钥策略，可提供对计划执行角色的访问权限。

 或者，您可以将密钥策略的范围限制为仅提供对执行角色的访问权限。如果您只想将客户托管密钥与您的 EventBridge 日程安排器资源一起使用，则可以这样做。使用以下[密钥策略](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)示例来限制哪些 EventBridge 计划程序资源可以使用您的密钥。

## CloudTrail 事件示例
<a name="key-management-cloud-trail"></a>

 AWS CloudTrail 捕获所有 API 调用*事件*。这包括每当 S EventBridge cheduler 使用您的客户托管密钥解密您的数据时调用 API。以下示例显示了一个 CloudTrail 事件条目，该条目演示 S EventBridge cheduler 使用客户托管密钥使用该`kms:Decrypt`操作。

```
{
  "eventVersion": "1.08",
  "userIdentity": {
      "type": "AssumedRole",
      "principalId": "ABCDEABCD1AB12ABABAB0:70abcd123a123a12345a1aa12aa1bc12",
      "arn": "arn:aws:sts::123456789012:assumed-role/execution-role/70abcd123a123a12345a1aa12aa1bc12",
      "accountId": "123456789012",
      "accessKeyId": "ABCDEFGHI1JKLMNOP2Q3",
      "sessionContext": {
          "sessionIssuer": {
              "type": "Role",
              "principalId": "ABCDEABCD1AB12ABABAB0",
              "arn": "arn:aws:iam::123456789012:role/execution-role",
              "accountId": "123456789012",
              "userName": "execution-role"
          },
          "webIdFederationData": {},
          "attributes": {
              "creationDate": "2022-10-31T21:03:15Z",
              "mfaAuthenticated": "false"
          }
      }
    },
    "eventTime": "2022-10-31T21:03:15Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "Decrypt",
    "awsRegion": "eu-north-1",
    "sourceIPAddress": "13.50.87.173",
    "userAgent": "aws-sdk-java/2.17.295 Linux/4.14.291-218.527.amzn2.x86_64 OpenJDK_64-Bit_Server_VM/11.0.17+9-LTS Java/11.0.17 kotlin/1.3.72-release-468 (1.3.72) vendor/Amazon.com_Inc. md/internal exec-env/AWS_ECS_FARGATE io/sync http/Apache cfg/retry-mode/standard AwsCrypto/2.4.0",
    "requestParameters": {
        "keyId": "arn:aws:kms:us-west-2:123456789012:key/2321abab-2110-12ab-a123-a2b34c5abc67",
        "encryptionAlgorithm": "SYMMETRIC_DEFAULT",
        "encryptionContext": {
            "aws:scheduler:schedule:arn": "arn:aws:scheduler:us-west-2:123456789012:schedule/default/execution-role"
        }
    },
    "responseElements": null,
    "requestID": "request-id",
    "eventID": "event-id",
    "readOnly": true,
    "resources": [
        {
            "accountId": "123456789012",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-west-2:123456789012:key/2321abab-2110-12ab-a123-a2b34c5abc67"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "123456789012",
    "eventCategory": "Management",
    "tlsDetails": {
      "tlsVersion": "TLSv1.3",
      "cipherSuite": "TLS_AES_256_GCM_SHA384",
      "clientProvidedHostHeader": "kms.us-west-2.amazonaws.com"
  }
}
```