本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用適用於 Java 的 DynamoDB 加密用戶端
注意
我們的用戶端加密程式庫已重新命名為 AWS 資料庫加密 SDK。下列主題提供有關適用於 Java 的 DynamoDB 加密用戶端 1.x-2.x 版和適用於 Python 的 DynamoDB 加密用戶端 1.x-3.x 版的資訊。如需詳細資訊,請參閱AWS 資料庫加密 SDK for DynamoDB 版本支援。
本主題說明在 Java 中可能無法在其他程式設計語言實作中找到的 DynamoDB 加密用戶端的一些功能。
如需使用 DynamoDB 加密用戶端進行程式設計的詳細資訊,請參閱 Java 範例、GitHub aws-dynamodb-encryption-java repository上 中的範例
項目加密程式:DynamoDBEncryptor
Java 中的 DynamoDB 加密用戶端有一個項目加密程式:較低層級的 DynamoDBEncryptor
Java 中的屬性動作
屬性動作決定哪些屬性值會加密並簽署,哪些屬性值只會簽署,以及哪些屬性值會予忽略。
重要
使用屬性動作加密表格項目後,從資料模型新增或移除屬性可能會導致簽章驗證錯誤,讓您無法解密資料。如需更詳細的說明,請參閱變更您的資料模型。
若要在您直接使用 DynamoDBEncryptorHashMap 物件,其中的名稱值組代表屬性名稱和指定的動作。
屬性動作的有效值會定義於 EncryptionFlags 列舉類型中。您可以同時使用 ENCRYPT 與 SIGN、單獨使用 SIGN,或省略兩者。不過,如果您ENCRYPT單獨使用 ,DynamoDB 加密用戶端會擲回錯誤。您無法加密您未簽署的屬性。
ENCRYPT SIGN
警告
請勿加密主索引鍵的屬性。它們必須保持純文字,以便 DynamoDB 可以在不執行完整資料表掃描的情況下找到項目。
如果您在加密內容中指定主金鑰,然後在任一主金鑰屬性的屬性動作ENCRYPT中指定 ,則 DynamoDB 加密用戶端會擲回例外狀況。
例如,下列 Java 程式碼會建立 actions HashMap,該 HashMap 會加密並簽署 record 項目中的所有屬性。例外狀況是分割索引鍵和排序索引鍵屬性 (已簽署但未加密),以及未簽署或加密的 test 屬性。
final EnumSet<EncryptionFlags> signOnly = EnumSet.of(EncryptionFlags.SIGN); final EnumSet<EncryptionFlags> encryptAndSign = EnumSet.of(EncryptionFlags.ENCRYPT, EncryptionFlags.SIGN); final Map<String, Set<EncryptionFlags>> actions = new HashMap<>(); for (final String attributeName : record.keySet()) { switch (attributeName) { case partitionKeyName: // no break; falls through to next case case sortKeyName: // Partition and sort keys must not be encrypted, but should be signed actions.put(attributeName, signOnly); break; case "test": // Don't encrypt or sign break; default: // Encrypt and sign everything else actions.put(attributeName, encryptAndSign); break; } }
然後,當您呼叫 的 encryptRecordDynamoDBEncryptor,請將映射指定為 attributeFlags 參數的值。例如,encryptRecord 的這項呼叫會使用 actions 映射。
// Encrypt the plaintext record final Map<String, AttributeValue> encrypted_record = encryptor.encryptRecord(record, actions, encryptionContext);
覆寫表格名稱
在 DynamoDB 加密用戶端中,DynamoDB 資料表的名稱是傳遞給加密和解密方法的 DynamoDB 加密內容元素。當您加密或簽署資料表項目時,DynamoDB 加密內容會以密碼編譯方式繫結至加密文字,包括資料表名稱。如果傳遞至解密方法的 DynamoDB 加密內容與傳遞至加密方法的 DynamoDB 加密內容不相符,解密操作會失敗。
有時候,表格的名稱會發生變更,例如當您備份表格或執行時間點復原時。當您解密或驗證這些項目的簽章時,您必須傳入用來加密和簽署項目的相同 DynamoDB 加密內容,包括原始資料表名稱。目前的表格名稱是不需要的。
使用 時DynamoDBEncryptor,您可以手動組合 DynamoDB 加密內容。因此,如果您使用的是 ,請勿使用資料表名稱覆寫運算子DynamoDBEncryptor。請改為使用原始表格名稱建立加密內容,並將其提交至解密方法。