Amazon DocumentDB エラスティッククラスターで保管中のデータ暗号化 - Amazon DocumentDB

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon DocumentDB エラスティッククラスターで保管中のデータ暗号化

以下のトピックは、Amazon DocumentDB AWS Key Management Service エラスティッククラスターの暗号化キーについて学び、作成し、モニタするのに役立ちます。

Amazon DocumentDB のエラスティッククラスターは、キー管理のために AWS Key Management Service (AWS KMS) と自動的に統合され、データを保護するためにエンベロープ暗号化として知られている方法を使用します。エンベロープ暗号化の仕組みの詳細については、AWS Key Management Service デベロッパーガイドの「エンベロープ暗号化」を参照してください。

AWS KMS key は、キーの論理的な表現です。KMS キーには、キー ID、作成日、説明、キーステータスなどのメタデータが含まれます。KMS キーには、データの暗号化と復号に使用されるキーマテリアルも含まれています。KMS キーの詳細については、AWS Key Management Service デベロッパーガイドの「AWS KMS keys 」を参照してください。

Amazon DocumentDB エラスティッククラスターは、次の 2 種類のキーによる暗号化をサポートしています。

  • AWS 所有キー — Amazon DocumentDB エラスティッククラスターは、デフォルトでこれらのキーを使用して、個人を特定できるデータを自動的に暗号化します。AWS が所有するキーを表示、管理、使用したり、その使用を監査したりすることはできません。ただし、データを暗号化するキーを保護するためのアクションの実施やプログラムの変更を行う必要はありません。詳細については、AWS Key Management Service デベロッパーガイドの「AWS 所有キー」を参照してください。

  • カスタマーマネージドキー — お客様作成し、所有し、管理する対称 AWS KMS keys。この暗号化層はユーザーが完全に制御できるため、次のようなタスクを実行できます。

    • キーポリシーの策定と維持

    • IAM ポリシーとグラントの策定と維持

    • キーポリシーの有効化と無効化

    • キー暗号化マテリアルのローテーション

    • タグの追加

    • キーエイリアスの作成

    • 削除のためのキースケジューリング

    詳細については、「AWS Key Management Service デベロッパーガイド」の「カスタマーマネージドキー」を参照してください。

重要

Amazon DocumentDB がサポートしているのは対称 KMS キーのみであるため、クラスターの暗号化には対称暗号化 KMS キーを使用して必要があります。Amazon DocumentDB エラスティッククラスター内のデータの暗号化に非対称 KMS キー を使用しないでください。詳細については、AWS Key Management Serviceデベロッパーガイドの「AWS KMS の非対称キーの」を参照してください。

Amazon DocumentDB がクラスターの暗号化キーにアクセスできなくなった場合、例えばキーへのアクセス権が失効した場合など、暗号化されたクラスターは終了状態になります。この場合、クラスターはバックアップからのみ復元できます。Amazon DocumentDB では、バックアップは常に 1 日間有効になります。また、暗号化された Amazon DocumentDB クラスターのキーを無効にすると、最終的にそのクラスタに対する読み取りおよび書き込みのアクセス権は失われます。Amazon DocumentDB で、アクセスできないキーで暗号化されたクラスターが発生すると、クラスターが終了状態になります。この場合、クラスターは使用できなくなり、データベースの現在の状態を復元することはできません。クラスターを復元するには、Amazon DocumentDB の暗号化キーへのアクセスを再び有効にした後、バックアップからクラスターを復元します。

重要

暗号化されたクラスターの KMS キーを作成した後は、そのクラスターを変更することはできません。暗号化されたエラスティッククラスターを作成する前に、暗号化キーの要件を確認してください。

Amazon DocumentDB エラスティッククラスターが AWS KMS でグラントを使用する方法

Amazon DocumentDB エラスティック クラスター には、カスタマーマネージドキーを使用するためのグラントが必要です。

カスタマーマネージドキーで暗号化されたクラスターを作成すると、Amazon DocumentDB エラスティッククラスターは、AWS KMS に CreateGrant リクエストを送信することで、ユーザーに代わって許可の付与を作成します。AWS KMS のグラントは、Amazon DocumentDB エラスティック クラスター が顧客のアカウントの KMS キーへアクセスできるようにするために使用されます。

