DynamoDB 靜態加密使用須知 - Amazon DynamoDB

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

DynamoDB 靜態加密使用須知

在您使用 Amazon DynamoDB 中靜態加密時請考量以下項目。

所有資料表資料都會加密

已對所有 DynamoDB 資料表資料啟用伺服器端靜態加密,且無法停用。您無法僅加密資料表中的項目子集。

只有持久性儲存媒體上的資料是靜態 (靜止) 時,靜態加密才會加密資料。如果對傳輸中資料或使用中資料有資料安全性的疑慮,您可能需要進行額外的措施:

  • 傳輸中的資料:DynamoDB 中的所有資料都是在傳輸中加密的。根據預設,與 DynamoDB 之間的通訊會使用 HTTPS 通訊協定,該通訊協定會使用 Secure Sockets Layer (SSL)/Transport Layer Security (TLS) 加密來保護網路流量。

  • 使用中資料:在將資料傳送至 DynamoDB 前使用用戶端加密來保護資料。如需詳細資訊,請參閱《Amazon DynamoDB Encryption Client 開發人員指南》中的用戶端與伺服器端加密

您可以將串流與加密的資料表搭配著使用。DynamoDB Streams 一律會以資料表層級加密金鑰加密。如需詳細資訊,請參閱 DynamoDB Streams 的變更資料擷取

DynamoDB 的備份會受到加密,且從備份恢復的資料表也已啟用加密。您可以使用 AWS 擁有的金鑰 AWS 受管金鑰、 或客戶受管金鑰來加密備份資料。如需詳細資訊,請參閱Backup 與 DynamoDB 原

本機次要索引和全域次要索引會使用與基礎資料表相同的金鑰加密。

加密類型

注意

Global Table 版本 2017 不支援客戶受管金鑰。如果要在 DynamoDB Global Table 中使用客戶受管金鑰,則需要將資料表升級為 Global Table 版本 2019,然後將其啟用。

在 上 AWS Management Console,加密類型是當您使用 AWS 受管金鑰 或客戶受管金鑰來加密資料KMS時。使用 AWS 擁有的金鑰時,加密類型為 DEFAULT。在 Amazon DynamoDB 中API,加密類型是當您使用 AWS 受管金鑰 或客戶受管金鑰KMS時。在缺少加密類型的情況下,會使用 AWS 擁有的金鑰來加密資料。您可以隨時在 AWS 擁有的金鑰 AWS 受管金鑰、 和客戶受管金鑰之間切換。您可以使用主控台、 AWS Command Line Interface (AWS CLI) 或 Amazon DynamoDB API 來切換加密金鑰。

請注意,使用客戶受管金鑰時有下列限制:

  • 您無法搭配 DynamoDB Accelerator (DAX) 叢集使用客戶受管金鑰。如需詳細資訊,請參閱DAX 靜態加密

  • 您可以使用客戶受管金鑰來加密使用交易的資料表。不過,為了確保交易傳播的持久性,服務會暫時儲存交易請求的副本,並使用 AWS 擁有的金鑰進行加密。資料表和次要索引中已遞交的資料一律會使用客戶受管金鑰進行靜態加密。

  • 您可以使用客戶受管金鑰來加密使用 Contributor Insights 的資料表。不過,傳輸至 的資料 Amazon CloudWatch 會使用 加密 AWS 擁有的金鑰。

  • 當您轉換至新的客戶受管金鑰時,請務必保持啟用原始金鑰,直到程序完成為止。 AWS 仍需要原始金鑰才能使用新金鑰加密資料。當資料表SSEDescription的狀態為 ENABLED且顯示新客戶受管金鑰KMSMasterKeyArn的 時,程序即告完成。此時可以停用或排程刪除原始金鑰。

  • 顯示新的客戶受管金鑰後,資料表和任何新的隨需備份都會使用新的金鑰加密。

  • 任何現有的隨需備份都會使用建立備份時使用的客戶受管金鑰進行加密。您將需要相同的金鑰來還原這些備份。您可以使用 檢視備份的 DescribeBackup API來識別每個備份建立期間的金鑰SSEDescription。

  • 如果您停用客戶受管金鑰或排定其刪除的時間,所有在 DynamoDB Streams 中的資料仍有 24 小時的生命週期。任何未擷取的活動資料如果超過 24 小時,則符合裁剪的資格。

  • 如果您停用客戶受管金鑰或排定刪除,存留時間 (TTL) 會繼續刪除 30 分鐘。這些TTL刪除會持續傳送至 DynamoDB Streams,並受標準修剪/保留間隔的限制。

    如需更多詳細資訊,請參閱啟用金鑰刪除金鑰。

