使用 DynamoDB 密用戶端 - AWS 資料庫加密 SDK

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

使用 DynamoDB 密用戶端

注意

我們的客戶端加密庫被重命名為 AWS 數據庫加密SDK。下列主題提供有關版本 1 的資訊。 X-2. 適用於 Java 和版本 1 的 x 個加密用戶端。 X — 3. 適用於 Python 的 x 個 DynamoDB 密用戶端。如需詳細資訊,請參閱 DynamoDB 版本SDK支援的資AWS 料庫加密

本主題說明適用於 Python 的 DynamoDB 加密用戶端的一些功能,這些功能可能在其他程式設計語言實作中找不到這些功能。這些功能旨在讓您以最安全的方式更輕鬆地使用 DynamoDB 加密用戶端。若非遇到罕見的使用案例,我們都建議您使用這些功能。

如需使用 DynamoDB 加密用戶端進行程式設計的詳細資訊,請參閱本指南中的 Python 範例、上的 aws-dynamodb-encryption-python 存放庫中的範例 GitHub,以及 DynamoDB 加密用戶端的 Python 文件

用戶端協助程式類別

適用於 Python 的 DynamoDB 加密用戶端包含數個用戶端協助程式類別,這些用戶端協助程式類別會鏡像 DynamoDB 的 3 個類別。這些輔助程式類別的設計可讓您更輕鬆地將加密和簽署新增至現有 DynamoDB 應用程式,並避免最常見的問題,如下所示:

  • 通過向對象添加主鍵的覆蓋操作,或者在AttributeActionsAttributeActions象明確告訴客戶端加密主鍵時拋出異常,防止您加密項目中的主鍵。如果 AttributeActions 物件中的預設動作為 DO_NOTHING,則用戶端協助程式類別會將該動作用於主索引鍵。否則會使用 SIGN_ONLY

  • 建立TableInfo 物件並根據對 DynamoDB 的呼叫填入 DynamoDB 加密內容。這有助於確保 DynamoDB 加密內容正確無誤,而且用戶端可以識別主要金鑰。

  • 當您寫入 DynamoDB 表格或從中讀取資料表項目時get_item,可透明地加密和解密資料表項目的 Support 援方法,例如和。put_item只有 update_item 方法不受支援。

您可以使用用戶端協助程式類別,而無須直接與較低層級的項目加密程式互動。只有在需要於項目加密程式中設定進階選項時,才使用這些類別。

用戶端協助程式類別包括:

若要使用用戶端協助程式類別,呼叫者必須具有在目標資料表上呼叫 DynamoDB DescribeTable作業的權限。

TableInfo 類

TableInfo類別是代表 DynamoDB 表的協助程式類別,其中包含主索引鍵和次要索引的欄位。它可協助您取得正確而即時的資料表相關資訊。

如果您使用的是用戶端協助程式類別,其將為您建立並使用 TableInfo 物件。否則,您可以明確建立一個物件。如需範例,請參閱使用項目加密程式

當您呼叫TableInfo物件上的refresh_indexed_attributes方法時,它會透過呼叫 DynamoDB DescribeTable作業來填入物件的屬性值。查詢資料表會比進行索引名稱的硬編碼可靠得多。此TableInfo類別也包含提encryption_context_valuesDynamoDB 加密內容所需值的屬性。

若要使用此方refresh_indexed_attributes法,呼叫者必須具有在目標資料表上呼叫 DynamoDB DescribeTable作業的權限。

Python 中的屬性動作

屬性動作會告知項目加密程式要對項目的每個屬性執行什麼動作。若要指定 Python 中的屬性動作,請建立具有預設動作和特定屬性之任何例外狀況的 AttributeActions 物件。有效值會在 CryptoAction 列舉類型中加以定義。

重要

使用屬性動作加密表格項目後,從資料模型新增或移除屬性可能會導致簽章驗證錯誤,讓您無法解密資料。如需更詳細的說明,請參閱變更您的資料模型

DO_NOTHING = 0 SIGN_ONLY = 1 ENCRYPT_AND_SIGN = 2

例如,此 AttributeActions 物件會建立 ENCRYPT_AND_SIGN 作為所有屬性的預設值,並指定 ISBNPublicationYear 屬性的例外狀況。

actions = AttributeActions( default_action=CryptoAction.ENCRYPT_AND_SIGN, attribute_actions={ 'ISBN': CryptoAction.DO_NOTHING, 'PublicationYear': CryptoAction.SIGN_ONLY } )

若您使用的是用戶端協助程式類別,您不需要指定主索引鍵屬性的屬性動作。用戶端協助程式類別可防止您將主索引鍵加密。

若未使用用戶端協助程式類別,且預設動作為 ENCRYPT_AND_SIGN,則必須指定主索引鍵的動作。建議的主索引鍵動作為 SIGN_ONLY。為了簡化此操作,請使用該set_index_keys方法,該方法使用 SIGN _ 作ONLY為主鍵,或者使用 DO_NOTHING,當這是默認操作時。

警告

請勿加密主索引鍵的屬性。它們必須保持純文字格式,以便 DynamoDB 可以在不執行完整表格掃描的情況下尋找項目。

actions = AttributeActions( default_action=CryptoAction.ENCRYPT_AND_SIGN, ) actions.set_index_keys(*table_info.protected_index_keys())