Amazon DocumentDB エラスティッククラスターでは、以下の内部操作にカスタマーマネージドキーを使用するためのグラントが必要です。

  • トラッカーまたはジオフェンスコレクションの作成時に入力した対称 KMS キー ID DescribeKey が有効であることを確認するリクエストを AWS KMS に送信します。

  • GenerateDataKey リクエストを AWS KMS に送信して、カスタマーマネージドキーで暗号化されたデータキーを生成します。

  • 暗号化されたデータキーを復号して、それらのキーによるデータを暗号化できるようにするには、Decrypt リクエストを AWS KMS に送信します。

  • グラントへのアクセスの取り消しや、カスタマーマネージドキーに対するサービスのアクセスの取り消しは、いつでもできます。これを行うと、Amazon DocumentDB エラスティッククラスターはカスタマーマネージドキーによって暗号化されたすべてのデータにアクセスできなくなり、そのデータに依存しているオペレーションが影響を受けます。

カスタマーマネージドキーを作成する

カスタマーマネージドキーを作成するには、AWS マネジメントコンソール または AWS KMS API を使用します。

対称カスタマー管理キーの作成

AWS Key Management Service デベロッパーガイド にある 対称カスタマーマネージドキーの作成 ステップに従います。

キーポリシー

キーポリシーは、カスタマーマネージドキーへのアクセスを制御します。すべてのカスタマーマネージドキーには、キーポリシーが 1 つだけ必要です。このポリシーには、そのキーを使用できるユーザーとその使用方法を決定するステートメントが含まれています。キーポリシーは、カスタマーマネージドキーの作成時に指定できます。詳細については、AWS Key Management Service デベロッパーガイドの「AWS Key Management Service 概要」にあるKMS キーアクセス情報を参照してください。

Amazon DocumentDB エラスティック クラスター で顧客管理キーを使用するには、キーポリシーで次の API オペレーションを許可する必要があります。

  • kms:CreateGrant - カスタマーマネージドキーに許可を追加します。この権限は、指定された KMS キーへのアクセスを制御します。これにより、必要な許可の付与オペレーションに対し Amazon Location Service がアクセスできるようにします。許可の詳細については、AWS Key Management Service デベロッパーガイドの「許可の使用 AWS KMS」 を参照してください。

  • kms:DescribeKey — お客様が管理するキーの詳細を提供し、DocDB-Elastic がキーを検証できるようにします。

  • kms:Decrypt – 暗号化されたデータにアクセスするために、Docdb-Elastic が保存された暗号化データキーを使用できるようにします。

  • kms:GenerateDataKey – Docdb-Elastic が暗号化されたデータキーを生成して保存できるようにします。データキーはすぐに暗号化に使用されないからです。

詳細については、AWS Key Management Serviceデベロッパーガイドの「AWS キーポリシーのサービスの権限」と「 キーアクセスのトラブルシューティング」を参照してください。

IAM ポリシーによるカスタマーマネージドキーアクセスの制限

KMS キーポリシーに加えて、IAM ポリシーで KMS キー権限を制限することもできます。

さまざまな方法で、IAM ポリシー をより厳しくすることができます。例えば、Amazon DocumentDB エラスティッククラスターを起点とするリクエストにのみカスタマーマネージドキーを使用できるようにするには、docdb-elastic.<region-name>.amazonaws.com 値で kms:ViaService 条件キーを使用します。

詳細については、AWS Key Management Service デベロッパーガイド他のアカウントのユーザーに KMS キーの使用を許可するをご参照ください。

Amazon DocumentDB エラスティック クラスター の暗号化キーのモニタリング

Docdb Elastic リソースで AWS KMS key カスタマーマネージドキーを使用する場合には、AWS CloudTrail または Amazon CloudWatch Logsを使用して、Docdb Elastic が AWS KMS に送信するリクエストを追跡できます。

以下の例はカスタマーマネージドキーで暗号化されたデータにアクセスするために Amazon DocumentDB AWS KMS key エラスティッククラスターによって呼び出されるオペレーションをモニタする、CreateGrantGenerateDataKeyWithoutPlainTextDecryptDescribeKey の AWS CloudTrail イベントです。

