Amazon WorkMail 如何使用Amazon KMS - Amazon Key Management Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

Amazon WorkMail 如何使用Amazon KMS

本主题讨论 Amazon WorkMail 如何使用Amazon KMS来加密电子邮件。

Amazon WorkMail 概述

Amazon WorkMail是一种安全的托管式企业电子邮件和日历服务,支持用于现有桌面和移动电子邮件客户端。您可以创建一个 Amazon WorkMail 组织,并为其分配您拥有的一个或多个电子邮件域。然后,您可以为组织中的电子邮件用户和通讯组创建邮箱。

在将所有 Amazon WorkMail 组织的邮箱中的所有消息写入磁盘之前会以透明方式对这些消息进行加密,并在用户访问这些消息时以透明方式对其进行解密。没有用于禁用加密的选项。为了确保用于保护消息的加密密钥的安全,Amazon WorkMail 与Amazon Key Management Service(Amazon KMS)。

Amazon WorkMail 还提供了一个选项,用于允许用户发送已签名或已加密的邮件。此加密功能不使用 Amazon KMS。

Amazon WorkMail 加密

在 Amazon WorkMail 中,每个组织可以包含多个邮箱,组织中的每个用户都有一个邮箱。所有消息(包括电子邮件和日历项)都存储在用户的邮箱中。

为了保护 Amazon WorkMail 组织中邮箱的内容,Amazon WorkMail 会在所有邮箱消息写入磁盘之前对其进行加密。任何客户提供的信息均为明文形式存储。

每条消息都使用唯一的数据加密密钥进行加密。邮件密钥受邮箱密钥保护,邮箱密钥是仅用于该邮箱的唯一加密密钥。对于始终对 Amazon KMS 加密的组织,使用 Amazon KMS 客户主密钥 (CMK) 对邮箱密钥进行加密。下图显示了 Amazon KMS 中加密消息、加密消息密钥、加密邮箱密钥和组织中 CMK 之间的关系。


        加密您的 Amazon WorkMail 邮箱

组织的 CMK

当您创建 Amazon WorkMail 组织时,您可以选择Amazon KMS组织的客户主密钥 (CMK)。此 CMK 保护该组织中的所有邮箱密钥。

如果您使用快速设置过程创建您的组织时,Amazon WorkMail 会使用Amazon托管 CMK对于 Amazon WorkMail (aws/workmail) 在您的 Amazon Web Services 账户 。如果您使用标准设置中,您可以选择Amazon用于 Amazon WorkMail 的托管 CMK 或客户托管 CMK是您拥有和管理的。您可以为每个组织选择相同的 CMK 或不同的 CMK,但在选择 CMK 后,无法更改它。

重要

Amazon WorkMail 仅支持对称 CMK。不能使用非对称 CMK 来加密 Amazon WorkMail 中的数据。要获取确定 CMK 是对称还是非对称的帮助,请参阅识别对称 CMK 和非对称 CMK

要查找组织的 CMK,请使用记录对 Amazon KMS 的调用的 Amazon CloudTrail 日志条目。

每个邮箱的唯一加密密钥

当您创建新邮箱时,Amazon WorkMail 会生成一个唯一的 256 位邮箱。高级加密标准(AES) 对称加密密钥,称为邮箱密钥, 之外的Amazon KMS。Amazon WorkMail 使用邮箱密钥来保护邮箱中每封邮件的加密密钥。

为了保护邮箱密钥,Amazon WorkMail 会调用Amazon KMS来加密组织的 CMK 下的邮箱密钥。然后,它将加密的邮箱密钥存储在邮箱元数据中。

注意

Amazon WorkMail 使用对称邮箱加密密钥来保护消息密钥。之前,Amazon WorkMail 使用非对称 key pair 来保护每个邮箱。它使用公有密钥加密每个消息密钥,并使用私有密钥解密该密钥。私有邮箱密钥受组织的 CMK 保护。现有邮箱可能仍使用非对称邮箱密钥对。此更改不会影响邮箱或其消息的安全。

每个消息的唯一加密密钥

当将消息添加到邮箱时,Amazon WorkMail 为消息生成一个唯一的 256 位 AES 对称加密密钥。Amazon KMS。它使用消息密钥对消息进行加密。Amazon WorkMail 会在邮箱密钥下加密消息密钥,并将加密的消息密钥与消息一起存储。然后,它使用组织的 CMK 加密邮箱密钥。

创建新邮箱

当 Amazon WorkMail 创建新邮箱时,它使用以下过程准备邮箱以保存加密的消息。

  • Amazon WorkMail 为外部邮箱生成一个唯一的 256 位 AES 对称加密密钥。Amazon KMS。

  • Amazon WorkMail 调用Amazon KMS Encryptoperation. 它为组织传入邮箱密钥和客户主密钥 (CMK) 的标识符。Amazon KMS 返回使用 CMK 加密的邮箱密钥的密文。

  • Amazon WorkMail 将加密的邮箱密钥与邮箱元数据一起存储。

加密邮箱消息

为了加密消息,Amazon WorkMail 将使用以下过程。

  1. Amazon WorkMail 为消息生成一个唯一的 256 位 AES 对称密钥。它使用明文消息密钥和高级加密标准 (AES) 算法在 Amazon KMS 外加密消息。

  2. 为了保护邮箱密钥下的消息密钥,Amazon WorkMail 需要解密邮箱密钥(它始终以加密形式存储)。

    Amazon WorkMail 调用Amazon KMS Decrypt操作并传入已加密的邮箱密钥。Amazon KMS使用组织的 CMK 解密邮箱密钥,并将明文邮箱密钥返回到 Amazon WorkMail。

  3. Amazon WorkMail 使用明文邮箱密钥和高级加密标准 (AES) 算法在外加密消息密钥。Amazon KMS。

  4. Amazon WorkMail 将加密的消息密钥存储在加密消息的元数据中,以便对其进行解密。

解密邮箱消息

为了解密消息,Amazon WorkMail 将使用以下过程。

  1. Amazon WorkMail 调用Amazon KMS Decrypt操作并传入已加密的邮箱密钥。Amazon KMS使用组织的 CMK 解密邮箱密钥,并将明文邮箱密钥返回到 Amazon WorkMail。

  2. Amazon WorkMail 使用明文邮箱密钥和高级加密标准 (AES) 算法在外解密加密的消息密钥。Amazon KMS。

  3. Amazon WorkMail 使用明文消息密钥来解密加密的邮件。

缓存邮箱密钥

要提高性能并最大限度地减少对Amazon KMS,Amazon WorkMail 在本地为每个客户端缓存每个明文邮箱密钥最多 1 分钟。在缓存期结束时,将删除邮箱密钥。如果在缓存期间需要该客户端的邮箱密钥,Amazon WorkMail 可以从缓存中获取它而不是调用Amazon KMS。邮箱密钥在缓存中受保护,并且永远不会以明文形式写入磁盘中。

授权使用 CMK

当 Amazon WorkMail 在加密操作中使用客户主密钥 (CMK) 时,它代表邮箱管理员。

要代表您将 Amazon KMS 客户主密钥 (CMK) 用于密钥,管理员必须拥有以下权限。您可以在 IAM 策略或密钥策略中指定这些所需的权限。

  • kms:Encrypt

  • kms:Decrypt

  • kms:CreateGrant

要仅允许将 CMK 用于源自 Amazon WorkMail 的请求,可使用kms:ViaService条件键与workmail.<region>.amazonaws.com值。

您还可以在加密上下文中将密钥或值用作将 CMK 用于加密操作的条件。例如,可在 IAM 或密钥策略文档中使用字符串条件运算符,或在授权中使用授权约束。

的密钥策略Amazon托管 CMK

关键策略Amazon仅当 Amazon WorkMail 代表用户发出请求时,用于 Amazon WorkMail 的托管 CMK 才向用户授予将 CMK 用于指定操作的权限。密钥策略不允许任何用户直接使用 CMK。

