本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
更新您的資料模型
我們的用戶端加密程式庫已重新命名為 AWS 資料庫加密 SDK。此開發人員指南仍會提供 DynamoDB Encryption Client 的相關資訊。 |
當您設定 DynamoDB 的 AWS 資料庫加密 SDK 時,您會提供屬性動作。加密時, AWS Database Encryption SDK 會使用屬性動作來識別要加密和簽署的屬性、要簽署的屬性 (但不要加密),以及要忽略的屬性。您也可以定義允許的未簽章屬性,明確告知用戶端哪些屬性會從簽章中排除。在解密時, AWS 資料庫加密 SDK 會使用您定義的允許未簽章屬性,來識別簽章中不包含哪些屬性。屬性動作不會儲存在加密的項目中,資料庫 AWS 加密 SDK 不會自動更新您的屬性動作。
請仔細選擇屬性動作。如有疑問,請使用加密並簽署。使用 AWS Database Encryption SDK 保護您的項目之後,您無法將現有的 ENCRYPT_AND_SIGN
、 SIGN_ONLY
或 SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
屬性變更為 DO_NOTHING
。不過,您可以安全地進行下列變更。
可搜尋加密的考量事項
在更新資料模型之前,請仔細考慮您的更新如何影響您從屬性建構的任何信標。使用信標寫入新記錄之後,您就無法更新信標的組態。您無法更新與您用來建構信標的屬性相關聯的屬性動作。如果您移除現有的屬性及其相關聯的信標,您將無法使用該信標查詢現有的記錄。您可以為新增至記錄的新欄位建立新的信標,但無法更新現有的信標以包含新欄位。
SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
屬性的考量
根據預設,分割區和排序索引鍵是加密內容中包含的唯一屬性。您可以考慮定義其他欄位,SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
以便AWS KMS 階層式 keyring 的分支金鑰 ID 供應商可以識別從加密內容解密所需的分支金鑰。如需詳細資訊,請參閱分支金鑰 ID 供應商。如果您指定任何SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
屬性,則分割區和排序屬性也必須是 SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
。
注意
若要使用SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
密碼編譯動作,您必須使用 3.3 版或更新版本的 AWS 資料庫加密 SDK。將您的資料模型更新為包含 之前,先將新版本部署至所有讀取器SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
。
新增 ENCRYPT_AND_SIGN
、 SIGN_ONLY
和 SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
屬性
若要新增 ENCRYPT_AND_SIGN
、 SIGN_ONLY
或 SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
屬性,請在屬性動作中定義新屬性。
您無法移除現有的DO_NOTHING
屬性,並將其新增為 ENCRYPT_AND_SIGN
、 SIGN_ONLY
或 SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
屬性。
使用註釋的資料類別
如果您使用 定義屬性動作TableSchema
,請將新屬性新增至註釋的資料類別。如果您未指定新屬性的屬性動作註釋,用戶端預設會加密和簽署新屬性 (除非屬性是主索引鍵的一部分)。如果您只想要簽署新屬性,則必須使用 @DynamoDBEncryptionSignOnly
或 @DynamoDBEncryptionSignAndIncludeInEncryptionContext
註釋新增新屬性。
使用物件模型
如果您手動定義屬性動作,請將新屬性新增至物件模型中的屬性動作SIGN_ONLY
,並指定 ENCRYPT_AND_SIGN
、 或 SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
作為屬性動作。
移除現有屬性
如果您決定不再需要 屬性,您可以停止將資料寫入該屬性,也可以正式將其從屬性動作中移除。當您停止將新資料寫入屬性時,屬性仍會出現在屬性動作中。如果您未來需要再次開始使用 屬性,這會很有幫助。正式移除屬性動作中的屬性不會將其從資料集中移除。您的資料集仍會包含包含該屬性的項目。
若要正式移除現有的 ENCRYPT_AND_SIGN
、SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
、 SIGN_ONLY
或 DO_NOTHING
屬性,請更新您的屬性動作。
如果您移除DO_NOTHING
屬性,則不得將該屬性從允許的未簽章屬性中移除。即使您不再將新值寫入該屬性,用戶端仍需要知道該屬性未簽署,以讀取包含該屬性的現有項目。
使用註釋的資料類別
如果您使用 定義屬性動作TableSchema
,請從註釋的資料類別中移除 屬性。
使用物件模型
如果您手動定義屬性動作,請從物件模型中的屬性動作中移除屬性。
將現有ENCRYPT_AND_SIGN
屬性變更為 SIGN_ONLY
或 SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
若要將現有ENCRYPT_AND_SIGN
屬性變更為 SIGN_ONLY
或 SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
,您必須更新您的屬性動作。部署更新之後,用戶端將能夠驗證和解密寫入屬性的現有值,但只會簽署寫入屬性的新值。
注意
在將現有ENCRYPT_AND_SIGN
屬性變更為 SIGN_ONLY
或 之前,請仔細考慮您的安全需求SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
。任何可存放敏感資料的屬性都應該加密。
使用註釋的資料類別
如果您使用 定義屬性動作TableSchema
,請更新現有的屬性,將 @DynamoDBEncryptionSignOnly
或 @DynamoDBEncryptionSignAndIncludeInEncryptionContext
註釋包含在註釋的資料類別中。
使用物件模型
如果您手動定義屬性動作,請將與現有屬性相關聯的屬性動作從 更新ENCRYPT_AND_SIGN
為 物件模型SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
中的 SIGN_ONLY
或 。
將現有SIGN_ONLY
或SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
屬性變更為 ENCRYPT_AND_SIGN
若要將現有SIGN_ONLY
或SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
屬性變更為 ENCRYPT_AND_SIGN
,您必須更新您的屬性動作。部署更新之後,用戶端將能夠驗證寫入屬性的現有值,並將加密和簽署寫入屬性的新值。
使用註釋的資料類別
如果您使用 定義屬性動作TableSchema
,請從現有屬性中移除 @DynamoDBEncryptionSignOnly
或 @DynamoDBEncryptionSignAndIncludeInEncryptionContext
註釋。
使用物件模型
如果您手動定義屬性動作,請在物件模型ENCRYPT_AND_SIGN
中將與屬性相關聯的屬性動作從 SIGN_ONLY
或 更新SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
為 。
新增DO_NOTHING
屬性
若要降低新增DO_NOTHING
屬性時的錯誤風險,建議您在命名DO_NOTHING
屬性時指定不同的字首,然後使用該字首來定義允許的未簽署屬性。
您無法從註釋的資料類別中移除現有的 ENCRYPT_AND_SIGN
、 SIGN_ONLY
或 SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
屬性,然後將 屬性新增回DO_NOTHING
屬性。您只能新增全新的DO_NOTHING
屬性。
您新增DO_NOTHING
屬性所採取的步驟,取決於您在清單中明確定義允許的未簽章屬性,還是使用字首。
使用允許的未簽署屬性字首
如果您使用 定義屬性動作TableSchema
,請使用 @DynamoDBEncryptionDoNothing
註釋將新DO_NOTHING
屬性新增至註釋的資料類別。如果您手動定義屬性動作,請更新您的屬性動作以包含新的屬性。請務必使用 屬性DO_NOTHING
動作明確設定新屬性。您必須在新屬性的名稱中包含相同的不同字首。
使用允許的未簽署屬性清單
-
將新
DO_NOTHING
屬性新增至允許的未簽章屬性清單,並部署更新的清單。 -
從步驟 1 部署變更。
在變更傳播到需要讀取此資料的所有主機之前,您無法繼續進行步驟 3。
-
將新
DO_NOTHING
屬性新增至您的屬性動作。-
如果您使用 定義屬性動作
TableSchema
,請使用@DynamoDBEncryptionDoNothing
註釋將新DO_NOTHING
屬性新增至註釋的資料類別。 -
如果您手動定義屬性動作,請更新您的屬性動作以包含新的屬性。請務必使用 屬性動作明確設定新
DO_NOTHING
屬性。
-
-
從步驟 3 部署變更。
將現有SIGN_ONLY
屬性變更為 SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
若要將現有SIGN_ONLY
屬性變更為 SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
,您必須更新您的屬性動作。部署更新之後,用戶端將能夠驗證寫入屬性的現有值,並將繼續簽署寫入屬性的新值。寫入屬性的新值將包含在加密內容中。
如果您指定任何SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
屬性,則分割區和排序屬性也必須是 SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
。
使用註釋的資料類別
如果您使用 定義屬性動作TableSchema
,請將與屬性相關聯的屬性動作從 更新@DynamoDBEncryptionSignOnly
為 @DynamoDBEncryptionSignAndIncludeInEncryptionContext
。
使用物件模型
如果您手動定義屬性動作,請在物件模型SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
中將與屬性相關聯的屬性動作從 更新SIGN_ONLY
為 。
將現有SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
屬性變更為 SIGN_ONLY
若要將現有SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
屬性變更為 SIGN_ONLY
,您必須更新您的屬性動作。部署更新之後,用戶端將能夠驗證寫入屬性的現有值,並將繼續簽署寫入屬性的新值。寫入屬性的新值不會包含在加密內容中。
在將現有SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
屬性變更為 之前SIGN_ONLY
,請仔細考慮您的更新如何影響分支金鑰 ID 供應商的功能。
使用註釋的資料類別
如果您使用 定義屬性動作TableSchema
,請將與屬性相關聯的屬性動作從 更新@DynamoDBEncryptionSignAndIncludeInEncryptionContext
為 @DynamoDBEncryptionSignOnly
。
使用物件模型
如果您手動定義屬性動作,請在物件模型SIGN_ONLY
中將與屬性相關聯的屬性動作從 更新SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
為 。