CreateGrant
{ "eventVersion": "1.08", "userIdentity": { "type": "AssumedRole", "principalId": "AROAIGDTESTANDEXAMPLE:Sampleuser01", "arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE3", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "AROAIGDTESTANDEXAMPLE", "arn": "arn:aws:iam::111122223333:assumed-role/Admin/Sampleuser01", "accountId": "111122223333", "userName": "Sampleuser01" }, "webIdFederationData": {}, "attributes": { "creationDate": "2023-05-09T23:04:20Z", "mfaAuthenticated": "false" } }, "invokedBy": "docdb-elastic.amazonaws.com" }, "eventTime": "2023-05-09T23:55:48Z", "eventSource": "kms.amazonaws.com", "eventName": "CreateGrant", "awsRegion": "us-east-1", "sourceIPAddress": "docdb-elastic.amazonaws.com", "userAgent": "docdb-elastic.amazonaws.com", "requestParameters": { "retiringPrincipal": "docdb-elastic.us-east-1.amazonaws.com", "granteePrincipal": "docdb-elastic.us-east-1.amazonaws.com", "operations": [ "Decrypt", "Encrypt", "GenerateDataKey", "GenerateDataKeyWithoutPlaintext", "ReEncryptFrom", "ReEncryptTo", "CreateGrant", "RetireGrant", "DescribeKey" ], "keyId": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE" }, "responseElements": { "grantId": "0ab0ac0d0b000f00ea00cc0a0e00fc00bce000c000f0000000c0bc0a0000aaafSAMPLE", "keyId": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE" }, "requestID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE", "eventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE", "readOnly": false, "resources": [ { "accountId": "AWS Internal", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE" } ], "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "111122223333", "eventCategory": "Management" }
GenerateDataKey
{ "eventVersion": "1.08", "userIdentity": { "type": "AssumedRole", "principalId": "AROAIGDTESTANDEXAMPLE:Sampleuser01", "arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE3", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "AROAIGDTESTANDEXAMPLE", "arn": "arn:aws:iam::111122223333:assumed-role/Admin/Sampleuser01", "accountId": "111122223333", "userName": "Sampleuser01" }, "webIdFederationData": {}, "attributes": { "creationDate": "2023-05-10T18:02:59Z", "mfaAuthenticated": "false" } }, "invokedBy": "docdb-elastic.amazonaws.com" }, "eventTime": "2023-05-10T18:03:25Z", "eventSource": "kms.amazonaws.com", "eventName": "GenerateDataKey", "awsRegion": "us-east-1", "sourceIPAddress": "docdb-elastic.amazonaws.com", "userAgent": "docdb-elastic.amazonaws.com", "requestParameters": { "keySpec": "AES_256", "keyId": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE" }, "responseElements": null, "requestID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE", "eventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE", "readOnly": true, "resources": [ { "accountId": "AWS Internal", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE" } ], "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "111122223333", "eventCategory": "Management" }
Decrypt
{ "eventVersion": "1.08", "userIdentity": { "type": "AssumedRole", "principalId": "AROAIGDTESTANDEXAMPLE:Sampleuser01", "arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE3", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "AROAIGDTESTANDEXAMPLE", "arn": "arn:aws:iam::111122223333:assumed-role/Admin/Sampleuser01", "accountId": "111122223333", "userName": "Sampleuser01" }, "webIdFederationData": {}, "attributes": { "creationDate": "2023-05-10T18:05:49Z", "mfaAuthenticated": "false" } }, "invokedBy": "docdb-elastic.amazonaws.com" }, "eventTime": "2023-05-10T18:06:19Z", "eventSource": "kms.amazonaws.com", "eventName": "Decrypt", "awsRegion": "us-east-1", "sourceIPAddress": "docdb-elastic.amazonaws.com", "userAgent": "docdb-elastic.amazonaws.com", "requestParameters": { "encryptionAlgorithm": "SYMMETRIC_DEFAULT" }, "responseElements": null, "requestID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE", "eventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE", "readOnly": true, "resources": [ { "accountId": "AWS Internal", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE" } ], "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "111122223333", "eventCategory": "Management" }
DescribeKey
{ "eventVersion": "1.08", "userIdentity": { "type": "AssumedRole", "principalId": "AROAIGDTESTANDEXAMPLE:Sampleuser01", "arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE3", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "AROAIGDTESTANDEXAMPLE", "arn": "arn:aws:iam::111122223333:assumed-role/Admin/Sampleuser01", "accountId": "111122223333", "userName": "Sampleuser01" }, "webIdFederationData": {}, "attributes": { "creationDate": "2023-05-09T23:04:20Z", "mfaAuthenticated": "false" } }, "invokedBy": "docdb-elastic.amazonaws.com" }, "eventTime": "2023-05-09T23:55:48Z", "eventSource": "kms.amazonaws.com", "eventName": "DescribeKey", "awsRegion": "us-east-1", "sourceIPAddress": "docdb-elastic.amazonaws.com", "userAgent": "docdb-elastic.amazonaws.com", "requestParameters": { "keyId": "alias/SampleKmsKey" }, "responseElements": null, "requestID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE", "eventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE", "readOnly": true, "resources": [ { "accountId": "AWS Internal", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE" } ], "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "111122223333", "eventCategory": "Management" }

詳細

次のリソースは、保管時のデータ暗号化についての詳細を説明しています。