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

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

亚马逊如何 WorkMail 使用 Amazon KMS

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

亚马逊 WorkMail 概述

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

在将邮件写入磁盘之前,Amazon 会 WorkMail 透明地加密所有 Amazon WorkMail 组织邮箱中的所有邮件,并在用户访问邮件时透明地解密这些邮件。没有用于禁用加密的选项。为了保护保护消息的加密密钥,Amazon 集成 WorkMail 了 Amazon Key Management Service (Amazon KMS)。

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

亚马逊 WorkMail 加密

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

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

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

加密您的 Amazon 邮箱 WorkMail

组织的 KMS 密钥

创建 Amazon WorkMail 组织时,您可以Amazon KMS key为该组织选择一个。此 KMS 密钥保护该组织中的所有邮箱密钥。

如果您使用快速设置程序来创建您的组织,Amazon 将在您的中 WorkMail 使用 f Amazon 托管式密钥or Amazon WorkMail (aws/workmail) Amazon Web Services 账户。如果您使用标准设置,则可以选择Amazon 托管式密钥适用于 Amazon 的密钥 WorkMail 或您拥有和管理的客户托管密钥。您可以为每个组织选择相同的 KMS 密钥或不同的 KMS 密钥,但在选择 KMS 密钥后,无法更改它。

重要

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

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

每个邮箱的唯一加密密钥

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

为了保护邮箱密钥,Amazon WorkMail 要求Amazon KMS对组织的 KMS 密钥下的邮箱密钥进行加密。然后,它将加密的邮箱密钥存储在邮箱元数据中。

注意

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

每个消息的唯一加密密钥

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

创建新邮箱

Amazon WorkMail 创建新邮箱时,会使用以下过程来准备用于保存加密邮件的邮箱。

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

  • 亚马逊 WorkMail 称之为 “Amazon KMS加密” 操作。它为组织传入邮箱密钥和 Amazon KMS key 的标识符。Amazon KMS 返回使用 KMS 密钥加密的邮箱密钥的密文。

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

加密邮箱消息

要对消息进行加密,Amazon WorkMail 使用以下流程。

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

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

    Amazon WorkMail 调用 “Amazon KMS解密” 操作并传入加密的邮箱密钥。 Amazon KMS使用组织的 KMS 密钥解密邮箱密钥,然后将纯文本邮箱密钥返回给 Amazon。 WorkMail

  3. Amazon WorkMail 使用纯文本邮箱密钥和高级加密标准 (AES) 算法对外部的邮件密钥进行加密。Amazon KMS

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

解密邮箱消息

要解密消息,Amazon WorkMail 使用以下流程。

  1. Amazon WorkMail 调用 “Amazon KMS解密” 操作并传入加密的邮箱密钥。 Amazon KMS使用组织的 KMS 密钥解密邮箱密钥,然后将纯文本邮箱密钥返回给 Amazon。 WorkMail

  2. Amazon WorkMail 使用纯文本邮箱密钥和高级加密标准 (AES) 算法来解密外部的加密邮件密钥。Amazon KMS

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

缓存邮箱密钥

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

授权使用 KMS 密钥

当 Amazon WorkMail 使用加密操作时,它代表邮箱管理员行事。Amazon KMS key

要代表您将 Amazon KMS key 用于密钥,管理员必须拥有以下权限。您可以在 IAM policy 或密钥政策中指定这些所需的权限。

  • kms:Encrypt

  • kms:Decrypt

  • kms:CreateGrant

要允许 KMS 密钥仅用于来自亚马逊的请求 WorkMail,您可以将 kms: ViaService 条件密钥与workmail.<region>.amazonaws.com值一起使用。

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

密钥策略,适用于 Amazon 托管式密钥

只有当亚马逊 WorkMail 代表用户提出请求时,Ama WorkMail zon 的密钥策略才允许用户使用 KMS 密钥进行指定操作。Amazon 托管式密钥密钥策略不允许任何用户直接使用 KMS 密钥。

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

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

  • 允许账户和地区的用户使用 KMS 密钥进行加密操作和创建授权,但前提是请求来自亚马逊 WorkMail 代表他们。kms:ViaService 条件密钥可强制实施此限制。

  • 允许 Amazon Web Services 账户 创建 IAM policy 以允许用户查看 KMS 密钥属性和撤销授权。

以下是 Amazon 示例Amazon 托管式密钥的关键政策 WorkMail。

{ "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 使用授权为每个组织添加对 KMS 密钥的权限。要查看您账户中 KMS 密钥的授权,请使用ListGrants操作。

Amazon WorkMail 使用授权向组织的 KMS 密钥添加以下权限。

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

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

为了创建授权,Amaz CreateGranton 代表创建该组织的用户致 WorkMail 电。用于创建授权的权限来自密钥策略。当亚马逊 WorkMail 代表授权用户提出请求时,该政策允许账户用户调用CreateGrant组织的 KMS 密钥。

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

Amazon WorkMail 加密环境

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

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

在对的加密解密请求中,Amazon KMSAmazon WorkMail 使用加密环境,其中密钥为aws:workmail:arn,值为组织的亚马逊资源名称 (ARN)。

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

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

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

监控亚马逊与之的 WorkMail 互动 Amazon KMS

您可以使用Amazon CloudTrail和 Amaz CloudWatch on Logs 来跟踪亚马逊Amazon KMS代表您 WorkMail 发送的请求。

Encrypt

当您创建新邮箱时,Amazon WorkMail 会生成邮箱密钥并调用Amazon KMS对邮箱密钥进行加密。亚马逊 WorkMail 向发送加密请求,Amazon KMS其中包含明文邮箱密钥和亚马逊 WorkMail 组织的 KMS 密钥标识符。

记录 Encrypt 操作的事件与以下示例事件类似。用户是 Amazon WorkMail 服务。这些参数包括 KMS 密钥 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解密邮箱密钥。亚马逊 WorkMail 向发送解密请求,其中包含加密Amazon KMS的邮箱密钥和亚马逊 WorkMail组织的 KMS 密钥的标识符。

记录 Decrypt 操作的事件与以下示例事件类似。用户是 Amazon WorkMail 服务。这些参数包括未记录在日志中的加密邮箱密钥(作为密文 blob)和 Amazon 组织的加密上下文。 WorkMail Amazon KMS从密文中获取 KMS 密钥的 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" }