本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用適用於 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的範例
用戶端協助程式類別
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
方法不受支援。
您可以使用用戶端協助程式類別,而無須直接與較低層級的項目加密程式互動。只有在需要於項目加密程式中設定進階選項時,才使用這些類別。
用戶端協助程式類別包括:
-
EncryptedTable
適用於使用 DynamoDB 中的資料表 資源,一次處理一個資料表的應用程式。 -
EncryptedResource
適用於在 DynamoDB 中使用 Service Resource 類別進行批次處理的應用程式。 -
EncryptedClient
適用於在 DynamoDB 中使用較低層級用戶端 的應用程式。
若要使用用戶端協助程式類別,呼叫者必須具有在目標資料表上呼叫 DynamoDB DescribeTable操作的許可。
TableInfo 類別
TableInfo
如果您使用的是用戶端協助程式類別,其將為您建立並使用 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
作為所有屬性的預設值,並指定 ISBN
和 PublicationYear
屬性的例外狀況。
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())