使用KMS金鑰和資料金鑰

DynamoDB 靜態加密功能使用 AWS KMS key 和資料金鑰階層來保護資料表資料。當 DynamoDB 串流、全域資料表和備份寫入到持久性媒體時,DynamoDB 會使用相同的金鑰階層來保護 DynamoDB 串流、全域資料表和備份。

我們建議您先規劃加密策略,再於 DynamoDB 中使用資料表。如果您將敏感或機密資料儲存在 DynamoDB,請考慮在計劃中加入用戶端加密。如此一來,您就能盡量靠近資料來源進行加密,並確保資料在整個生命週期受到保護。如需詳細資訊,請參閱 DynamoDB 加密客戶端文件。

AWS KMS key

靜態加密會保護 AWS KMS key下的 DynamoDB 資料表。根據預設,DynamoDB 會使用 AWS 擁有的金鑰,這是一種在 DynamoDB 服務帳戶中建立和管理的多租用戶加密金鑰。但是,您可以使用客戶受管金鑰或 AWS 帳戶中 DynamoDB (aws/dynamodb) 加密您的 DynamoDB 資料表。您可以為每個資料表選取不同的KMS金鑰。您為資料表選取的KMS金鑰也會用來加密其本機和全域次要索引、串流和備份。

當您建立或更新資料表時,請選取資料表的KMS金鑰。您可以隨時在 DynamoDB 主控台或使用 UpdateTable操作變更資料表的KMS金鑰。切換金鑰的程序是無縫的,且不需要停機時間或降低服務效能。

重要

DynamoDB 僅支援對稱KMS金鑰 。您不能使用非對稱KMS金鑰來加密 DynamoDB 資料表。

使用客戶受管金鑰來取得下列功能:

AWS 受管金鑰 如果您需要下列任何功能,請使用 :

不過, AWS 擁有的金鑰 是免費的,其使用不會計入AWS KMS 資源或請求配額 。客戶受管金鑰並針對每個API呼叫和 AWS KMS 配額 AWS 受管金鑰 產生費用會套用至這些KMS金鑰。

資料表金鑰

DynamoDB 使用資料表的 KMS金鑰來產生和加密資料表的唯一資料金鑰,稱為資料表金鑰 。資料表金鑰會在加密資料表的生命週期內持續存在。

資料表金鑰用作金鑰加密金鑰。DynamoDB 使用此資料表金鑰來保護用於加密資料表資料的資料加密金鑰。DynamoDB 會為資料表中的每個基礎結構產生唯一的資料加密金鑰,但多個資料表項目可能受到相同的資料加密金鑰保護。

使用靜態加密來加密 DynamoDB 資料表

當您第一次存取加密的資料表時,DynamoDB 會傳送請求至 AWS KMS ,以使用 KMS金鑰來解密資料表金鑰。然後,它使用純文字資料表金鑰來解密資料加密金鑰,並使用純文字資料加密金鑰來解密資料表資料。

DynamoDB 會儲存並使用 外部的資料表金鑰和資料加密金鑰 AWS KMS。它使用進階加密標準 (AES) 加密和 256 位元加密金鑰來保護所有金鑰。然後,它會將加密金鑰與加密資料一起存放,以便這些資料可用來隨需解密資料表。

如果您變更資料表的KMS金鑰,DynamoDB 會產生新的資料表金鑰。然後,使用新的資料表金鑰來重新加密資料加密金鑰。

資料表金鑰快取

