AWS Key Management Service
開発者ガイド

Amazon WorkMail で AWS KMS を使用する方法

このトピックでは、Amazon WorkMail で AWS KMS を使用して E メールメッセージを暗号化する方法について説明します。

Amazon WorkMail の概要

Amazon WorkMail はセキュリティに優れたマネージド型の企業向け E メールおよびカレンダーサービスであり、デスクトップとモバイルの既存の E メールクライアントに対応しています。Amazon WorkMail 組織を作成し、所有している 1 つ以上の E メールドメインにその組織を割り当てることができます。その後、組織内の E メールユーザーとディストリビューショングループのメールボックスを作成できます。

Amazon WorkMail は、Amazon WorkMail 組織内全体のメールボックスにあるすべてのメールを、ディスクに書き込まれる前に透過的に暗号化し、ユーザーがメッセージにアクセスする際に透過的に復号します。暗号化を無効にするオプションはありません。メッセージを保護する暗号化キーを保護するために、Amazon WorkMail は AWS Key Management Service (AWS KMS) と統合されています。

Amazon WorkMail では、ユーザーが署名または暗号化された E メールを送信できるオプションも用意されています。この暗号化機能は AWS KMS を使用していません。

Amazon WorkMail の暗号化

Amazon WorkMail では、各組織に複数のメールボックスを含め、組織のユーザーごとに 1 つ含めることができます。E メール、カレンダーの項目などのすべてのメッセージはユーザーのメールボックスに保存されます。

Amazon WorkMail 組織のメールボックス内にあるコンテンツを保護するために、Amazon WorkMail はメールボックス内のすべてのメッセージを、ディスクに書き込まれる前に暗号化します。お客様から提供された情報がプレーンテキストで保存されることはありません。

各メッセージは、一意のデータ暗号化キーで暗号化されます。メッセージキーは、そのメールボックスでのみ使用される一意の暗号化キーであるメールボックスキーで保護されています。メールボックスキーは、組織の AWS KMS カスタマーマスターキー (CMK) で暗号化されるため、AWS KMS が暗号化されないまま残されることは決してありません。次の図では、AWS KMS における、暗号化されたメッセージ、暗号化されたメッセージキー、暗号化されたメールボックスキー、組織の CMK の関係を示しています。


        Amazon WorkMail メールボックスの暗号化

組織の CMK

Amazon WorkMail 組織を作成する際、その組織の AWS KMS カスタマーマスターキー (CMK) を選択できます。この CMK は組織内のすべてのメールボックスキーを保護します。

組織の作成に高速セットアップの手順を使用する場合、Amazon WorkMail は AWS アカウントの Amazon WorkMail (aws/workmail) にAWS 管理 CMK を使用します。標準セットアップを使用する場合は、Amazon WorkMail に AWS 管理 CMK か、所有および管理するカスタマー管理 CMK のいずれかを選択できます。各組織に同じ CMK を使用するか異なる CMK を使用するかを選択できますが、一度選択した CMK を変更することはできません。

組織の CMK を見つけるには、AWS KMS への呼び出しを記録する AWS CloudTrail ログエントリを使用します。

メールボックスごとに一意の暗号化キー

Amazon WorkMail は新しいメールボックスを作成する際、メールボックスに一意の 256 ビット Advanced Encryption Standard (AES) 対称暗号化キーを AWS KMS の外部に作成します (メールボックスキー)。Amazon WorkMail はメールボックスキーを使用してメールボックス内の各メッセージの暗号化キーを保護します。

メールボックスキーを保護するために、Amazon WorkMail は AWS KMS を呼び出して組織の CMK でメールボックスキーを暗号化します。その後、メールボックスのメタデータに暗号化されたメールボックスキーを保存します。

注記

Amazon WorkMail は対称メールボックス暗号化キーを使用してメッセージキーを保護します。以前は、Amazon WorkMail は非対称キーペアを使用して各メールボックスを保護していました。パブリックキーを使用して各メッセージキーを暗号化し、プライベートキーで復号していました。プライベートメールボックスキーは組織の CMK で保護されていました。既存のメールボックスは今も非対称メールボックスキーペアを使用している場合があります。この変更により、メールボックスやそのメッセージのセキュリティに影響が生じることはありません。

メッセージごとに一意の暗号化キー

