python的dynamodb加密客户端
dynamodb-encryption-sdk的Python项目详细描述
Amazon DynamoDB Encryption Client for Python提供了Amazon DynamoDB项的客户端加密,以帮助您在将表数据发送到dynamodb之前保护表数据。它 提供完全兼容的Amazon DynamoDB Encryption Client的实现 用Amazon DynamoDB Encryption Client for Java。
您可以在Read the Docs找到最新的python文档,并可以找到最新的 我们的primary documents中的完整文档。
你可以在GitHub上找到我们的消息来源。
开始
必需先决条件
- python 2.7或3.4+
安装
注意
如果尚未安装cryptography,则可能需要安装其他 操作的cryptography installation guide中详细说明的先决条件 系统。
$ pip install dynamodb-encryption-sdk
概念
有关在使用时需要理解的重要概念的详细说明 客户,请查看我们的Concepts Guide。
用法
帮助客户
我们提供看起来和感觉像低级客户机(EncryptedClient)的帮助客户机, 可用的服务资源(EncryptedResource)和表资源(EncryptedTable) 从boto3库。在大多数情况下,一旦配置好,这些客户机就可以准确地使用 就像从boto3创建标准客户机一样,您的项目将被透明地加密 写时解密,读时解密。
我不能对助手客户做什么?
对于大多数用途,helper客户端(一旦配置)可以用作 boto3客户端。然而,有几个案例并非如此。
更新项目
因为我们不知道你可能对一个项目进行的部分更新涵盖了所有 在您的项中的签名属性中,我们不允许助手客户端上有update_item。
这是因为如果只更新一些已签名的属性,那么下次尝试 若要读取该项,签名验证将失败。
属性过滤
因为我们不知道项中的哪些属性是签名的,所以helper客户端不允许 任何属性筛选。
对于get_item、batch_get_item和scan,这包括使用AttributesToGet 和ProjectionExpression。
对于scan,这还包括使用Select值SPECIFIC_ATTRIBUTES和 ALL_PROJECTED_ATTRIBUTES。
这是因为如果不检索所有签名属性,签名验证将 失败。
项目加密器
helper客户端提供了一个熟悉的接口,但是实际的项目加密和解密 由低级项加密程序处理。你通常不需要与这些 低级功能,但对于某些高级用例,它可能是有用的。
如果您选择直接使用项加密程序函数,则需要提供 CryptoConfig每次呼叫。
>>>fromdynamodb_encryption_sdk.encrypted.itemimportdecrypt_python_item,encrypt_python_item>>>plaintext_item={...'some':'data',...'more':5...}>>>encrypted_item=encrypt_python_item(...item=plaintext_item,...crypto_config=my_crypto_config...)>>>decrypted_item=decrypt_python_item(...item=encrypted_item,...crypto_config=my_crypto_config...)
我应该什么时候使用项目加密程序?
一个您可能希望直接使用项加密器的用例示例是 正在处理DynamoDB Stream中的项。因为您直接接收项目数据,并且 在dynamodb json格式中,可以使用decrypt_dynamodb_item函数来解密 流中的项。我们还提供助手transformation functions
高级使用
默认情况下,helper客户端使用属性操作和加密材料提供程序 生成提供给项加密程序的CryptoConfig。用于一些高级用途 在案例中,您可能需要为特定操作提供自定义的CryptoConfig。
助手客户端上的所有数据平面操作(获取项、放置项等)都接受crypto_config 除了底层boto3客户机接受的所有参数之外的参数。
如果提供了此参数,则CryptoConfig将用于该操作 客户通常会为您构建的。
>>>fromdynamodb_encryption_sdk.encrypted.tableimportEncryptedTable>>>encrypted_table=EncryptedTable(...table=table,...materials_provider=my_crypto_materials_provider...)>>>encrypted_table.put_item(...Item=my_standard_item...)# this uses the crypto config built by the helper>>>encrypted_table.put_item(...Item=my_special_item,...crypto_config=my_special_crypto_config...)# this uses my_special_crypto_config