為了避免 AWS KMS 針對每個 DynamoDB 操作呼叫,DynamoDB 會快取記憶體中每個呼叫者的純文字資料表金鑰。如果 DynamoDB 在閒置五分鐘後收到快取資料表金鑰的請求,則會將新的請求傳送至 AWS KMS 以解密資料表金鑰。此呼叫將擷取自上次請求解密資料表KMS金鑰以來,對 或 AWS Identity and Access Management (IAM) 中 AWS KMS 金鑰的存取政策所做的任何變更。

授權使用您的KMS金鑰

如果您使用客戶受管金鑰或帳戶中AWS 受管金鑰的 來保護 DynamoDB 資料表,則該KMS金鑰上的政策必須授予 DynamoDB 代表您使用它的權限。 AWS 受管金鑰 適用於 DynamoDB 的 上的授權內容包含其金鑰政策和授予,以委派許可來使用它。

您可以完全控制客戶受管金鑰的政策和授予,因為 AWS 受管金鑰 在您的帳戶中,您可以檢視其政策和授予。但是,由於它由 管理 AWS,因此您無法變更政策。

DynamoDB 不需要額外的授權,即可使用預設值AWS 擁有的金鑰來保護 中的 DynamoDB 資料表 AWS 帳戶。

的金鑰政策 AWS 受管金鑰

當 DynamoDB 在密碼編譯操作中使用適用於 DynamoDB (aws/dynamodb) 的 AWS 受管金鑰 時,它是代表正在存取 DynamoDB 資源的使用者進行這項操作。上的金鑰政策 AWS 受管金鑰 可讓帳戶中的所有使用者使用 AWS 受管金鑰 進行指定的操作。但是,只有在 DynamoDB 代表使用者提出請求時才會授予許可。金鑰政策中的ViaService 條件不允許任何使用者使用 , AWS 受管金鑰 除非請求源自 DynamoDB 服務。

此金鑰政策與所有 的政策相同 AWS 受管金鑰,是由 建立 AWS。您不能改變它,但可以隨時檢視它。如需詳細資訊,請參閱檢視金鑰政策

金鑰政策中的政策陳述式具有下列效果:

  • 允許 帳戶中的使用者在密碼編譯操作中使用 AWS 受管金鑰 for DynamoDB,當請求代表他們來自 DynamoDB。此政策也允許使用者為KMS金鑰建立授予

  • 允許帳戶中授權的IAM身分檢視適用於 DynamoDB AWS 受管金鑰 的 屬性,並撤銷允許 DynamoDB 使用 金鑰的授予。 DynamoDB KMS DynamoDB 使用授予進行持續的維護操作。

  • 允許 DynamoDB 執行唯讀操作,以便在您的帳戶中找到 AWS 受管金鑰 適用於 DynamoDB 的 。

