本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon DynamoDB 加密用戶端概念
注意
我們的用戶端加密程式庫已重新命名為 AWS Database Encryption SDK。下列主題提供適用於 Java 的 DynamoDB 加密用戶端 1.x-2.x 版和適用於 Python 的 DynamoDB 加密用戶端 1.x-3.x 版的相關資訊。如需詳細資訊,請參閱AWS 資料庫加密 SDK for DynamoDB 版本支援。
本主題說明 Amazon DynamoDB Encryption Client 中使用的概念和術語。
若要了解 DynamoDB Encryption Client 的元件如何互動,請參閱 DynamoDB 加密用戶端的運作方式。
密碼編譯資料提供者 (CMP)
實作 DynamoDB Encryption Client 時,您的首要任務之一是選取密碼編譯資料提供者 (CMP) (也稱為加密資料提供者)。您的選擇會決定其餘的大部分實作。
密碼編譯資料提供者 (CMP) 會收集、整合及傳回項目加密程式用來加密並簽署資料表項目的密碼編譯資料。CMP 會決定要使用的加密演算法,以及如何產生及保護加密和簽署金鑰。
CMP 會與項目加密程式互動。項目加密程式會請求 CMP 提供加密和解密資料,而 CMP 會將這些資料傳回給項目加密程式。然後,項目加密程式會使用密碼編譯資料將項目加密並簽署,或驗證並解密。
您會在設定用戶端時指定 CMP。您可以建立相容的自訂 CMP,或使用程式庫的其中一個 CMP。大多數 CMP 都適用於多種程式設計語言。
項目加密程式
項目加密器是較低層級的元件,可對 DynamoDB Encryption Client 執行密碼編譯操作。其將請求密碼編譯資料提供者 (CMP) 提供密碼編譯資料,然後使用 CMP 傳回的資料將資料表項目加密並簽署,或驗證並解密。
您可以直接與項目加密程式互動,或使用您的程式庫所提供的協助程式。例如,適用於 Java 的 DynamoDB Encryption Client 包含AttributeEncryptor
一個協助程式類別,您可以搭配 使用DynamoDBMapper
,而不是直接與DynamoDBEncryptor
項目加密程式互動。Python 程式庫包括 EncryptedTable
、EncryptedClient
和 EncryptedResource
協助程式類別,這些類別會替您與項目加密程式互動。
屬性動作
屬性動作會告知項目加密程式要對項目的每個屬性執行什麼動作。
屬性動作值可以是下列其中一項:
-
加密和簽署 – 加密屬性值。在項目簽章中包含屬性 (名稱和值)。
-
僅限簽署 – 在項目簽章中包含 屬性。
-
什麼都不做 – 請勿加密或簽署 屬性。
對於可以儲存敏感資料的任何屬性,請使用加密並簽署。針對主索引鍵屬性 (分割區索引鍵和排序索引鍵),使用僅簽署。資料描述屬性和簽章屬性不會進行簽署或加密。您不需要指定這些屬性的屬性動作。
請仔細選擇屬性動作。如有疑問,請使用加密並簽署。使用 DynamoDB Encryption Client 來保護資料表項目之後,您就無法在沒有簽章驗證錯誤的風險的情況下變更屬性的動作。如需詳細資訊,請參閱 變更您的資料模型。
警告
請勿加密主索引鍵的屬性。它們必須保持純文字,以便 DynamoDB 可以在不執行完整資料表掃描的情況下找到項目。
如果 DynamoDB 加密內容識別您的主要金鑰屬性,則如果您嘗試加密它們,用戶端會擲回錯誤。
您用來為每種程式設計語言指定屬性動作的技巧都不同。而且,該技巧可以專屬於您所使用的協助程式類別。
如需詳細資訊,請參閱程式設計語言的文件。
資料描述
已加密資料表項目的資料描述包含資料表項目加密和簽署方式的相關資訊 (例如加密演算法)。密碼編譯資料提供者 (CMP) 會在整合可供加密和簽署的密碼編譯資料時記錄資料描述。稍後,當它需要整合密碼編譯資料來驗證和解密項目時,它會使用資料描述作為其指南。
在 DynamoDB Encryption Client 中,材料描述是指三個相關元素:
- 請求的資料描述
-
有些密碼編譯資料提供者 (CMP) 可讓您指定進階選項,例如加密演算法。若要指出您的選擇,請將名稱/值對新增至請求中 DynamoDB 加密內容的材料描述屬性,以加密資料表項目。此元素又稱為請求的資料描述。請求的資料描述中的有效值由您所選的 CMP 定義。
注意
由於資料描述可能覆寫安全的預設值,除非您有充分理由要使用請求的資料描述,否則建議您將其省略。
- 實際資料描述
-
密碼編譯資料提供者 (CMP) 傳回的資料描述又稱為實際資料描述。它會描述 CMP 在整合密碼編譯資料時所用的實際值。通常包含請求的資料描述及新增和變更 (如果有)。
- 資料描述屬性
-
用戶端會在已加密項目的資料描述屬性中儲存實際資料描述。資料描述屬性名稱為
amzn-ddb-map-desc
,而其值為實際資料描述。用戶端會使用資料描述屬性中的值來驗證並解密項目。
DynamoDB 加密內容
DynamoDB 加密內容會將資料表和項目的相關資訊提供給密碼編譯資料提供者 (CMP)。在進階實作中,DynamoDB 加密內容可以包含請求的資料描述。
當您加密資料表項目時,DynamoDB 加密內容會以加密方式繫結至加密的屬性值。當您解密時,如果 DynamoDB 加密內容與用來加密的 DynamoDB 加密內容不完全、區分大小寫相符,解密操作會失敗。如果您直接與項目加密器互動,您必須在呼叫加密或解密方法時提供 DynamoDB 加密內容。大多數協助程式會為您建立 DynamoDB 加密內容。
注意
DynamoDB Encryption Client 中的 DynamoDB 加密內容與 AWS Key Management Service (AWS KMS) 和 中的加密內容無關 AWS Encryption SDK。
DynamoDB 加密內容可包含下列欄位。所有欄位和值都是選用的。
-
資料表名稱
-
分割區索引鍵名稱
-
排序索引鍵名稱
-
屬性名稱值組
提供者存放區
提供者存放區 是一個可傳回密碼編譯資料提供者 (CMP) 的元件。提供者存放區可以建立 CMP,或從另一個來源 (例如另一個提供者存放區) 取得。提供者存放區會在持久性儲存體中儲存其建立的 CMP 版本,而存放的每個 CMP 都是依照請求者的資料名稱與版本號碼進行識別。
DynamoDB Encryption Client 中的最近提供者會從提供者存放區取得其 CMPs,但您可以使用提供者存放區將 CMPs 提供給任何元件。每個最近提供者都與一個提供者存放區相關聯,但提供者存放區可以將 CMP 提供給多部主機上的許多請求者。
提供者存放區會隨需建立新的 CMP 版本,並傳回新的和現有版本。它也會傳回特定資料名稱的最新版本號碼。這使請求者能夠得知提供者存放區何時有可請求的新版 CMP。
DynamoDB Encryption Client 包含 MetaStore,這是使用存放在 DynamoDB 中的金鑰建立包裝 CMPs 並使用內部 DynamoDB Encryption Client 加密的提供者商店。
進一步了解: