Crittografia inattiva: come utilizzare le chiavi gestite dal cliente per crittografare le tabelle in Amazon Keyspaces - Amazon Keyspaces (per Apache Cassandra)

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

Crittografia inattiva: come utilizzare le chiavi gestite dal cliente per crittografare le tabelle in Amazon Keyspaces

È possibile utilizzare la console o le istruzioni CQL per specificare leAWS KMS key per le nuove tabelle e aggiornare le chiavi di crittografia delle tabelle esistenti in Amazon Keyspaces. L'argomento seguente illustra come implementare le chiavi gestite dal cliente per tabelle nuove ed esistenti.

Prerequisiti: creare una chiave gestita dal cliente utilizzandoAWS KMS e concedere le autorizzazioni ad Amazon Keyspaces

Prima di poter proteggere una tabella Amazon Keyspaces con una chiave gestita dal cliente, devi prima creare la chiave inAWS Key Management Service (AWS KMS) e quindi autorizzare Amazon Keyspaces a utilizzare quella chiave.

Fase 1: creazione di una chiave gestita dal cliente utilizzandoAWS KMS

Per creare una chiave gestita dal cliente da utilizzare per proteggere una tabella Amazon Keyspaces, puoi seguire i passaggi in Creazione di chiavi KMS con crittografia simmetrica utilizzando la console o l'AWSAPI.

Fase 2: Autorizza l'uso della chiave gestita dal cliente

Prima di poter scegliere una chiave gestita dal cliente per proteggere una tabella Amazon Keyspaces, è necessario che le policy su tale chiave gestita dal cliente forniscano ad Amazon Keyspaces l'autorizzazione per usarla per tuo conto. Hai il pieno controllo sulle policy e sulle concessioni sulla chiave gestita dal cliente. È possibile fornire queste autorizzazioni in una policy chiave, in una policy IAM o mediante una concessione.

Amazon Keyspaces non ha bisogno di ulteriori autorizzazioni per utilizzare la predefinita Chiave di proprietà di AWSper proteggere le tabelle Amazon Keyspaces nel tuoAWS account.

I seguenti argomenti mostrano come configurare le autorizzazioni richieste utilizzando politiche e sovvenzioni IAM che consentono alle tabelle Amazon Keyspaces di utilizzare una chiave gestita dal cliente.

Policy delle chiavi gestite dal cliente

Quando selezioni una chiave gestita dal cliente per proteggere una tabella Amazon Keyspaces, Amazon Keyspaces ottiene l'autorizzazione per utilizzare la chiave gestita dal cliente per conto del principale che effettua la selezione. Tale principale, un utente o un ruolo, deve disporre delle autorizzazioni per la chiave gestita dal cliente richiesta da Amazon Keyspaces.

Le autorizzazioni minime richieste da Amazon Keyspaces per una chiave gestita dal cliente sono:

Esempi di policy delle chiavi

Ad esempio, la policy di chiave di esempio riportata di seguito fornisce solo le autorizzazioni necessarie. La policy ha i seguenti effetti:

  • Consente ad Amazon Keyspaces di utilizzare la chiave gestita dal cliente nelle operazioni di crittografia e di creare concessioni, ma solo quando agisce per conto dei principali dell'account dotati dell'autorizzazione per l'utilizzo di Amazon Keyspaces. Se le entità specificate nell'istruzione della policy non dispongono dell'autorizzazione per l'utilizzo di Amazon Keyspaces, la chiamata non riesce, anche quando proviene dal servizio Amazon Keyspaces.

  • La chiave kms:ViaService condition consente le autorizzazioni solo quando la richiesta proviene da Amazon Keyspaces per conto delle entità principali elencate nell'istruzione della policy. Tali entità non possono chiamare direttamente queste operazioni. Nota: il valore kms:ViaService,cassandra.*.amazonaws.com, ha un asterisco (*) nella posizione Regione. Amazon Keyspaces richiede l'autorizzazione per essere indipendente da qualsiasi particolareRegione AWS.

  • Fornisce agli amministratori delle chiavi gestite da clienti (utenti che possono assumere ildb-team ruolo) l'accesso in sola lettura alla chiave gestita da clienti e l'autorizzazione per revocare le concessioni, incluse le concessioni richieste da Amazon Keyspaces per proteggere la tabella.

  • Fornisce ad Amazon Keyspaces l'accesso in sola lettura alla chiave gestita dal cliente. In questo caso, Amazon Keyspaces può chiamare direttamente queste operazioni. Non deve agire per conto di un account di entità principale.