メールボックスにメッセージが追加されると、Amazon WorkMail はそのメッセージの一意の 256 ビット AES 対称暗号化キーを AWS KMS の外部に生成します。このメッセージキーを使用してメッセージを保護します。Amazon WorkMail はメールボックスキーでメッセージキーを暗号化し、暗号化されたメッセージキーをメッセージとともに保存します。次に、組織の CMK でメールボックスキーを暗号化します。

新しいメールボックスの作成

Amazon WorkMail は新しいメールボックスを作成する際、次の手順を使用して、暗号化されたメッセージを保持するためのメールボックスを準備します。

  • Amazon WorkMail はそのメールボックスの一意の 256 ビット AES 対称暗号化キーを AWS KMS の外部に生成します。

  • Amazon WorkMail は AWS KMS 暗号化オペレーションを呼び出します。メールボックスキーと組織のカスタマーマスターキー (CMK) の識別子を渡します。AWS KMS は CMK で暗号化されたメールボックスキーの暗号化テキストを返します。

  • Amazon WorkMail は暗号化されたメールボックスキーをメールボックスのメタデータとともに保存します。

メールボックスメッセージの暗号化

メッセージを暗号化するために、Amazon WorkMail は次の手順を使用します。

  1. Amazon WorkMail はメッセージに一意の 256 ビット AES 対称キーを生成します。プレーンテキストのメッセージキーと Advanced Encryption Standard (AES) アルゴリズムを使用して、AWS KMS の外部でメッセージを暗号化します。

  2. メールボックスキーでメッセージを保護するために、Amazon WorkMail は、常に暗号化された形式で保存されているメールボックスキーを復号する必要があります。

    Amazon WorkMail は AWS KMS 復号オペレーションを呼び出し、暗号化されたメールボックスキーで渡します。AWS KMS は組織の CMK を使用してメールボックスキーを復号し、Amazon WorkMail にプレーンテキストのメールボックスキーを返します。

  3. Amazon WorkMail では、プレーンテキストのメールボックスキーと Advanced Encryption Standard (AES) アルゴリズムを使用して、AWS KMS の外部でメッセージキーを暗号化します。

  4. Amazon WorkMail は暗号化されたメッセージキーを暗号化されたメッセージのメタデータに保存し、復号に利用できるようにします。

メールボックスメッセージの復号

Amazon WorkMail は、メッセージを復号するために次のプロセスを使用します。

  1. Amazon WorkMail は AWS KMS 復号オペレーションを呼び出し、暗号化されたメールボックスキーで渡します。AWS KMS は組織の CMK を使用してメールボックスキーを復号し、Amazon WorkMail にプレーンテキストのメールボックスキーを返します。

  2. Amazon WorkMail では、プレーンテキストのメールボックスキーと Advanced Encryption Standard (AES) アルゴリズムを使用して、AWS KMS の外部で暗号化されたメッセージキーを復号します。

  3. Amazon WorkMail はプレーンテキストのメッセージキーを使用して、暗号化されたメッセージを復号します。

メールボックスキーのキャッシュ

パフォーマンスを向上し AWS KMS への呼び出しを最小限に抑えるために、Amazon WorkMail はクライアントそれぞれのプレーンテキストのメールボックスキーを最長 1 分間ローカルにキャッシュします。キャッシュ期間の終了時に、メールボックスキーは削除されます。キャッシュ期間中にクライアントのメールボックスキーが必要な場合、Amazon WorkMail は AWS KMS を呼び出すのではなく、キャッシュからメールボックスキーを取得できます。メールボックスキーはキャッシュで保護されており、プレーンテキストでディスクに書き込まれることはありません。

CMK の使用の許可

Amazon WorkMail は、暗号化オペレーションでカスタマーマスターキー (CMK) を使用する際、メールボックス管理者の代理として機能します。

代理として AWS KMS カスタマーマスターキー (CMK) を使用するには、管理者には次のアクセス許可が必要になります。IAM ポリシーまたはキーポリシーで、これらの必要なアクセス許可を指定できます。

  • kms:Encrypt

  • kms:Decrypt

  • kms:CreateGrant

Amazon WorkMail から実行されるリクエストにのみ CMK が使用されるようにするには、値 workmail.<region>.amazonaws.comkms:ViaService 条件キーを使用できます。

また、暗号化オペレーションに CMK を使用する条件として、暗号化コンテキストでキーまたは値を使用することもできます。たとえば、IAM またはキーポリシードキュメントで文字列条件演算子を使用するか、許可で許可の制約を使用できます。

組織 CMK のキーポリシー