{ "Version" : "2012-10-17", "Id" : "auto-dynamodb-1", "Statement" : [ { "Sid" : "Allow access through Amazon DynamoDB for all principals in the account that are authorized to use Amazon DynamoDB", "Effect" : "Allow", "Principal" : { "AWS" : "*" }, "Action" : [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:CreateGrant", "kms:DescribeKey" ], "Resource" : "*", "Condition" : { "StringEquals" : { "kms:CallerAccount" : "111122223333", "kms:ViaService" : "dynamodb.us-west-2.amazonaws.com" } } }, { "Sid" : "Allow direct access to key metadata to the account", "Effect" : "Allow", "Principal" : { "AWS" : "arn:aws:iam::111122223333:root" }, "Action" : [ "kms:Describe*", "kms:Get*", "kms:List*", "kms:RevokeGrant" ], "Resource" : "*" }, { "Sid" : "Allow DynamoDB Service with service principal name dynamodb.amazonaws.com to describe the key directly", "Effect" : "Allow", "Principal" : { "Service" : "dynamodb.amazonaws.com" }, "Action" : [ "kms:Describe*", "kms:Get*", "kms:List*" ], "Resource" : "*" } ] }

客戶受管金鑰的金鑰政策

當您選取客戶受管金鑰來保護 DynamoDB 資料表時,DynamoDB 會取得代表進行選取之主體使用KMS金鑰的許可。該主體、使用者或角色必須具有 DynamoDB 所需KMS金鑰的許可。您可以在金鑰政策 IAM政策 授予 中提供這些許可。

至少,DynamoDB 在客戶受管金鑰上需要具備下列許可:

例如,以下範例金鑰政策只會提供必要許可。政策具有下列效果:

  • 允許 DynamoDB 在密碼編譯操作中使用 KMS 金鑰並建立授予,但僅限於其代表擁有使用 DynamoDB 許可的帳戶中的主體行事時。如果政策陳述式中指定的委託人沒有使用 DynamoDB 的許可,呼叫便會失敗,即使呼叫是來自 DynamoDB 服務也一樣。

  • kms:ViaService 條件索引鍵僅在請求來自 DynamoDB 時,代表政策陳述式中列出的主體允許許可。這些委託人無法直接呼叫這些操作。請注意,kms:ViaService 值 (dynamodb.*.amazonaws.com) 在區域位置中有星號 (*)。DynamoDB 需要 許可,才能獨立於任何特定項目, AWS 區域 因此可以進行跨區域呼叫以支援 DynamoDB 全域資料表

  • 授予KMS金鑰管理員 (可擔任db-team角色的使用者) 對KMS金鑰的唯讀存取權,以及撤銷授予的許可,包括 DynamoDB 保護資料表所需的授予

使用範例金鑰政策之前,請將範例主體取代為來自 的實際主體 AWS 帳戶。

{ "Id": "key-policy-dynamodb", "Version":"2012-10-17", "Statement": [ { "Sid" : "Allow access through Amazon DynamoDB for all principals in the account that are authorized to use Amazon DynamoDB", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:user/db-lead"}, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey", "kms:CreateGrant" ], "Resource": "*", "Condition": { "StringLike": { "kms:ViaService" : "dynamodb.*.amazonaws.com" } } }, { "Sid": "Allow administrators to view the KMS key and revoke grants", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/db-team" }, "Action": [ "kms:Describe*", "kms:Get*", "kms:List*", "kms:RevokeGrant" ], "Resource": "*" } ] }

使用授予來授權 DynamoDB

除了金鑰政策外,DynamoDB 會使用授予在客戶受管金鑰或 AWS 受管金鑰 for DynamoDB (aws/dynamodb) 上設定許可。若要檢視帳戶中KMS金鑰的授予,請使用 ListGrants操作。DynamoDB 不需要授予或任何其他許可,即可使用 AWS 擁有的金鑰 來保護您的資料表。

DynamoDB 在執行背景系統維護和持續資料保護任務時使用授予許可。它還使用授與來產生資料表金鑰

每個授與都專屬於一個資料表。如果帳戶包含在相同KMS金鑰下加密的多個資料表,則每個資料表都會有每種類型的授予。授予受到 DynamoDB 加密內容 的限制,其中包含資料表名稱和 AWS 帳戶 ID,且包含不再需要的淘汰授予的許可。

如要建立授予,DynamoDB 必須擁有代替建立加密資料表使用者呼叫 CreateGrant 的許可。對於 AWS 受管金鑰,DynamoDB 從金鑰政策 取得kms:CreateGrant許可,這允許帳戶使用者僅在 DynamoDB 代表授權使用者提出請求時CreateGrant,才呼叫KMS金鑰。

金鑰政策也可以允許 帳戶撤銷金鑰上的授予。 KMS不過,如果您撤銷作用中加密資料表的授予,DynamoDB 將無法保護和維護資料表。

DynamoDB 加密內容

加密內容是一組金鑰/值對,其中包含任意非私密資料。當您在加密資料的請求中包含加密內容時, AWS KMS 加密會將加密內容繫結到加密的資料。若要解密資料,您必須傳遞相同的加密內容。

DynamoDB 在所有 AWS KMS 密碼編譯操作中使用相同的加密內容。如果您使用客戶受管金鑰AWS 受管金鑰來保護 DynamoDB 資料表,您可以使用加密內容來識別稽核記錄和日誌中KMS金鑰的使用。它也會以純文字顯示在日誌中,例如 AWS CloudTrailAmazon CloudWatch Logs

加密內容也可以用作政策和授予中的授權條件。DynamoDB 使用加密內容來限制授予,允許存取客戶受管金鑰或 AWS 受管金鑰 您的帳戶和區域中的 使用授予來授權 DynamoDB

在其對 的請求中 AWS KMS,DynamoDB 使用兩個索引鍵值對的加密內容。

"encryptionContextSubset": { "aws:dynamodb:tableName": "Books" "aws:dynamodb:subscriberId": "111122223333" }
  • 資料表 – 第一個鍵值對會識別 DynamoDB 正在加密的資料表。金鑰為 aws:dynamodb:tableName。值是資料表的名稱。

    "aws:dynamodb:tableName": "<table-name>"

    例如:

    "aws:dynamodb:tableName": "Books"
  • 帳戶 – 第二個鍵值對會識別 AWS 帳戶。金鑰為 aws:dynamodb:subscriberId。值是帳戶 ID。

    "aws:dynamodb:subscriberId": "<account-id>"

    例如:

    "aws:dynamodb:subscriberId": "111122223333"

監控 DynamoDB 與 的互動 AWS KMS

如果您使用客戶受管金鑰AWS 受管金鑰來保護 DynamoDB 資料表,您可以使用 AWS CloudTrail 日誌來追蹤 DynamoDB AWS KMS 代表您傳送至 的請求。

本節將討論 GenerateDataKeyDecryptCreateGrant 請求。此外,DynamoDB 使用 DescribeKey操作來判斷您選擇的KMS金鑰是否存在於帳戶和區域中。當您刪除資料表時,它也會使用 RetireGrant操作來移除授予。

GenerateDataKey

當您在資料表上啟用靜態加密時,DynamoDB 會建立唯一的資料表金鑰。它將GenerateDataKey請求傳送至 AWS KMS ,指定資料表的KMS金鑰。

記錄 GenerateDataKey 操作的事件類似於以下範例事件。使用者是 DynamoDB 服務帳戶。參數包括KMS金鑰的 Amazon Resource Name (ARN)、需要 256 位元金鑰的金鑰規格符,以及識別資料表和 的加密內容 AWS 帳戶。

{ "eventVersion": "1.05", "userIdentity": { "type": "AWSService", "invokedBy": "dynamodb.amazonaws.com" }, "eventTime": "2018-02-14T00:15:17Z", "eventSource": "kms.amazonaws.com", "eventName": "GenerateDataKey", "awsRegion": "us-west-2", "sourceIPAddress": "dynamodb.amazonaws.com", "userAgent": "dynamodb.amazonaws.com", "requestParameters": { "encryptionContext": { "aws:dynamodb:tableName": "Services", "aws:dynamodb:subscriberId": "111122223333" }, "keySpec": "AES_256", "keyId": "1234abcd-12ab-34cd-56ef-1234567890ab" }, "responseElements": null, "requestID": "229386c1-111c-11e8-9e21-c11ed5a52190", "eventID": "e3c436e9-ebca-494e-9457-8123a1f5e979", "readOnly": true, "resources": [ { "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "accountId": "111122223333", "type": "AWS::KMS::Key" } ], "eventType": "AwsApiCall", "recipientAccountId": "111122223333", "sharedEventID": "bf915fa6-6ceb-4659-8912-e36b69846aad" }
解密

當您存取加密的 DynamoDB 資料表時,DynamoDB 需要解密資料表金鑰以便解密階層下方的金鑰。然後解密資料表中的資料。解密資料表金鑰。DynamoDB 會將解密請求傳送至 AWS KMS ,以指定資料表的KMS金鑰。

記錄 Decrypt 操作的事件類似於以下範例事件。使用者是您 AWS 帳戶 存取資料表的主體。這些參數包括加密的資料表金鑰 (做為密碼文字 Blob) 和識別資料表的加密內容,而 AWS 帳戶. AWS KMS derives 會從密碼文字衍生KMS金鑰的 ID。

{ "eventVersion": "1.05", "userIdentity": { "type": "AssumedRole", "principalId": "AROAIGDTESTANDEXAMPLE:user01", "arn": "arn:aws:sts::111122223333:assumed-role/Admin/user01", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "sessionContext": { "attributes": { "mfaAuthenticated": "false", "creationDate": "2018-02-14T16:42:15Z" }, "sessionIssuer": { "type": "Role", "principalId": "AROAIGDT3HGFQZX4RY6RU", "arn": "arn:aws:iam::111122223333:role/Admin", "accountId": "111122223333", "userName": "Admin" } }, "invokedBy": "dynamodb.amazonaws.com" }, "eventTime": "2018-02-14T16:42:39Z", "eventSource": "kms.amazonaws.com", "eventName": "Decrypt", "awsRegion": "us-west-2", "sourceIPAddress": "dynamodb.amazonaws.com", "userAgent": "dynamodb.amazonaws.com", "requestParameters": { "encryptionContext": { "aws:dynamodb:tableName": "Books", "aws:dynamodb:subscriberId": "111122223333" } }, "responseElements": null, "requestID": "11cab293-11a6-11e8-8386-13160d3e5db5", "eventID": "b7d16574-e887-4b5b-a064-bf92f8ec9ad3", "readOnly": true, "resources": [ { "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "accountId": "111122223333", "type": "AWS::KMS::Key" } ], "eventType": "AwsApiCall", "recipientAccountId": "111122223333" }
CreateGrant

當您使用客戶受管金鑰AWS 受管金鑰 保護您的 DynamoDB 資料表時,DynamoDB 會使用授權,以允許服務執行持續資料保護和維護及耐用性任務。AWS 擁有的金鑰 上不需要這些授予。

DynamoDB 建立的授予專屬於特定資料表。CreateGrant 請求中的主體是建立資料表的使用者。

記錄 CreateGrant 操作的事件類似於以下範例事件。參數包括資料表KMS金鑰的 Amazon Resource Name (ARN)、承授者主體和淘汰主體 (DynamoDB 服務),以及承授涵蓋的操作。它還包含一個限制,要求所有加密操作使用指定的加密內容

{ "eventVersion": "1.05", "userIdentity": { "type": "AssumedRole", "principalId": "AROAIGDTESTANDEXAMPLE:user01", "arn": "arn:aws:sts::111122223333:assumed-role/Admin/user01", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "sessionContext": { "attributes": { "mfaAuthenticated": "false", "creationDate": "2018-02-14T00:12:02Z" }, "sessionIssuer": { "type": "Role", "principalId": "AROAIGDTESTANDEXAMPLE", "arn": "arn:aws:iam::111122223333:role/Admin", "accountId": "111122223333", "userName": "Admin" } }, "invokedBy": "dynamodb.amazonaws.com" }, "eventTime": "2018-02-14T00:15:15Z", "eventSource": "kms.amazonaws.com", "eventName": "CreateGrant", "awsRegion": "us-west-2", "sourceIPAddress": "dynamodb.amazonaws.com", "userAgent": "dynamodb.amazonaws.com", "requestParameters": { "keyId": "1234abcd-12ab-34cd-56ef-1234567890ab", "retiringPrincipal": "dynamodb.us-west-2.amazonaws.com", "constraints": { "encryptionContextSubset": { "aws:dynamodb:tableName": "Books", "aws:dynamodb:subscriberId": "111122223333" } }, "granteePrincipal": "dynamodb.us-west-2.amazonaws.com", "operations": [ "DescribeKey", "GenerateDataKey", "Decrypt", "Encrypt", "ReEncryptFrom", "ReEncryptTo", "RetireGrant" ] }, "responseElements": { "grantId": "5c5cd4a3d68e65e77795f5ccc2516dff057308172b0cd107c85b5215c6e48bde" }, "requestID": "2192b82a-111c-11e8-a528-f398979205d8", "eventID": "a03d65c3-9fee-4111-9816-8bf96b73df01", "readOnly": false, "resources": [ { "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "accountId": "111122223333", "type": "AWS::KMS::Key" } ], "eventType": "AwsApiCall", "recipientAccountId": "111122223333" }