Prima di utilizzare una policy di chiave di esempio, sostituisci le entità principali di esempio con le entità effettive nel tuo Account AWS.

{ "Id": "key-policy-cassandra", "Version":"2012-10-17", "Statement": [ { "Sid" : "Allow access through Amazon Keyspaces for all principals in the account that are authorized to use Amazon Keyspaces", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:user/db-lead"}, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey", "kms:CreateGrant" ], "Resource": "*", "Condition": { "StringLike": { "kms:ViaService" : "cassandra.*.amazonaws.com" } } }, { "Sid": "Allow administrators to view the customer managed key and revoke grants", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/db-team" }, "Action": [ "kms:Describe*", "kms:Get*", "kms:List*", "kms:RevokeGrant" ], "Resource": "*" } ] }

Utilizzo di concessioni per autorizzare Amazon Keyspaces

Oltre alle policy delle chiavi, Amazon Keyspaces usa le concessioni per impostare le autorizzazioni per una chiave gestita dal cliente. Per visualizzare le concessioni per una chiave gestita dal cliente nel tuo account, utilizza l'ListGrantsoperazione. Amazon Keyspaces non ha bisogno di concessioni o di autorizzazioni aggiuntive per utilizzare la Chiave di proprietà di AWSper proteggere la tabella.

Amazon Keyspaces usa le autorizzazioni per la concessione quando esegue la manutenzione dei sistemi in background e le attività di protezione dei dati continuative nel tempo. Utilizza inoltre concessioni per generare le chiavi delle tabelle.

Ogni concessione è specifica di una tabella. Se l'account include più tabelle crittografate con la stessa chiave gestita dal cliente, è prevista una concessione di ciascun tipo per ogni tabella. La concessione è vincolata dal contesto di crittografia Amazon Keyspaces, che include il nome della tabella e l'Account AWSID. La concessione include il permesso di ritirare la sovvenzione se non è più necessaria.

Per creare le concessioni, Amazon Keyspaces deve disporre dell'autorizzazione per chiamare perCreateGrant conto dell'utente che ha creato la tabella crittografata.

La policy delle chiavi può anche consentire all'account di revocare la concessione sulla chiave gestita dal cliente. Tuttavia, se revochi la concessione sulla tabella crittografata attiva, Amazon Keyspaces non sarà in grado di proteggere e mantenere la tabella.

Fase 3: specificare una chiave gestita dal cliente per una nuova tabella

Completare la procedura riportata di seguito per specificare la chiave gestita dal cliente su una nuova tabella utilizzando la console Amazon Keyspaces o la chiave CQL.

Creazione di una tabella criptata utilizzando una chiave gestita dal cliente (console)

  1. Accedi alla e apri la console Amazon Keyspaces all'indirizzo https://console.aws.amazon.com/keyspaces/home.AWS Management Console

  2. Nel pannello di navigazione, scegli Tabelle, quindi seleziona Crea tabella.

  3. Nella pagina Crea tabella nella sezione Dettagli della tabella, seleziona uno spazio chiave e fornisci un nome per la nuova tabella.

  4. Nella sezione Schema, crea lo schema per la tua tabella.

  5. Nella sezione Impostazioni della tabella, scegli Personalizza impostazioni.

  6. Continua con le impostazioni di crittografia.

    In questo passaggio, si selezionano le impostazioni di crittografia per la tabella.

    Nella sezione Crittografia inattiva sotto Scegli unAWS KMS key, scegli l'opzione Scegli una chiave KMS diversa (avanzata) e nel campo di ricerca, scegliAWS KMS key o inserisci un Amazon Resource Name (ARN).

    Nota

    Se la chiave selezionata non è accessibile o non dispone delle autorizzazioni richieste, consulta Risoluzione dei problemi di accesso con le chiavi nella Guida per gliAWS Key Management Service sviluppatori.

  7. Scegli Create (Crea) per creare la tabella crittografata.

Crea una nuova tabella utilizzando una chiave gestita dal cliente per la crittografia dei dati inattivi (CQL)

Per creare una nuova tabella che utilizza una chiave gestita dal cliente per la crittografia dei dati inattivi, puoi utilizzare l'CREATE TABLEistruzione come riportato nell'esempio che segue: Assicurati di sostituire la chiave ARN con un ARN per una chiave valida con autorizzazioni concesse ad Amazon Keyspaces.

CREATE TABLE my_keyspace.my_table(id bigint, name text, place text STATIC, PRIMARY KEY(id, name)) WITH CUSTOM_PROPERTIES = { 'encryption_specification':{ 'encryption_type': 'CUSTOMER_MANAGED_KMS_KEY', 'kms_key_identifier':'arn:aws:kms:eu-west-1:5555555555555:key/11111111-1111-111-1111-111111111111' } };

Se ricevi unaInvalid Request Exception, devi confermare che la chiave gestita dal cliente sia valida e che Amazon Keyspaces disponga delle autorizzazioni richieste. Per confermare che la chiave è stata configurata correttamente, consulta Risoluzione dei problemi di accesso con le chiavi nella Guida per gliAWS Key Management Service sviluppatori.

Fase 4: Aggiornare la chiave di crittografia di una tabella esistente

Puoi utilizzare la console Amazon Keyspaces o la CQL per modificare le chiavi di crittografia di una tabella esistente tra una chiave KMS gestita dal clienteChiave di proprietà di AWS e una chiave KMS gestita dal cliente in qualsiasi momento.

Aggiorna una tabella esistente con la nuova chiave gestita dal cliente (console)

  1. Accedi alla e apri la console Amazon Keyspaces all'indirizzo https://console.aws.amazon.com/keyspaces/home.AWS Management Console

  2. Nel pannello di navigazione, seleziona Tabelle.

  3. Scegli la tabella che desideri aggiornare, quindi seleziona la scheda Impostazioni aggiuntive.

  4. Nella sezione Crittografia inattiva, scegli Gestisci crittografia per modificare le impostazioni di crittografia per la tabella.

    In Scegli unAWS KMS key, scegli l'opzione Scegli una chiave KMS diversa (avanzata) e nel campo di ricerca, scegliAWS KMS key o inserisci un Amazon Resource Name (ARN).

    Nota

    Se la chiave selezionata non è valida, consulta Risoluzione dei problemi di accesso con le chiavi nella Guida per gliAWS Key Management Service sviluppatori.

    In alternativa, puoi scegliere unaChiave di proprietà di AWS per una tabella crittografata con una chiave gestita dal cliente.

  5. Scegli Salva modifiche per salvare le modifiche alla tabella.

Aggiornamento della chiave di crittografia utilizzata per una tabella esistente

Per modificare la chiave di crittografia di una tabella esistente, si utilizza l'ALTER TABLEistruzione per specificare una chiave gestita dal cliente per la crittografia inattiva. Assicurati di sostituire la chiave ARN con un ARN per una chiave valida con autorizzazioni concesse ad Amazon Keyspaces.

ALTER TABLE my_keyspace.my_table WITH CUSTOM_PROPERTIES = { 'encryption_specification':{ 'encryption_type': 'CUSTOMER_MANAGED_KMS_KEY', 'kms_key_identifier':'arn:aws:kms:eu-west-1:5555555555555:key/11111111-1111-111-1111-111111111111' } };

Se ricevi unaInvalid Request Exception, devi confermare che la chiave gestita dal cliente sia valida e che Amazon Keyspaces disponga delle autorizzazioni richieste. Per confermare che la chiave è stata configurata correttamente, consulta Risoluzione dei problemi di accesso con le chiavi nella Guida per gliAWS Key Management Service sviluppatori.

Per ripristinare la chiave di crittografia all'opzione di crittografia predefinita conChiavi di proprietà di AWS, è possibile utilizzare l'ALTER TABLEistruzione come illustrato nell'esempio seguente.

ALTER TABLE my_keyspace.my_table WITH CUSTOM_PROPERTIES = { 'encryption_specification':{ 'encryption_type' : 'AWS_OWNED_KMS_KEY' } };

Passaggio 5: utilizza il contesto di crittografia Amazon Keyspaces nei log

Un contesto di crittografia è un set di coppie chiave-valore che contiene dati arbitrari non segreti. Quando includi un contesto di crittografia in una richiesta di crittografia dei dati, AWS KMS lega il contesto di crittografia ai dati crittografati, in modo che lo stesso contesto di crittografia sia necessario per decrittografare i dati.

Amazon Keyspaces usa lo stesso contesto di crittografia in tutte le operazioni diAWS KMS crittografia di. Se utilizzi una chiave gestita dal cliente per proteggere la tabella Amazon Keyspaces, puoi utilizzare il contesto di crittografia per identificare l'utilizzo della chiave gestita dal cliente nei record e nei log di audit. Viene inoltre visualizzato nei log in testo chiaro, ad esempio nei log per AWS CloudTraile Amazon CloudWatch Logs.

Nelle sue richieste aAWS KMS, Amazon Keyspaces utilizza un contesto di crittografia con tre coppie chiave-valore.

"encryptionContextSubset": { "aws:cassandra:keyspaceName": "my_keyspace", "aws:cassandra:tableName": "mytable" "aws:cassandra:subscriberId": "111122223333" }
  • Keyspace — La prima coppia chiave-valore identificherà lo spazio delle chiavi che include la tabella che Amazon Keyspaces sta crittografando. La chiave è aws:cassandra:keyspaceName. Il valore è il nome del keyspace.

    "aws:cassandra:keyspaceName": "<keyspace-name>"

    Ad esempio:

    "aws:cassandra:keyspaceName": "my_keyspace"
  • Tabella — La seconda coppia chiave-valore identificherà la tabella che Amazon Keyspaces sta crittografando. La chiave è aws:cassandra:tableName. Il valore è il nome della tabella.

    "aws:cassandra:tableName": "<table-name>"

    Ad esempio:

    "aws:cassandra:tableName": "my_table"
  • Account — La terza coppia chiave-valore identificherà l'Account AWS. La chiave è aws:cassandra:subscriberId. Il valore è l'ID dell'account.

    "aws:cassandra:subscriberId": "<account-id>"

    Ad esempio:

    "aws:cassandra:subscriberId": "111122223333"

Fase 6: configura il monitoraggio conAWS CloudTrail

Se utilizzi una chiave gestita dal cliente per proteggere le tabelle Amazon Keyspaces, puoi utilizzareAWS CloudTrail i log per monitorare le richieste inviate da Amazon Keyspaces per tuoAWS KMS conto.

LeGenerateDataKeyDescribeKeyDecrypt, eCreateGrant le richieste sono discusse in questa sezione. Inoltre, Amazon Keyspaces utilizza un'RetireGrantoperazione per rimuovere una concessione quando si elimina una tabella.

GenerateDataKey

Amazon Keyspaces crea una chiave di tabella univoca per crittografare i dati inattivi. Invia una GenerateDataKeyrichiestaAWS KMS che specifica la chiave KMS per la tabella.

L'evento che registra l'operazione GenerateDataKey è simile a quello del seguente evento di esempio. L'utente è l'account di servizio Amazon Keyspaces. I parametri includono l'Amazon Resource Name (ARN) della chiave gestita dal cliente, un identificatore della chiave che richiede una chiave a 256 bit e il contesto di crittografia che identifica il keyspace, la tabella e ilAccount AWS.

{ "eventVersion": "1.08", "userIdentity": { "type": "AWSService", "invokedBy": "AWS Internal" }, "eventTime": "2021-04-16T04:56:05Z", "eventSource": "kms.amazonaws.com", "eventName": "GenerateDataKey", "awsRegion": "us-east-1", "sourceIPAddress": "AWS Internal", "userAgent": "AWS Internal", "requestParameters": { "keySpec": "AES_256", "encryptionContext": { "aws:cassandra:keyspaceName": "my_keyspace", "aws:cassandra:tableName": "my_table", "aws:cassandra:subscriberId": "123SAMPLE012" }, "keyId": "arn:aws:kms:eu-west-1:5555555555555:key/11111111-1111-111-1111-111111111111" }, "responseElements": null, "requestID": "5e8e9cb5-9194-4334-aacc-9dd7d50fe246", "eventID": "49fccab9-2448-4b97-a89d-7d5c39318d6f", "readOnly": true, "resources": [ { "accountId": "123SAMPLE012", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:eu-west-1:5555555555555:key/11111111-1111-111-1111-111111111111" } ], "eventType": "AwsApiCall", "managementEvent": true, "eventCategory": "Management", "recipientAccountId": "123SAMPLE012", "sharedEventID": "84fbaaf0-9641-4e32-9147-57d2cb08792e" }
DescribeKey

Amazon Keyspaces utilizza un'DescribeKeyoperazione per stabilire se la chiave KMS che hai selezionato esiste nell'account e nella regione.

L'evento che registra l'operazione DescribeKey è simile a quello del seguente evento di esempio. L'utente è l'account di servizio Amazon Keyspaces. I parametri includono l'ARN della chiave gestita dal cliente e un identificatore della chiave che richiede una chiave a 256 bit.

{ "eventVersion": "1.08", "userIdentity": { "type": "IAMUser", "principalId": "AIDAZ3FNIIVIZZ6H7CFQG", "arn": "arn:aws:iam::123SAMPLE012:user/admin", "accountId": "123SAMPLE012", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "userName": "admin", "sessionContext": { "sessionIssuer": {}, "webIdFederationData": {}, "attributes": { "mfaAuthenticated": "false", "creationDate": "2021-04-16T04:55:42Z" } }, "invokedBy": "AWS Internal" }, "eventTime": "2021-04-16T04:55:58Z", "eventSource": "kms.amazonaws.com", "eventName": "DescribeKey", "awsRegion": "us-east-1", "sourceIPAddress": "AWS Internal", "userAgent": "AWS Internal", "requestParameters": { "keyId": "arn:aws:kms:eu-west-1:5555555555555:key/11111111-1111-111-1111-111111111111" }, "responseElements": null, "requestID": "c25a8105-050b-4f52-8358-6e872fb03a6c", "eventID": "0d96420e-707e-41b9-9118-56585a669658", "readOnly": true, "resources": [ { "accountId": "123SAMPLE012", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:eu-west-1:5555555555555:key/11111111-1111-111-1111-111111111111" } ], "eventType": "AwsApiCall", "managementEvent": true, "eventCategory": "Management", "recipientAccountId": "123SAMPLE012" }
Decrypt

Quando si accede a una tabella Amazon Keyspaces, Amazon Keyspaces deve decrittografare la chiave della tabella per poter decrittografare le chiavi sottostanti nella gerarchia. Quindi decrittografa i dati nella tabella. Per decrittografare la chiave della tabella, Amazon Keyspaces invia una richiesta di decrittografia aAWS KMS che specifica la chiave KMS per la tabella.

L'evento che registra l'operazione Decrypt è simile a quello del seguente evento di esempio. L'utente è il principale nel tuo Account AWS che accede alla tabella. I parametri includono la chiave della tabella crittografata (come blob di testo cifrato) e il contesto di crittografia che identifica la tabella e ilAccount AWS. AWS KMSricava l'ID della chiave gestita dal cliente dal testo cifrato.

{ "eventVersion": "1.08", "userIdentity": { "type": "AWSService", "invokedBy": "AWS Internal" }, "eventTime": "2021-04-16T05:29:44Z", "eventSource": "kms.amazonaws.com", "eventName": "Decrypt", "awsRegion": "us-east-1", "sourceIPAddress": "AWS Internal", "userAgent": "AWS Internal", "requestParameters": { "encryptionContext": { "aws:cassandra:keyspaceName": "my_keyspace", "aws:cassandra:tableName": "my_table", "aws:cassandra:subscriberId": "123SAMPLE012" }, "encryptionAlgorithm": "SYMMETRIC_DEFAULT" }, "responseElements": null, "requestID": "50e80373-83c9-4034-8226-5439e1c9b259", "eventID": "8db9788f-04a5-4ae2-90c9-15c79c411b6b", "readOnly": true, "resources": [ { "accountId": "123SAMPLE012", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:eu-west-1:5555555555555:key/11111111-1111-111-1111-111111111111" } ], "eventType": "AwsApiCall", "managementEvent": true, "eventCategory": "Management", "recipientAccountId": "123SAMPLE012", "sharedEventID": "7ed99e2d-910a-4708-a4e3-0180d8dbb68e" }
CreateGrant

Quando utilizzi una chiave gestita dal cliente per proteggere la tabella Amazon Keyspaces, Amazon Keyspaces usa le concessioni per consentire al servizio di eseguire la protezione continua dei dati e le attività di manutenzione e durabilità. Queste sovvenzioni non sono richieste su Chiavi di proprietà di AWS.

Le concessioni che Amazon Keyspaces crea sono specifiche per una tabella. Il principale nella CreateGrantrichiesta è l'utente che ha creato la tabella.

L'evento che registra l'operazione CreateGrant è simile a quello del seguente evento di esempio. I parametri includono l'ARN della chiave gestita dal cliente per la tabella, il principale dell'assegnatario e il principale pianificato per il ritiro (il servizio Amazon Keyspaces), nonché le operazioni coperte dalla concessione. Include anche un vincolo che richiede che tutte le operazioni di crittografia utilizzino il contesto di crittografia specificato.

{ "eventVersion": "1.08", "userIdentity": { "type": "IAMUser", "principalId": "AIDAZ3FNIIVIZZ6H7CFQG", "arn": "arn:aws:iam::arn:aws:kms:eu-west-1:5555555555555:key/11111111-1111-111-1111-111111111111:user/admin", "accountId": "arn:aws:kms:eu-west-1:5555555555555:key/11111111-1111-111-1111-111111111111", "accessKeyId": "AKIAI44QH8DHBEXAMPLE", "userName": "admin", "sessionContext": { "sessionIssuer": {}, "webIdFederationData": {}, "attributes": { "mfaAuthenticated": "false", "creationDate": "2021-04-16T04:55:42Z" } }, "invokedBy": "AWS Internal" }, "eventTime": "2021-04-16T05:11:10Z", "eventSource": "kms.amazonaws.com", "eventName": "CreateGrant", "awsRegion": "us-east-1", "sourceIPAddress": "AWS Internal", "userAgent": "AWS Internal", "requestParameters": { "keyId": "a7d328af-215e-4661-9a69-88c858909f20", "operations": [ "DescribeKey", "GenerateDataKey", "Decrypt", "Encrypt", "ReEncryptFrom", "ReEncryptTo", "RetireGrant" ], "constraints": { "encryptionContextSubset": { "aws:cassandra:keyspaceName": "my_keyspace", "aws:cassandra:tableName": "my_table", "aws:cassandra:subscriberId": "123SAMPLE012" } }, "retiringPrincipal": "cassandratest.us-east-1.amazonaws.com", "granteePrincipal": "cassandratest.us-east-1.amazonaws.com" }, "responseElements": { "grantId": "18e4235f1b07f289762a31a1886cb5efd225f069280d4f76cd83b9b9b5501013" }, "requestID": "b379a767-1f9b-48c3-b731-fb23e865e7f7", "eventID": "29ee1fd4-28f2-416f-a419-551910d20291", "readOnly": false, "resources": [ { "accountId": "123SAMPLE012", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:eu-west-1:5555555555555:key/11111111-1111-111-1111-111111111111" } ], "eventType": "AwsApiCall", "managementEvent": true, "eventCategory": "Management", "recipientAccountId": "123SAMPLE012" }