. NETesempi - 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à.

. NETesempi

Gli esempi seguenti mostrano come utilizzare. NETlibreria di crittografia lato client per DynamoDB per proteggere gli elementi della tabella nell'applicazione. Per trovare altri esempi (e contribuire con i tuoi), consulta la. NETesempi nel repository aws-database-encryption-sdk -dynamodb su. GitHub

Gli esempi seguenti mostrano come configurare. NETlibreria di crittografia lato client per DynamoDB in una nuova tabella Amazon DynamoDB non popolata. Se desideri configurare le tabelle Amazon DynamoDB esistenti per la crittografia lato client, consulta. Aggiungi la versione 3.x a una tabella esistente

Utilizzo della crittografia del AWS database di basso livello SDK per DynamoDB API

L'esempio seguente mostra come utilizzare la crittografia del AWS database di basso livello per API DynamoDB con AWS KMS un portachiavi SDK per crittografare e firmare automaticamente gli elementi lato client con le richieste DynamoDB. PutItem

Puoi utilizzare qualsiasi portachiavi supportato, ma ti consigliamo di utilizzare uno dei portachiavi quando possibile. AWS KMS

Guarda l'esempio di codice completo: .cs BasicPutGetExample

Fase 1: Creare il portachiavi AWS KMS

L'esempio seguente utilizza la creazione CreateAwsKmsMrkMultiKeyring di un AWS KMS portachiavi con una chiave di crittografia simmetrica. KMS Il CreateAwsKmsMrkMultiKeyring metodo garantisce che il portachiavi gestisca correttamente sia le chiavi a regione singola che quelle a più regioni.

var matProv = new MaterialProviders(new MaterialProvidersConfig()); var keyringInput = new CreateAwsKmsMrkMultiKeyringInput { Generator = kmsKeyId }; var kmsKeyring = matProv.CreateAwsKmsMrkMultiKeyring(keyringInput);
Passaggio 2: configura le azioni relative agli attributi

L'esempio seguente definisce un attributeActionsOnEncrypt dizionario che rappresenta azioni di esempio relative agli attributi per un elemento della tabella.

Nota

L'esempio seguente non definisce alcun attributo comeSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT. Se si specifica un SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT attributo, devono esserlo SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT anche gli attributi di partizione e ordinamento.

