Utilizzo del client di crittografia DynamoDB per Python - AWS Crittografia database SDK

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Utilizzo del client di crittografia DynamoDB per Python

Nota

La nostra libreria di crittografia lato client è stata rinominata Database Encryption. AWS SDK Il seguente argomento fornisce informazioni sulle versioni 1. x —2. x del DynamoDB Encryption Client for Java e versioni 1. x —3. x del client di crittografia DynamoDB per Python. Per ulteriori informazioni, consulta AWS Database Encryption SDK for DynamoDB version support.

Questo argomento spiega alcune funzionalità del DynamoDB Encryption Client for Python che potrebbero non essere presenti in altre implementazioni del linguaggio di programmazione. Queste funzionalità sono progettate per semplificare l'utilizzo del DynamoDB Encryption Client nel modo più sicuro. Ti consigliamo di utilizzarle a meno che il tuo caso d'uso non sia insolito.

Per i dettagli sulla programmazione con il DynamoDB Encryption Client, consulta gli esempi in Python in questa guida, gli esempi nel repository GitHub su e la documentazione Python per aws-dynamodb-encryption-python il DynamoDB Encryption Client.

Classi helper del client

Il client di crittografia DynamoDB per Python include diverse classi di supporto client che rispecchiano le classi Boto 3 per DynamoDB. Queste classi di supporto sono progettate per semplificare l'aggiunta di crittografia e firma all'applicazione DynamoDB esistente ed evitare i problemi più comuni, come segue:

  • Impediscono di crittografare la chiave primaria dell'elemento, aggiungendo un'azione di override per la chiave primaria all'oggetto o generando un'eccezione se l'AttributeActionsoggetto indica esplicitamente al client di crittografare AttributeActions la chiave primaria. Se l'azione predefinita nell'oggetto AttributeActions è DO_NOTHING, le classi helper del client utilizzano tale azione per la chiave primaria. Altrimenti, utilizzano SIGN_ONLY.

  • Crea un TableInfo oggetto e popola il contesto di crittografia DynamoDB in base a una chiamata a DynamoDB. Questo aiuta a garantire che il contesto di crittografia DynamoDB sia accurato e che il client possa identificare la chiave primaria.

  • Supporta metodi, come put_item andget_item, che crittografano e decrittografano in modo trasparente gli elementi della tabella quando scrivi o leggi da una tabella DynamoDB. L'unico metodo non supportato è update_item.

Puoi utilizzare le classi helper del client al posto dell'interazione diretta con il componente di crittografia dell'item di livello inferiore. Utilizza queste classi a meno che non sia necessario impostare opzioni avanzate nel componente di crittografia dell'item.

Le classi helper del client includono:

Per utilizzare le classi client helper, il chiamante deve avere l'autorizzazione a chiamare l'operazione DynamoDB sulla tabella di destinazione DescribeTable.

TableInfo classe

La TableInfoclasse è una classe di supporto che rappresenta una tabella DynamoDB, completa di campi per la chiave primaria e gli indici secondari. Ti consente di ottenere informazioni precise e in tempo reale sulla tabella.

Se utilizzi una classe helper del client, questa crea e utilizza un oggetto TableInfo per tuo conto. Altrimenti, puoi crearne uno esplicitamente. Per vedere un esempio, consulta Utilizzo del componente di crittografia dell'item.

Quando si chiama il refresh_indexed_attributes metodo su un TableInfo oggetto, popola i valori delle proprietà dell'oggetto chiamando l'operazione DynamoDB DescribeTable. L'esecuzione di query sulla tabella è molto più affidabile rispetto all'impostazione come hardcoded dei nomi di indice. La TableInfo classe include anche una encryption_context_values proprietà che fornisce i valori richiesti per il contesto di crittografia DynamoDB.

Per utilizzare il refresh_indexed_attributes metodo, il chiamante deve avere il permesso di chiamare l'operazione DescribeTableDynamoDB sulla tabella di destinazione.

Operazioni di attributo in Python

Le operazioni di attributo comunicano al componente di crittografia dell'item quali operazioni effettuare su ciascun attributo dell'item. Per specificare le operazioni di attributo in Python, creare un oggetto AttributeActions con un'operazione predefinita ed eventuali eccezioni per determinati attributi. I valori validi vengono definiti nel tipo enumerato CryptoAction.

Importante

Dopo aver utilizzato le azioni degli attributi per crittografare gli elementi della tabella, l'aggiunta o la rimozione di attributi dal modello di dati potrebbe causare un errore di convalida della firma che impedisce di decrittografare i dati. Per una spiegazione dettagliata, consulta Modifica del modello di dati.

DO_NOTHING = 0 SIGN_ONLY = 1 ENCRYPT_AND_SIGN = 2

Ad esempio, questo oggetto AttributeActions stabilisce l'operazione ENCRYPT_AND_SIGN come predefinita per tutti gli attributi e specifica le eccezioni per gli attributi ISBN e PublicationYear.

actions = AttributeActions( default_action=CryptoAction.ENCRYPT_AND_SIGN, attribute_actions={ 'ISBN': CryptoAction.DO_NOTHING, 'PublicationYear': CryptoAction.SIGN_ONLY } )

Se utilizzi una classe helper del client, non è necessario specificare un'operazione di attributo per gli attributi della chiave primaria. Le classi helper del client impediscono la crittografia della chiave primaria.

Se non utilizzi una classe helper del client e l'operazione predefinita è ENCRYPT_AND_SIGN, devi specificare un'operazione per la chiave primaria. L'operazione consigliata per le chiavi primarie è SIGN_ONLY. Per semplificare questa operazione, utilizzate il set_index_keys metodo, che utilizza SIGN _ ONLY per le chiavi primarie, o DO_NOTHING, quando questa è l'azione predefinita.

avvertimento

Non crittografare gli attributi che vengono usati per la chiave primaria. Devono rimanere in testo semplice in modo che DynamoDB possa trovare l'elemento senza eseguire una scansione completa della tabella.

actions = AttributeActions( default_action=CryptoAction.ENCRYPT_AND_SIGN, ) actions.set_index_keys(*table_info.protected_index_keys())