As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Código de exemplo para o DynamoDB Encryption Client para Python
nota
Nossa biblioteca de criptografia do lado do cliente foi renomeada para AWS Database Encryption. SDK O tópico a seguir fornece informações sobre as versões 1.x—2.x do DynamoDB Encryption Client para Java e versões 1.x—3x do DynamoDB Encryption Client para Python. Para obter mais informações, consulte AWS Database Encryption SDK for DynamoDB para suporte à versão.
Os exemplos a seguir mostram como usar o DynamoDB Encryption Client para Python para proteger os dados do DynamoDB no aplicativo. Você pode encontrar mais exemplos (e contribuir com os seus) no diretório de exemplos
Use a classe auxiliar EncryptedTable do cliente
O exemplo a seguir mostra como usar o KMSProvedor Direto com a classe auxiliar EncryptedTable do cliente. Este exemplo usa o mesmo provedor de materiais de criptografia que o Usar o criptografador de item exemplo a seguir. No entanto, ele usa a classe EncryptedTable
em vez de interagir diretamente com o criptografador de itens de nível inferior.
Comparando esses casos, você poderá visualizar o trabalho que a classe auxiliar do cliente faz para você. Isso inclui a criação do Contexto de criptografia do DynamoDB e a verificação de que os atributos de chave primária são sempre assinados, mas nunca criptografados. Para criar o contexto de criptografia e descobrir a chave primária, as classes auxiliares do cliente chamam a operação do DynamoDB. DescribeTable Para executar esse código, você deve ter permissão para chamar essa operação.
Consulte o exemplo de código completo: aws_kms_encrypted_table.py
- Etapa 1: crie a tabela
-
Comece criando uma instância de uma tabela padrão do DynamoDB com o nome da tabela.
table_name='test-table' table = boto3.resource('dynamodb').Table(
table_name
) - Etapa 2: crie um provedor de materiais de criptografia
-
Crie uma instância do provedor de materiais criptográficos (CMP) que você selecionou.
Este exemplo usa o KMSProvedor Direto, mas você pode usar qualquer um compatívelCMP. Para criar um KMS provedor direto, especifique um AWS KMS key. Este exemplo usa o Amazon Resource Name (ARN) do AWS KMS key, mas você pode usar qualquer identificador de chave válido.
kms_key_id='arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' kms_cmp = AwsKmsCryptographicMaterialsProvider(key_id=
kms_key_id
) - Etapa 3: crie o objeto de ações de atributo
-
As Ações de atributos informam ao criptografador de itens quais ações executar em cada atributo de item. O objeto
AttributeActions
neste exemplo criptografa e assina todos os itens exceto o atributotest
, que é ignorado.Não especifique ações de atributo para os atributos de chave primária ao usar uma classe auxiliar do cliente. A classe
EncryptedTable
assina, mas nunca criptografa os atributos de chave primária.actions = AttributeActions( default_action=CryptoAction.ENCRYPT_AND_SIGN, attribute_actions={'test': CryptoAction.DO_NOTHING} )
- Etapa 4: crie a tabela criptografada
-
Crie a tabela criptografada usando a tabela padrão, o KMS Provedor Direto e as ações do atributo. Essa etapa conclui a configuração.
encrypted_table = EncryptedTable( table=table, materials_provider=kms_cmp, attribute_actions=actions )
- Etapa 5: coloque o item de texto simples na tabela
-
Ao chamar o método
put_item
noencrypted_table
, os itens da tabela são criptografados, assinados e adicionados à tabela do DynamoDB de maneira transparente.Primeiro, defina o item da tabela.
plaintext_item = { 'partition_attribute': 'value1', 'sort_attribute': 55 'example': 'data', 'numbers': 99, 'binary': Binary(b'\x00\x01\x02'), 'test': 'test-value' }
Em seguida, coloque-o na tabela.
encrypted_table.put_item(Item=plaintext_item)
Para obter o item da tabela do get_item
na forma criptografada, chame o método no objeto table
. Para obter o item descriptografado, chame o método get_item
no objeto encrypted_table
.
Usar o criptografador de item
Este exemplo mostra como interagir diretamente com o criptografador de itens no DynamoDB Encryption Client ao criptografar itens de tabela, em vez de usar as classes auxiliares do cliente que interagem com o criptografador de itens para você.
Ao usar essa técnica, crie o contexto de criptografia e o objeto de configuração (CryptoConfig
) do DynamoDB manualmente. Além disso, criptografe os itens em uma chamada e coloque-os na tabela do DynamoDB em uma chamada separada. Isso permite personalizar suas chamadas do put_item
e usar o DynamoDB Encryption Client para criptografar e assinar dados estruturados que nunca são enviados ao DynamoDB.
Este exemplo usa o KMSProvedor Direto, mas você pode usar qualquer um compatívelCMP.
Consulte o exemplo de código completo: aws_kms_encrypted_item.py
- Etapa 1: crie a tabela
-
Comece criando uma instância de um recurso de tabela padrão do DynamoDB com o nome da tabela.
table_name='test-table' table = boto3.resource('dynamodb').Table(
table_name
) - Etapa 2: crie um provedor de materiais de criptografia
-
Crie uma instância do provedor de materiais criptográficos (CMP) que você selecionou.
Este exemplo usa o KMSProvedor Direto, mas você pode usar qualquer um compatívelCMP. Para criar um KMS provedor direto, especifique um AWS KMS key. Este exemplo usa o Amazon Resource Name (ARN) do AWS KMS key, mas você pode usar qualquer identificador de chave válido.
kms_key_id='arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' kms_cmp = AwsKmsCryptographicMaterialsProvider(key_id=
kms_key_id
) - Etapa 3: usar a TableInfo classe auxiliar
-
Para obter informações sobre a tabela do DynamoDB, crie uma instância da TableInfoclasse auxiliar. Ao trabalhar diretamente com o criptografador de item, você precisa criar uma instância
TableInfo
e chamar seus métodos. As classes auxiliares do cliente fazem isso para você.O
refresh_indexed_attributes
método deTableInfo
usa a operação do DescribeTableDynamoDB para obter informações precisas e em tempo real sobre a tabela. Isso inclui sua chave primária e seus índices secundários locais e globais. O chamador precisa ter permissão para chamarDescribeTable
.table_info = TableInfo(name=
table_name
) table_info.refresh_indexed_attributes(table.meta.client) - Etapa 4: crie o contexto de criptografia do DynamoDB
-
O Contexto de criptografia do DynamoDB contém informações sobre a estrutura da tabela e de como ela é criptografada e assinada. Este exemplo cria um contexto de criptografia do DynamoDB explicitamente, pois interage com o criptografador de item. As classes auxiliares do cliente criam o contexto de criptografia do DynamoDB para você.
Para obter a chave de partição e a chave de classificação, você pode usar as propriedades da classe TableInfoauxiliar.
index_key = { 'partition_attribute': 'value1', 'sort_attribute': 55 } encryption_context = EncryptionContext( table_name=
table_name
, partition_key_name=table_info.primary_index.partition, sort_key_name=table_info.primary_index.sort, attributes=dict_to_ddb(index_key) ) - Etapa 5: crie o objeto de ações de atributo
-
As Ações de atributos informam ao criptografador de itens quais ações executar em cada atributo de item. O objeto
AttributeActions
neste exemplo criptografa e assina todos os itens, exceto para os atributos de chave primária, que são assinados, mas não criptografados, e o atributotest
, que é ignorado.Ao interagir diretamente com o criptografador de item, e a ação padrão ser
ENCRYPT_AND_SIGN
, você deve especificar uma ação alternativa para a chave primária. Você pode usar o métodoset_index_keys
, que utilizaSIGN_ONLY
para a chave primária ou usaDO_NOTHING
se é o padrão.Para especificar a chave primária, este exemplo usa as chaves de índice no TableInfoobjeto, que são preenchidas por uma chamada para o DynamoDB. Esta técnica é mais segura do que nomes de chave primária de hard-code.
actions = AttributeActions( default_action=CryptoAction.ENCRYPT_AND_SIGN, attribute_actions={'test': CryptoAction.DO_NOTHING} ) actions.set_index_keys(*table_info.protected_index_keys())
- Etapa 6: crie a configuração para o item
-
Para configurar o DynamoDB Encryption Client, use os objetos que você acabou de criar em CryptoConfig
uma configuração para o item da tabela. As classes auxiliares do cliente criam o CryptoConfig para você. crypto_config = CryptoConfig( materials_provider=kms_cmp, encryption_context=encryption_context, attribute_actions=actions )
- Etapa 7: criptografe o item
-
Essa etapa criptografa e assina o item, mas não o coloca em uma tabela do DynamoDB.
Quando você usa uma classe auxiliar do cliente, seus itens são criptografados e assinados de maneira transparente e, em seguida, adicionados à tabela do DynamoDB quando você chama o método
put_item
da classe auxiliar. Ao usar o criptografador de item diretamente, as ações de criptografia e colocação são independentes.Primeiro, crie um item de texto simples.
plaintext_item = { 'partition_attribute': 'value1', 'sort_key': 55, 'example': 'data', 'numbers': 99, 'binary': Binary(b'\x00\x01\x02'), 'test': 'test-value' }
Em seguida, criptografe e assine o item. O método
encrypt_python_item
requer o objeto de configuraçãoCryptoConfig
.encrypted_item = encrypt_python_item(plaintext_item, crypto_config)
- Etapa 8: coloque o item na tabela
-
Essa etapa coloca o item criptografado e assinado na tabela do DynamoDB.
table.put_item(Item=encrypted_item)
Para visualizar o item criptografado, chame o método get_item
no objeto original table
, em vez do objeto encrypted_table
. Ele obtém o item de tabela do DynamoDB sem verificá-la e descriptografá-la.
encrypted_item = table.get_item(Key=partition_key)['Item']
A imagem a seguir mostra parte de um item de tabela criptografado e assinado.
Os valores de atributos criptografados são dados binários. Os nomes e valores de atributos de chave primária (partition_attribute
e sort_attribute
) e o atributo test
permanecem em texto simples. A saída também mostra o atributo que contém a assinatura (*amzn-ddb-map-sig*
) e o atributo de descrição de materiais (*amzn-ddb-map-desc*
).