EventBridge 调度器中的静态加密 - EventBridge 调度器

EventBridge 调度器中的静态加密

本节介绍了 Amazon EventBridge 调度器如何加密和解密您的静态数据。静态数据是存储在 EventBridge 调度器和服务的底层组件中的数据。EventBridge 调度器与 AWS Key Management Service (AWS KMS) 集成,可使用 AWS KMS key 加密和解密您的数据。EventBridge 调度器支持两种类型的 KMS 密钥:AWS 拥有的密钥客户托管密钥

注意

EventBridge 调度器仅支持使用对称加密 KMS 密钥。

AWS 拥有的密钥 是 AWS 服务拥有并管理以用于多个 AWS 账户中的 KMS 密钥。尽管 AWS 拥有的密钥 EventBridge 调度器使用的密钥未存储在您的 AWS 账户中,但 EventBridge 调度器使用它们来保护您的数据和资源。默认情况下,EventBridge 调度器使用 AWS 拥有的密钥对您的所有数据进行加密和解密。您无需管理自己的 AWS 拥有的密钥 或其访问策略。当 EventBridge 调度器使用 AWS 拥有的密钥 保护您的数据时,您无需支付任何费用,其使用量也不会计入您账户中的 AWS KMS 配额。

客户托管密钥是在您的 AWS 账户中由您创建、拥有和管理的 KMS 密钥。如果您的特定用例要求您控制和审核在 EventBridge 调度器上保护您数据的加密密钥,则可以使用客户托管密钥。如果您选择客户托管密钥,您必须管理密钥策略。客户托管密钥会产生月费以及超过免费套餐使用量的费用。使用客户托管密钥也算作 AWS KMS 配额的一部分。有关定价的更多信息,请参阅 AWS Key Management Service 定价

加密构件

下表描述了 EventBridge 调度器在静态状态下加密的不同数据类型,以及每个类别支持哪种类型的 KMS 密钥。

数据类型 描述 AWS 拥有的密钥 客户托管密钥

有效负载(最大 256KB)

您在配置要交付到目标的计划时在计划的 TargetInput 参数中指定的数据。

支持

支持

标识符和状态

计划的唯一名称和状态(启用、禁用)。

支持

不支持

计划配置

计划表达式,例如重复计划的 rate 或 cron 表达式,一次性调用的时间戳,以及计划的开始日期、结束日期和时区。

支持

不支持

目标配置

目标的 Amazon 资源名称(ARN)以及其他与目标相关的配置详细信息。

支持

不支持

调用和失败行为配置

灵活的时间窗配置、计划的重试策略以及用于失败交付的死信队列详细信息。

支持

不支持

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

使用以下 管理 KMS 密钥 部分了解您必须如何管理您的 IAM 资源和密钥策略,才能将客户托管密钥与 EventBridge 调度器一起使用。

管理 KMS 密钥

您可以选择提供客户托管密钥来加密和解密您的计划交付给目标的有效负载。EventBridge 调度器可加密和解密您的有效负载中最多 256KB 的数据。使用客户托管密钥会产生月费以及超过免费套餐使用量的费用。使用客户托管密钥算作 AWS KMS 配额的一部分。有关定价的更多信息,请参阅 AWS Key Management Service 定价

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

注意

EventBridge 调度器不支持使用授权来获得临时权限。

使用以下部分了解如何管理 AWS KMS 密钥策略以及所需的 IAM 权限在 EventBridge 调度器上使用客户托管密钥。

添加 IAM 权限

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

客户托管密钥的基于身份的权限

在创建计划时,您必须将以下 AWS KMS 操作添加到与任何调用 EventBridge 调度器 API 的主体(用户、组或角色)关联的权限策略中。

  • kms:DescribeKey:验证您提供的密钥是否为对称加密 KMS 密钥所必需。

  • kms:GenerateDataKey:生成 EventBridge 调度器用于执行客户端加密的数据密钥所必需。

  • kms:Decrypt:解密 EventBridge 调度器与您的加密数据一起存储的加密数据密钥所必需。

除以下操作外,还包括这些内容:

  • scheduler:*

  • iam:PassRole:需要传递执行角色。

客户托管密钥的执行角色权限

您必须在计划的执行角色权限策略中添加以下操作,以便在解密数据时提供对 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 调度器会将所需的权限自动附加到您的执行角色。但是,如果您选择现有的执行角色,则必须向该角色添加所需的权限才能使用您的客户托管密钥。

管理密钥策略

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

或者,您可以将密钥策略的范围限制为仅提供对执行角色的访问权限。如果您只想将客户托管密钥用于 EventBridge 调度器资源,则可以执行此操作。使用以下密钥策略示例来限制哪些 EventBridge 调度器资源可以使用您的密钥。

CloudTrail 事件示例

AWS CloudTrail 会将所有 API 调用作为事件捕获。这包括每当 EventBridge 调度器使用您的客户托管密钥解密您的数据时进行的 API 调用。以下示例显示了一个 CloudTrail 事件条目,该条目演示了通过客户托管密钥使用 kms:Decrypt 操作的 EventBridge 调度器。

{ "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" } }