使用適用於 Python 的 DynamoDB Encryption Client - AWS 資料庫加密 SDK

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

使用適用於 Python 的 DynamoDB Encryption Client

注意

我們的用戶端加密程式庫已重新命名為 AWS 資料庫加密 SDK。下列主題提供有關適用於 Java 的 DynamoDB Encryption Client 版本 1.x —2.x 和適用於 Python 的 DynamoDB Encryption Client 版本 1.x —3.x 的資訊。如需詳細資訊,請參閱AWS 支援 SDK的 DynamoDB 資料庫加密版本

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

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

用戶端協助程式類別

DynamoDB Encryption Client for Python 包含數個用戶端協助程式類別,可鏡像 DynamoDB 的 Boto 3 類別。這些協助程式類別旨在更輕鬆地將加密和簽署新增至現有的 DynamoDB 應用程式,並避免最常見的問題,如下所示:

  • 防止您加密項目中的主金鑰,方法是將主金鑰的覆寫動作新增至AttributeActions物件,或者如果您的AttributeActions物件明確指示用戶端加密主金鑰,則擲回例外狀況。如果 AttributeActions 物件中的預設動作為 DO_NOTHING,則用戶端協助程式類別會將該動作用於主索引鍵。否則會使用 SIGN_ONLY

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

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

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

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

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

TableInfo 類別

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

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

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

若要使用 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方法在預設動作NOTHING時使用 SIGN_ONLY 作為主索引鍵,或 DO_。

警告

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

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