此密钥策略与所有 Amazon 托管密钥的策略类似,均由该服务来建立。您无法更改密钥策略,但可以随时查看。有关详细信息,请参阅 查看密钥策略

密钥策略中的策略语句具有以下影响:

  • 仅当代表账户和区域中的用户发出请求时,才允许账户和区域中的用户使用 CMK 执行加密操作和创建授权。kms:ViaService 条件密钥可强制实施此限制。

  • 允许 Amazon Web Services 账户 来创建 IAM 策略以允许用户查看 CMK 属性和撤销授权。

以下是示例的密钥策略AmazonAmazon WorkMail 的托管 CMK。

{ "Version" : "2012-10-17", "Id" : "auto-workmail-1", "Statement" : [ { "Sid" : "Allow access through WorkMail for all principals in the account that are authorized to use WorkMail", "Effect" : "Allow", "Principal" : { "AWS" : "*" }, "Action" : [ "kms:Decrypt", "kms:CreateGrant", "kms:ReEncrypt*", "kms:DescribeKey", "kms:Encrypt" ], "Resource" : "*", "Condition" : { "StringEquals" : { "kms:ViaService" : "workmail.us-east-1.amazonaws.com", "kms:CallerAccount" : "111122223333" } } }, { "Sid" : "Allow direct access to key metadata to the account", "Effect" : "Allow", "Principal" : { "AWS" : "arn:aws:iam::111122223333:root" }, "Action" : [ "kms:Describe*", "kms:List*", "kms:Get*", "kms:RevokeGrant" ], "Resource" : "*" } ] }

使用授权来授权 Amazon WorkMail

除了密钥策略之外,Amazon WorkMail 使用授权将权限添加到每个组织的 CMK。要查看有关账户中 CMK 的授权,请使用 ListGrants 操作。

Amazon WorkMail 使用授权将以下权限添加到组织的 CMK。

  • 添加kms:Encrypt权限以允许 Amazon WorkMail 加密邮箱密钥。

  • 添加kms:Decrypt权限,以允许 Amazon WorkMail 使用 CMK 解密邮箱密钥。Amazon WorkMail 在授予中需要此权限,因为读取邮箱消息的请求使用正在阅读消息的用户的安全上下文。该请求不使用 Amazon Web Services 账户 。Amazon WorkMail 会在您选择组织的 CMK 时创建此授权。

要创建授权,Amazon WorkMail 会调用CreateGrant代表创建组织的用户。用于创建授权的权限来自密钥策略。此策略允许帐户用户调用CreateGrant当 Amazon WorkMail 代表授权用户发出请求时,组织的 CMK。

该密钥策略还允许账户根用户撤销对 Amazon 托管密钥的授权。但是,如果您撤销授权,Amazon WorkMail 将无法解密邮箱中的加密数据。

Amazon WorkMail 加密上下文

加密上下文是一组包含任意非机密数据的键值对。在请求中包含加密上下文以加密数据时,Amazon KMS 以加密方式将加密上下文绑定到加密的数据。要解密数据,您必须传入相同的加密上下文。

Amazon WorkMail 使用相同的加密上下文格式Amazon KMS加密操作。您可以使用加密上下文在审计记录和日志中标识加密操作(例如 Amazon CloudTrail),并将加密上下文用作在策略和授权中进行授权的条件。

在其EncryptDecrypt请求Amazon KMS,则 Amazon WorkMail 使用加密上下文,其中密钥为aws:workmail:arn,且该值是组织的 Amazon 资源名称 (ARN)。

"aws:workmail:arn":"arn:aws:workmail:region:account ID:organization/organization ID"

例如,以下加密上下文将示例组织 ARN 包含在美国东部 (俄亥俄州) (us-east-2) Region Region.

"aws:workmail:arn":"arn:aws:workmail:us-east-2:111122223333:organization/m-68755160c4cb4e29a2b2f8fb58f359d7"

监控 Amazon WorkMail 与Amazon KMS

您可以使用Amazon CloudTrail和 Amazon CloudWatch Logs 来跟踪 Amazon WorkMail 发送到Amazon KMS代表您。