Amazon WorkMail 用の AWS 管理 CMK のキーポリシーにより、Amazon WorkMail がユーザーに代わってリクエストを行うときのみに、指定されたオペレーションに CMK を使用するアクセス許可がユーザーに付与されます。このキーポリシーでは、ユーザーが CMK を直接使用することは許可されません。

このキーポリシーは、すべての AWS 管理キーと同様に、サービスによって確立されます。このポリシーを変更することはできませんが、いつでも表示できます。アカウントの Amazon WorkMail CMK のキーポリシーを取得するには、GetKeyPolicy オペレーションを使用します。

このキーポリシーのポリシーステートメントには次の効果があります。

  • アカウントおよびリージョンのユーザーに、代理で Amazon WorkMail からリクエストを受信したときのみに、CMK を使用して暗号化オペレーションおよび権限付与の作成を実行できるようにします。kms:ViaService 条件キーで、この制限を適用します。

  • AWS アカウントが、CMK プロパティを表示し、許可を取り消すことをユーザーに許可する IAM ポリシーを作成できるようにします。

以下に示すのは、Amazon WorkMail 用の AWS 管理 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 は権限付与でこのアクセス許可を必要とします。リクエストは AWS アカウントの認証情報を使用しません。組織の CMK を選択する際に Amazon WorkMail はこの権限付与を作成します。

権限付与を作成するために、Amazon WorkMail は組織を作成したユーザーに代わって CreateGrant を呼び出します。権限付与を作成するアクセス許可はキーポリシーから付与されます。このポリシーは、Amazon WorkMail が承認されたユーザーの代わりにリクエストを作成する際に、アカウントのユーザーが組織の CMK で CreateGrant を呼び出せるようにします。

また、キーポリシーはアカウントルートが AWS 管理キーで権限付与を解除することを許可します。ただし権限付与を解除すると、Amazon WorkMail はメールボックス内の暗号化されたデータを復号できません。

Amazon WorkMail 暗号化コンテキスト

暗号化コンテキストは、任意のシークレットデータを含まない、一連のキーと値のペアです。データを暗号化するリクエストに暗号化コンテキストを組み込むと、AWS KMS は暗号化コンテキストを暗号化されたデータに暗号化してバインドします。データを復号化するには、同じ暗号化コンテキストに渡す必要があります。

Amazon WorkMail は、すべての AWS KMS 暗号化オペレーションで同じ暗号化コンテキストフォーマットを使用します。暗号化コンテキストを使用して、AWS CloudTrail などの監査レコードとログ内の暗号化オペレーションを識別できます。また、ポリシーと許可の認可の条件として使用できます。

AWS KMS に対する暗号化リクエストと復号リクエストで、Amazon WorkMail は、キーがaws:workmail:arn であり値が組織の Amazon リソースネーム (ARN) である暗号化コンテキストを使用します。

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

たとえば、次の暗号化コンテキストには 米国東部 (オハイオ) (us-east-2) リージョンの組織の ARN のサンプルが含まれています。

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

AWS KMS を使用した Amazon WorkMail のモニタリング操作

AWS CloudTrail と Amazon CloudWatch Logs を使用して、Amazon WorkMail がユーザーに代わって AWS KMS に送信するリクエストを追跡できます。

暗号化

新しいメールボックスを作成する際、Amazon WorkMail はメールボックスキーを生成して AWS KMS を呼び出し、メールボックスキーを暗号化します。Amazon WorkMail は暗号化リクエストをプレーンテキストのメールボックスキーおよび Amazon WorkMail 組織の CMK の識別子とともに AWS KMS に送信します。

Encrypt オペレーションを記録するイベントは、次のようなサンプルイベントになります。ユーザーは Amazon WorkMail サービスです。パラメータには Amazon WorkMail 組織の CMK ID (keyId) および暗号化コンテキストが含まれます。また、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" }

復号

メールボックスのメッセージを追加、表示、または削除する際、Amazon WorkMail は AWS KMS にメールボックスキーを復号するよう依頼します。Amazon WorkMail は AWS KMS に復号リクエストを暗号化メールボックスキーおよび Amazon WorkMail 組織の CMK の識別子とともに送信します。

Decrypt オペレーションを記録するイベントは、次のようなサンプルイベントになります。ユーザーは Amazon WorkMail サービスです。パラメータには暗号化メールボックスキー (暗号化テキストの blob 形式) が含まれ、ログおよび Amazon WorkMail 組織の暗号化コンテキストには記録されません。AWS 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" }