var attributeActionsOnEncrypt = new Dictionary<string, CryptoAction> { ["partition_key"] = CryptoAction.SIGN_ONLY, // The partition attribute must be SIGN_ONLY ["sort_key"] = CryptoAction.SIGN_ONLY, // The sort attribute must be SIGN_ONLY ["attribute1"] = CryptoAction.ENCRYPT_AND_SIGN, ["attribute2"] = CryptoAction.SIGN_ONLY, [":attribute3"] = CryptoAction.DO_NOTHING };
Fase 3: Definire quali attributi sono esclusi dalle firme

L'esempio seguente presuppone che tutti DO_NOTHING gli attributi condividano il prefisso distinto ":«e utilizza il prefisso per definire gli attributi non firmati consentiti. Il client presuppone che qualsiasi nome di attributo con il prefisso ":" sia escluso dalle firme. Per ulteriori informazioni, consulta Allowed unsigned attributes.

const String unsignAttrPrefix = ":";
Fase 4: Definire la configurazione di crittografia delle tabelle DynamoDB

L'esempio seguente definisce una tableConfigs mappa che rappresenta la configurazione di crittografia per questa tabella DynamoDB.

Questo esempio specifica il nome della tabella DynamoDB come nome della tabella logica. Consigliamo vivamente di specificare il nome della tabella DynamoDB come nome della tabella logica quando si definisce per la prima volta la configurazione di crittografia. Per ulteriori informazioni, consulta Configurazione della crittografia in AWS Database Encryption SDK for DynamoDB.

Nota

Per utilizzare la crittografia ricercabile o i beacon firmati, è necessario includerli anche nella configurazione di crittografia. SearchConfig

Dictionary<String, DynamoDbTableEncryptionConfig> tableConfigs = new Dictionary<String, DynamoDbTableEncryptionConfig>(); DynamoDbTableEncryptionConfig config = new DynamoDbTableEncryptionConfig { LogicalTableName = ddbTableName, PartitionKeyName = "partition_key", SortKeyName = "sort_key", AttributeActionsOnEncrypt = attributeActionsOnEncrypt, Keyring = kmsKeyring, AllowedUnsignedAttributePrefix = unsignAttrPrefix }; tableConfigs.Add(ddbTableName, config);
Fase 5: Creare un nuovo client AWS SDK DynamoDB

L'esempio seguente crea un nuovo client AWS SDK DynamoDB utilizzando lo Step 4TableEncryptionConfigs.

var ddb = new Client.DynamoDbClient( new DynamoDbTablesEncryptionConfig { TableEncryptionConfigs = tableConfigs });
Fase 6: Crittografare e firmare un elemento della tabella DynamoDB

L'esempio seguente definisce un item dizionario che rappresenta un elemento di tabella di esempio e inserisce l'elemento nella tabella DynamoDB. L'elemento viene crittografato e firmato lato client prima di essere inviato a DynamoDB.

var item = new Dictionary<String, AttributeValue> { ["partition_key"] = new AttributeValue("BasicPutGetExample"), ["sort_key"] = new AttributeValue { N = "0" }, ["attribute1"] = new AttributeValue("encrypt and sign me!"), ["attribute2"] = new AttributeValue("sign me!"), [":attribute3"] = new AttributeValue("ignore me!") }; PutItemRequest putRequest = new PutItemRequest { TableName = ddbTableName, Item = item }; PutItemResponse putResponse = await ddb.PutItemAsync(putRequest);

Utilizzo del livello inferiore DynamoDbItemEncryptor

L'esempio seguente mostra come utilizzare il livello inferiore DynamoDbItemEncryptor con un AWS KMS portachiavi per crittografare e firmare direttamente gli elementi della tabella. Non DynamoDbItemEncryptor inserisce l'elemento nella tabella DynamoDB.

Puoi utilizzare qualsiasi portachiavi supportato con DynamoDB Enhanced Client, ma ti consigliamo di utilizzare uno dei AWS KMS portachiavi quando possibile.

Nota

Il livello inferiore DynamoDbItemEncryptor non supporta la crittografia ricercabile. Utilizza la crittografia del AWS database di basso livello per API DynamoDB SDK per utilizzare la crittografia ricercabile.

Guarda l'esempio di codice completo: .cs ItemEncryptDecryptExample

Fase 1: Creare il portachiavi AWS KMS

L'esempio seguente utilizza la creazione CreateAwsKmsMrkMultiKeyring di un AWS KMS portachiavi con una chiave di crittografia simmetrica. KMS Il CreateAwsKmsMrkMultiKeyring metodo garantisce che il portachiavi gestisca correttamente sia le chiavi a regione singola che quelle a più regioni.

var matProv = new MaterialProviders(new MaterialProvidersConfig()); var keyringInput = new CreateAwsKmsMrkMultiKeyringInput { Generator = kmsKeyId }; var kmsKeyring = matProv.CreateAwsKmsMrkMultiKeyring(keyringInput);
Passaggio 2: configura le azioni relative agli attributi

L'esempio seguente definisce un attributeActionsOnEncrypt dizionario che rappresenta azioni di esempio relative agli attributi per un elemento della tabella.

Nota

L'esempio seguente non definisce alcun attributo comeSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT. Se si specifica un SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT attributo, devono esserlo SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT anche gli attributi di partizione e ordinamento.

var attributeActionsOnEncrypt = new Dictionary<String, CryptoAction> { ["partition_key"] = CryptoAction.SIGN_ONLY, // The partition attribute must be SIGN_ONLY ["sort_key"] = CryptoAction.SIGN_ONLY, // The sort attribute must be SIGN_ONLY ["attribute1"] = CryptoAction.ENCRYPT_AND_SIGN, ["attribute2"] = CryptoAction.SIGN_ONLY, [":attribute3"] = CryptoAction.DO_NOTHING };
Fase 3: Definire quali attributi sono esclusi dalle firme

L'esempio seguente presuppone che tutti DO_NOTHING gli attributi condividano il prefisso distinto ":«e utilizza il prefisso per definire gli attributi non firmati consentiti. Il client presuppone che qualsiasi nome di attributo con il prefisso ":" sia escluso dalle firme. Per ulteriori informazioni, consulta Allowed unsigned attributes.

String unsignAttrPrefix = ":";
Fase 4: Definire la configurazione DynamoDbItemEncryptor

L'esempio seguente definisce la configurazione perDynamoDbItemEncryptor.

Questo esempio specifica il nome della tabella DynamoDB come nome della tabella logica. Consigliamo vivamente di specificare il nome della tabella DynamoDB come nome della tabella logica quando si definisce per la prima volta la configurazione di crittografia. Per ulteriori informazioni, consulta Configurazione della crittografia in AWS Database Encryption SDK for DynamoDB.

var config = new DynamoDbItemEncryptorConfig { LogicalTableName = ddbTableName, PartitionKeyName = "partition_key", SortKeyName = "sort_key", AttributeActionsOnEncrypt = attributeActionsOnEncrypt, Keyring = kmsKeyring, AllowedUnsignedAttributePrefix = unsignAttrPrefix };
Fase 5: Creare il DynamoDbItemEncryptor

L'esempio seguente ne crea uno nuovo DynamoDbItemEncryptor utilizzando il config tratto dal passaggio 4.

var itemEncryptor = new DynamoDbItemEncryptor(config);
Fase 6: Crittografare e firmare direttamente un elemento della tabella

L'esempio seguente crittografa e firma direttamente un elemento utilizzando il. DynamoDbItemEncryptor Non DynamoDbItemEncryptor inserisce l'elemento nella tabella DynamoDB.

var originalItem = new Dictionary<String, AttributeValue> { ["partition_key"] = new AttributeValue("ItemEncryptDecryptExample"), ["sort_key"] = new AttributeValue { N = "0" }, ["attribute1"] = new AttributeValue("encrypt and sign me!"), ["attribute2"] = new AttributeValue("sign me!"), [":attribute3"] = new AttributeValue("ignore me!") }; var encryptedItem = itemEncryptor.EncryptItem( new EncryptItemInput { PlaintextItem = originalItem } ).EncryptedItem;