Encrypt

当您创建新邮箱时,Amazon WorkMail 会生成一个邮箱密钥并调用Amazon KMS来加密邮箱密钥。Amazon WorkMail 发送Encrypt请求Amazon KMS使用明文邮箱密钥和 Amazon WorkMail 组织的 CMK 标识符。

记录 Encrypt 操作的事件与以下示例事件类似。用户是 Amazon WorkMail 服务。这些参数包括 CMK ID(keyId) 和 Amazon WorkMail 组织的加密上下文。Amazon WorkMail 还传入邮箱密钥,但不会记录在 CloudTrail 日志中。

{ "eventVersion": "1.05", "userIdentity": { "type": "AWSService", "invokedBy": "workmail.eu-west-1.amazonaws.com" }, "eventTime": "2019-02-19T10:01:09Z", "eventSource": "kms.amazonaws.com", "eventName": "Encrypt", "awsRegion": "eu-west-1", "sourceIPAddress": "workmail.eu-west-1.amazonaws.com", "userAgent": "workmail.eu-west-1.amazonaws.com", "requestParameters": { "encryptionContext": { "aws:workmail:arn": "arn:aws:workmail:eu-west-1:111122223333:organization/m-c6981ff7642446fa8772ba99c690e455" }, "keyId": "arn:aws:kms:eu-west-1:111122223333:key/1a2b3c4d-5e6f-1a2b-3c4d-5e6f1a2b3c4d" }, "responseElements": null, "requestID": "76e96b96-7e24-4faf-a2d6-08ded2eaf63c", "eventID": "d5a59c18-128a-4082-aa5b-729f7734626a", "readOnly": true, "resources": [ { "ARN": "arn:aws:kms:eu-west-1:111122223333:key/1a2b3c4d-5e6f-1a2b-3c4d-5e6f1a2b3c4d", "accountId": "111122223333", "type": "AWS::KMS::Key" } ], "eventType": "AwsApiCall", "recipientAccountId": "111122223333", "sharedEventID": "d08e60f1-097e-4a00-b7e9-10bc3872d50c" }

Decrypt

当您添加、查看或删除邮箱邮件时,Amazon WorkMail 会询问Amazon KMS来解密邮箱密钥。Amazon WorkMail 发送Decrypt请求Amazon KMS使用加密的邮箱密钥和 Amazon WorkMail 组织的 CMK 标识符。

记录 Decrypt 操作的事件与以下示例事件类似。用户是 Amazon WorkMail 服务。参数包含未记录在日志中的加密的邮箱密钥(作为密文 blob)和 Amazon WorkMail 组织的加密上下文。Amazon KMS将从密文中派生 CMK 的 ID。

{ "eventVersion": "1.05", "userIdentity": { "type": "AWSService", "invokedBy": "workmail.eu-west-1.amazonaws.com" }, "eventTime": "2019-02-20T11:51:10Z", "eventSource": "kms.amazonaws.com", "eventName": "Decrypt", "awsRegion": "eu-west-1", "sourceIPAddress": "workmail.eu-west-1.amazonaws.com", "userAgent": "workmail.eu-west-1.amazonaws.com", "requestParameters": { "encryptionContext": { "aws:workmail:arn": "arn:aws:workmail:eu-west-1:111122223333:organization/m-c6981ff7642446fa8772ba99c690e455" } }, "responseElements": null, "requestID": "4a32dda1-34d9-4100-9718-674b8e0782c9", "eventID": "ea9fd966-98e9-4b7b-b377-6e5a397a71de", "readOnly": true, "resources": [ { "ARN": "arn:aws:kms:eu-west-1:111122223333:key/1a2b3c4d-5e6f-1a2b-3c4d-5e6f1a2b3c4d", "accountId": "111122223333", "type": "AWS::KMS::Key" } ], "eventType": "AwsApiCall", "recipientAccountId": "111122223333", "sharedEventID": "241e1e5b-ff64-427a-a5b3-7949164d0214" }