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à.
AWS KMS Portachiavi gerarchici
La nostra libreria di crittografia lato client è stata rinominata Database Encryption SDK. AWS Questa guida per sviluppatori fornisce ancora informazioni sul DynamoDB Encryption Client. |
Nota
A partire dal 24 luglio 2023, le chiavi di filiale create durante l'anteprima per sviluppatori non sono supportate. Crea nuove chiavi branch per continuare a utilizzare l'archivio di chiavi creato durante l'anteprima per sviluppatori.
Con il portachiavi AWS KMS Hierarchical, puoi proteggere i tuoi materiali crittografici con una chiave KMS a crittografia simmetrica senza chiamare AWS KMS ogni volta che crittografi o decrittografi un record. È una buona scelta per le applicazioni che devono ridurre al minimo le chiamate e le applicazioni che possono riutilizzare alcuni materiali crittografici AWS KMS senza violare i requisiti di sicurezza.
Il portachiavi Hierarchical è una soluzione di memorizzazione nella cache dei materiali crittografici che riduce il numero di AWS KMS chiamate utilizzando chiavi branch AWS KMS protette persistenti in una tabella Amazon DynamoDB e quindi memorizzando nella cache locale i materiali chiave delle branch utilizzati nelle operazioni di crittografia e decrittografia. La tabella DynamoDB funge da archivio di chiavi che gestisce e protegge le chiavi delle filiali. Memorizza la chiave di ramo attiva e tutte le versioni precedenti della chiave di ramo. La chiave di ramo attiva è la versione più recente della chiave di filiale. Il portachiavi Hierarchical utilizza una chiave di crittografia dei dati unica per ogni richiesta di crittografia e crittografa ogni chiave di crittografia dei dati con una chiave di wrapping unica derivata dalla chiave branch attiva. Il portachiavi Hierarchical dipende dalla gerarchia stabilita tra le chiavi branch attive e le relative chiavi di wrapping derivate.
Il portachiavi Hierarchical utilizza in genere ogni versione della chiave branch per soddisfare più richieste. Tuttavia, puoi controllare la misura in cui le chiavi di ramo attive vengono riutilizzate e determinare la frequenza con cui la chiave di ramo attiva viene ruotata. La versione attiva della chiave di ramo rimane attiva finché non viene ruotata. Le versioni precedenti della chiave di ramo attiva non verranno utilizzate per eseguire operazioni di crittografia, ma potranno comunque essere interrogate e utilizzate nelle operazioni di decrittografia.
Quando si crea un'istanza del portachiavi Hierarchical, viene creata una cache locale. Si specifica un limite di cache che definisce la quantità massima di tempo in cui i materiali chiave del branch vengono archiviati nella cache locale prima che scadano e vengano rimossi dalla cache. Il portachiavi Hierarchical effettua una AWS KMS chiamata per decrittografare la chiave del ramo e assemblare i materiali delle chiavi del ramo la prima volta che a viene specificato in un'operazione. branch-key-id
I materiali delle chiavi di filiale vengono quindi archiviati nella cache locale e riutilizzati per tutte le operazioni di crittografia e decrittografia che lo specificano fino alla scadenza del limite di cache. branch-key-id
La memorizzazione dei materiali chiave della filiale nella cache locale riduce le chiamate. AWS KMS Ad esempio, si consideri un limite di cache di 15 minuti. Se si eseguono 10.000 operazioni di crittografia entro tale limite di cache, il AWS KMS portachiavi tradizionale dovrebbe effettuare 10.000 AWS KMS chiamate per soddisfare 10.000 operazioni di crittografia. Se ne hai uno attivobranch-key-id
, il portachiavi Hierarchical deve effettuare solo una AWS KMS chiamata per soddisfare 10.000 operazioni di crittografia.
La cache locale separa i materiali di crittografia dai materiali di decrittografia. I materiali di crittografia vengono assemblati a partire dalla chiave branch attiva e riutilizzati per tutte le operazioni di crittografia fino alla scadenza del limite della cache. I materiali di decrittografia vengono assemblati a partire dall'ID e dalla versione della chiave di filiale identificati nei metadati del campo crittografato e vengono riutilizzati per tutte le operazioni di decrittografia relative all'ID e alla versione della chiave di filiale fino alla scadenza del limite della cache. La cache locale può memorizzare più versioni della stessa chiave di ramo contemporaneamente. Quando la cache locale è configurata per utilizzare abranch key ID supplier, può anche archiviare i materiali chiave delle branch provenienti da più chiavi di branch attive contemporaneamente.
Nota
Tutte le menzioni del portachiavi gerarchico nel AWS Database Encryption SDK si riferiscono al portachiavi gerarchico. AWS KMS
Argomenti
Come funziona
Le seguenti procedure dettagliate descrivono come il portachiavi Hierarchical assembla i materiali di crittografia e decrittografia e le diverse chiamate che il portachiavi effettua per le operazioni di crittografia e decrittografia. Per i dettagli tecnici sulla derivazione delle chiavi di wrapping e sui processi di crittografia delle chiavi di dati in chiaro, consulta Dettagli tecnici del portachiavi gerarchico.AWS KMS
Crittografa e firma
La procedura dettagliata seguente descrive come il portachiavi Hierarchical assembla i materiali di crittografia e ricava una chiave di avvolgimento unica.
-
Il metodo di crittografia richiede al portachiavi Hierarchical i materiali di crittografia. Il portachiavi genera una chiave di dati in testo semplice, quindi verifica se nella cache locale sono presenti materiali chiave branch validi per generare la chiave di wrapping. Se sono presenti materiali validi per le chiavi di filiale, il portachiavi passa alla Fase 4.
-
Se non ci sono materiali validi per le chiavi di ramo, il portachiavi Hierarchical interroga l'archivio delle chiavi per la chiave di ramo attiva.
-
Il key store chiama AWS KMS per decrittografare la chiave branch attiva e restituisce la chiave branch attiva in testo semplice. I dati che identificano la chiave di ramo attiva vengono serializzati per fornire dati autenticati aggiuntivi (AAD) nella chiamata di decrittografia a. AWS KMS
-
L'archivio chiavi restituisce la chiave di ramo in testo semplice e i dati che la identificano, ad esempio la versione della chiave di filiale.
-
-
Il portachiavi Hierarchical assembla i materiali chiave del ramo (la chiave di ramo in testo semplice e la versione della chiave di ramo) e ne archivia una copia nella cache locale.
-
Il portachiavi Hierarchical ricava una chiave di avvolgimento unica dalla chiave branch in testo semplice e un sale casuale a 16 byte. Utilizza la chiave di wrapping derivata per crittografare una copia della chiave di dati in testo non crittografato.
Il metodo di crittografia utilizza i materiali di crittografia per crittografare e firmare il record. Per ulteriori informazioni su come i record vengono crittografati e firmati nel AWS Database Encryption SDK, consulta Encrypt and sign.
Decrittografa e verifica
La procedura dettagliata seguente descrive come il portachiavi gerarchico assembla i materiali di decrittografia e decrittografa la chiave di dati crittografata.
-
Il metodo di decrittografia identifica la chiave di dati crittografata dal campo di descrizione del materiale del record crittografato e la passa al portachiavi gerarchico.
-
Il portachiavi Hierarchical deserializza i dati che identificano la chiave dati crittografata, inclusa la versione della chiave branch, il sale da 16 byte e altre informazioni che descrivono come è stata crittografata la chiave dati.
Per ulteriori informazioni, consulta AWS KMS Dettagli tecnici del portachiavi gerarchico.
-
Il portachiavi Hierarchical verifica se nella cache locale sono presenti materiali chiave di filiale validi che corrispondono alla versione della chiave di filiale identificata nel passaggio 2. Se sono presenti materiali validi per le chiavi di filiale, il portachiavi passa alla Fase 6.
-
Se non ci sono materiali validi per le chiavi di ramo, il portachiavi Hierarchical interroga l'archivio delle chiavi per la chiave di filiale che corrisponde alla versione della chiave di filiale identificata nello Step 2.
-
L'archivio chiavi chiama AWS KMS per decrittografare la chiave di ramo e restituisce la chiave di ramo attiva in testo semplice. I dati che identificano la chiave di ramo attiva vengono serializzati per fornire dati autenticati aggiuntivi (AAD) nella chiamata di decrittografia a. AWS KMS
-
L'archivio chiavi restituisce la chiave di ramo in testo semplice e i dati che la identificano, ad esempio la versione della chiave di filiale.
-
-
Il portachiavi Hierarchical assembla i materiali chiave del ramo (la chiave di ramo in testo semplice e la versione della chiave di ramo) e ne archivia una copia nella cache locale.
-
Il portachiavi Hierarchical utilizza i materiali delle chiavi branch assemblate e il sale da 16 byte identificato nella fase 2 per riprodurre la chiave di avvolgimento univoca che crittografava la chiave dati.
-
Il portachiavi Hierarchical utilizza la chiave di wrapping riprodotta per decrittografare la chiave dati e restituisce la chiave dati in testo semplice.
Il metodo di decrittografia utilizza i materiali di decrittografia e la chiave di dati in testo semplice per decrittografare e verificare il record. Per ulteriori informazioni su come i record vengono decrittografati e verificati nel Database Encryption SDK, consulta Decriptare e verificare. AWS
Prerequisiti
Prima di creare e utilizzare un portachiavi gerarchico, assicurati che siano soddisfatti i seguenti prerequisiti.
-
Tu o il tuo amministratore dell'archivio chiavi avete creato un archivio chiavi e creato almeno una chiave di ramo attiva.
-
Hai configurato le azioni del tuo archivio chiavi.
Nota
Il modo in cui configuri le azioni del tuo archivio chiavi determina quali operazioni puoi eseguire e quali chiavi KMS possono essere utilizzate dal portachiavi Hierarchical. Per ulteriori informazioni, consulta Key store actions.
-
Disponi delle AWS KMS autorizzazioni necessarie per accedere e utilizzare le chiavi del key store e del branch. Per ulteriori informazioni, consulta Autorizzazioni richieste.
-
Hai esaminato i tipi di cache supportati e configurato il tipo di cache più adatto alle tue esigenze. Per ulteriori informazioni, consulta Scegli una cache
Autorizzazioni richieste
Il AWS Database Encryption SDK non richiede Account AWS e non dipende da nessuno Servizio AWS. Tuttavia, per utilizzare un portachiavi gerarchico, sono necessarie le seguenti autorizzazioni Account AWS minime per le AWS KMS key crittografie simmetriche presenti nell'archivio delle chiavi.
-
Per creare e ruotare le chiavi branch, hai bisogno di kms: e kms:. GenerateDataKeyWithoutPlaintext ReEncrypt
Per ulteriori informazioni sul controllo dell'accesso alle chiavi di filiale e all'archivio delle chiavi, consulta. Implementazione di autorizzazioni con privilegio minimo
Scegli una cache
Il portachiavi gerarchico riduce il numero di chiamate effettuate AWS KMS memorizzando localmente nella cache i materiali chiave della filiale utilizzati nelle operazioni di crittografia e decrittografia. Prima di creare il tuo portachiavi Hierarchical, devi decidere che tipo di cache vuoi usare. È possibile utilizzare la cache predefinita o personalizzarla in base alle proprie esigenze.
Il portachiavi Hierarchical supporta i seguenti tipi di cache:
Cache predefinita
Per la maggior parte degli utenti, la cache predefinita soddisfa i requisiti di threading. La cache predefinita è progettata per supportare ambienti con molti multithread. Quando una voce relativa ai materiali delle chiavi di branch scade, la cache predefinita impedisce la chiamata di più thread AWS KMS notificando a un thread che la voce relativa ai materiali della chiave di branch sta per scadere con 10 secondi di anticipo. Ciò garantisce che solo un thread invii una richiesta di aggiornamento della cache AWS KMS .
Il valore predefinito e le StormTracking cache supportano lo stesso modello di threading, ma è sufficiente specificare la capacità di ingresso per utilizzare la cache predefinita. Per personalizzazioni più granulari della cache, usa. StormTracking cache
A meno che non si desideri personalizzare il numero di voci relative ai materiali chiave del ramo che possono essere archiviate nella cache locale, non è necessario specificare un tipo di cache quando si crea il portachiavi Hierarchical. Se non si specifica un tipo di cache, il portachiavi Hierarchical utilizza il tipo di cache predefinito e imposta la capacità di immissione su 1000.
Per personalizzare la cache predefinita, specificare i seguenti valori:
-
Capacità di ingresso: limita il numero di voci relative ai materiali chiave della filiale che possono essere archiviate nella cache locale.
MultiThreaded cache
La MultiThreaded cache è sicura da usare in ambienti multithread, ma non fornisce alcuna funzionalità per ridurre al minimo AWS KMS le chiamate Amazon DynamoDB. Di conseguenza, quando scade l'immissione di materiali chiave in una filiale, tutti i thread verranno avvisati contemporaneamente. Ciò può comportare più AWS KMS chiamate per aggiornare la cache.
Per utilizzare la MultiThreaded cache, specificate i seguenti valori:
-
Capacità di ingresso: limita il numero di voci relative ai materiali chiave della filiale che possono essere archiviate nella cache locale.
-
Entry Poting Tail Size: definisce il numero di elementi da potare se viene raggiunta la capacità di ingresso.
StormTracking cache
La StormTracking cache è progettata per supportare ambienti con molti multithread. Quando una voce relativa ai materiali della chiave di filiale scade, la StormTracking cache impedisce la chiamata di più thread AWS KMS notificando in anticipo a un thread che la voce relativa ai materiali chiave della branch sta per scadere. Ciò garantisce che solo un thread invii una richiesta di aggiornamento della cache AWS KMS .
Per utilizzare la StormTracking cache, specificate i seguenti valori:
-
Capacità di ingresso: limita il numero di voci relative ai materiali chiave della filiale che possono essere archiviate nella cache locale.
Valore predefinito: 1000 voci
-
Dimensione della coda di potatura di base: definisce il numero di materiali chiave del ramo da potare alla volta.
Valore predefinito: 1 voce
-
Periodo di tolleranza: definisce il numero di secondi prima della scadenza in cui viene effettuato un tentativo di aggiornare i materiali chiave della filiale.
Valore predefinito: 10 secondi
-
Intervallo di grazia: definisce il numero di secondi tra i tentativi di aggiornamento dei materiali chiave del ramo.
Valore predefinito: 1 secondi
-
Fan out: definisce il numero di tentativi simultanei che è possibile effettuare per aggiornare i materiali chiave della filiale.
Valore predefinito: 20 tentativi
-
In flight time to live (TTL): definisce il numero di secondi che mancano al timeout di un tentativo di aggiornamento dei materiali chiave della filiale. Ogni volta che la cache ritorna
NoSuchEntry
in risposta a unaGetCacheEntry
, quella chiave di ramo viene considerata in esecuzione finché la stessa chiave non viene scritta con unaPutCache
voce.Valore predefinito: 10 secondi
-
Sospensione: definisce il numero di secondi in cui un thread deve essere sospeso se
fanOut
viene superato il limite.Valore predefinito: 20 millisecondi
Cache condivisa
Per impostazione predefinita, il portachiavi Hierarchical crea una nuova cache locale ogni volta che si crea un'istanza del portachiavi. Tuttavia, la cache condivisa può aiutare a risparmiare memoria consentendoti di condividere una cache tra più portachiavi gerarchici. Anziché creare una nuova cache di materiali crittografici per ogni portachiavi gerarchico istanziato, la cache condivisa archivia solo una cache in memoria, che può essere utilizzata da tutti i portachiavi gerarchici che vi fanno riferimento. La cache condivisa aiuta a ottimizzare l'utilizzo della memoria evitando la duplicazione di materiali crittografici tra portachiavi. I portachiavi gerarchici possono invece accedere alla stessa cache sottostante, riducendo l'ingombro complessivo della memoria.
Quando crei la cache condivisa, definisci comunque il tipo di cache. È possibile specificare un Cache predefinitaMultiThreaded cache, o StormTracking cache come tipo di cache o sostituire qualsiasi cache personalizzata compatibile.
Partizioni
Più portachiavi gerarchici possono utilizzare un'unica cache condivisa. Quando si crea un portachiavi gerarchico con una cache condivisa, è possibile definire un ID di partizione opzionale. L'ID di partizione distingue quale portachiavi gerarchico sta scrivendo nella cache. Se due portachiavi gerarchici fanno riferimento allo stesso ID di partizione e allo stesso ID di chiave di filialelogical key store name, i due portachiavi condivideranno le stesse voci della cache. Se si creano due portachiavi gerarchici con la stessa cache condivisa, ma una partizione diversa IDs, ogni portachiavi accederà alle voci della cache solo dalla propria partizione designata all'interno della cache condivisa. Le partizioni agiscono come divisioni logiche all'interno della cache condivisa, consentendo a ciascun portachiavi gerarchico di funzionare indipendentemente sulla propria partizione designata, senza interferire con i dati memorizzati nell'altra partizione.
Se si intende riutilizzare o condividere le voci della cache in una partizione, è necessario definire il proprio ID di partizione. Quando passate l'ID della partizione al portachiavi Hierarchical, il portachiavi può riutilizzare le voci della cache che sono già presenti nella cache condivisa, anziché dover recuperare e autorizzare nuovamente i materiali delle chiavi della branch. Se non si specifica un ID di partizione, un ID di partizione univoco viene assegnato automaticamente al portachiavi ogni volta che si crea un'istanza del portachiavi Hierarchical.
Le seguenti procedure mostrano come creare una cache condivisa con il tipo di cache predefinito e passarla a un portachiavi gerarchico.
-
Crea un
CryptographicMaterialsCache
(CMC) utilizzando la Material Providers Library(MPL). -
Crea un
CacheType
oggetto per la cache condivisa.Passa
sharedCryptographicMaterialsCache
il file creato nel passaggio 1 al nuovoCacheType
oggetto. -
Passa l'
sharedCache
oggetto dallo Step 2 al tuo portachiavi gerarchico.Quando crei un portachiavi gerarchico con una cache condivisa, puoi facoltativamente definire un portachiavi gerarchico
partitionID
per condividere le voci della cache su più portachiavi gerarchici. Se non si specifica un ID di partizione, il portachiavi Hierarchical assegna automaticamente al portachiavi un ID di partizione univoco.Nota
I portachiavi gerarchici condivideranno le stesse voci della cache in una cache condivisa se crei due o più portachiavi che fanno riferimento allo stesso ID di partizione e allo stesso ID di chiave di filiale. logical key store name Se non desideri che più portachiavi condividano le stesse voci della cache, devi utilizzare un ID di partizione univoco per ogni portachiavi gerarchico.
L'esempio seguente crea un portachiavi Hierarchical con un branch key ID supplier limite di cache di 600 secondi. Per ulteriori informazioni sui valori definiti nella seguente configurazione del portachiavi gerarchico, vedere. Crea un portachiavi gerarchico
Crea un portachiavi gerarchico
Per creare un portachiavi gerarchico, è necessario fornire i seguenti valori:
-
Il nome di un archivio di chiavi
Il nome della tabella DynamoDB che tu o il tuo amministratore del key store avete creato per fungere da archivio chiavi.
-
Un limite di durata della cache (TTL)
La quantità di tempo, in secondi, durante la quale una chiave di filiale deve essere inserita nella cache locale può essere utilizzata prima della scadenza. Il limite di cache TTL determina la frequenza con cui il client chiama AWS KMS per autorizzare l'uso delle chiavi della filiale. Questo valore deve essere maggiore di zero. Dopo la scadenza del limite di cache TTL, la voce non viene mai fornita e verrà rimossa dalla cache locale.
-
Un identificatore di chiave di filiale
Puoi configurare staticamente il codice
branch-key-id
che identifica una singola chiave di filiale attiva nel tuo archivio di chiavi o fornire un fornitore di ID per le chiavi di filiale.Il fornitore di ID della chiave di filiale utilizza i campi memorizzati nel contesto di crittografia per determinare quale chiave di filiale è necessaria per decrittografare un record. Per impostazione predefinita, nel contesto di crittografia sono incluse solo le chiavi di partizione e ordinamento. Tuttavia, è possibile utilizzare l'azione SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT crittografica per includere campi aggiuntivi nel contesto di crittografia.
Consigliamo vivamente di utilizzare un fornitore di ID di chiavi di filiale per database multitenant in cui ogni tenant ha la propria chiave di filiale. Puoi utilizzare il fornitore di ID delle chiavi di filiale per creare un nome descrittivo per la tua chiave IDs di filiale in modo da facilitare il riconoscimento dell'ID corretto della chiave di filiale per un tenant specifico. Ad esempio, il nome descrittivo consente di fare riferimento a una chiave di filiale come
tenant1
invece dib3f61619-4d35-48ad-a275-050f87e15122
.Per le operazioni di decrittografia, è possibile configurare staticamente un singolo portachiavi gerarchico per limitare la decrittografia a un singolo tenant, oppure è possibile utilizzare il fornitore di ID della chiave di filiale per identificare quale tenant è responsabile della decrittografia di un record.
-
(Facoltativo) Una cache
Se desideri personalizzare il tipo di cache o il numero di voci relative ai materiali chiave della filiale che possono essere archiviate nella cache locale, specifica il tipo di cache e la capacità di accesso quando inizializzi il portachiavi.
Il portachiavi Hierarchical supporta i seguenti tipi di cache: predefinita, MultiThreaded e condivisa. StormTracking Per ulteriori informazioni ed esempi che dimostrano come definire ogni tipo di cache, vedere. Scegli una cache
Se non si specifica una cache, il portachiavi gerarchico utilizza automaticamente il tipo di cache predefinito e imposta la capacità di ingresso su 1000.
-
(Facoltativo) Un ID di partizione
Se si specifica ilCache condivisa, è possibile definire facoltativamente un ID di partizione. L'ID di partizione distingue quale portachiavi Hierarchical sta scrivendo nella cache. Se si intende riutilizzare o condividere le voci della cache in una partizione, è necessario definire il proprio ID di partizione. È possibile specificare qualsiasi stringa per l'ID della partizione. Se non si specifica un ID di partizione, al portachiavi viene assegnato automaticamente un ID di partizione univoco al momento della creazione.
Per ulteriori informazioni, consulta Partitions.
Nota
I portachiavi gerarchici condivideranno le stesse voci della cache in una cache condivisa se crei due o più portachiavi che fanno riferimento allo stesso ID di partizione e allo stesso ID di chiave di filiale. logical key store name Se non desideri che più portachiavi condividano le stesse voci della cache, devi utilizzare un ID di partizione univoco per ogni portachiavi gerarchico.
-
(Facoltativo) Un elenco di token di concessione
Se controlli l'accesso alla chiave KMS nel tuo portachiavi gerarchico con le concessioni, devi fornire tutti i token di concessione necessari quando inizializzi il portachiavi.
Gli esempi seguenti mostrano come creare un portachiavi gerarchico con un ID di chiave branch staticoCache predefinita, the e un limite di cache TTL di 600 secondi.
Le seguenti procedure mostrano come creare un portachiavi gerarchico con un fornitore di ID di chiave di filiale.
-
Crea un fornitore di ID chiave di filiale
L'esempio seguente crea nomi descrittivi per le due chiavi di ramo create nel passaggio 1 e chiama
CreateDynamoDbEncryptionBranchKeyIdSupplier
a creare un fornitore di ID di chiavi di filiale con il client AWS Database Encryption SDK per DynamoDB. -
Crea un portachiavi gerarchico
I seguenti esempi inizializzano un portachiavi gerarchico con il branch key ID supplier creato nel passaggio 1, un TLL limite di cache di 600 secondi e una dimensione massima della cache di 1000.
Utilizzo del portachiavi gerarchico per una crittografia ricercabile
La crittografia ricercabile consente di cercare record crittografati senza decrittografare l'intero database. Ciò si ottiene indicizzando il valore in chiaro di un campo crittografato con un beacon. Per implementare la crittografia ricercabile, è necessario utilizzare un portachiavi gerarchico.
L'CreateKey
operazione di archiviazione delle chiavi genera sia una chiave branch che una chiave beacon. La chiave branch viene utilizzata nelle operazioni di crittografia e decrittografia dei record. La chiave beacon viene utilizzata per generare beacon.
La chiave branch e la chiave beacon sono protette dallo stesso AWS KMS key che hai specificato durante la creazione del servizio di archiviazione delle chiavi. Dopo che l'CreateKey
operazione chiama AWS KMS per generare la chiave branch, chiama kms: GenerateDataKeyWithoutPlaintext una seconda volta per generare la chiave beacon utilizzando la seguente richiesta.
{ "EncryptionContext": { "branch-key-id" : "
branch-key-id
", "type" :type
, "create-time" : "timestamp
", "logical-key-store-name" : "the logical table name for your key store
", "kms-arn" :the KMS key ARN
, "hierarchy-version" : 1 }, "KeyId": "the KMS key ARN
", "NumberOfBytes": "32" }
Dopo aver generato entrambe le chiavi, l'CreateKey
operazione chiama ddb: TransactWriteItems per scrivere due nuovi elementi che mantengano la chiave branch e la chiave beacon nell'archivio delle chiavi della filiale.
Quando configuri un beacon standard, AWS Database Encryption SDK interroga l'archivio delle chiavi per la chiave beacon. Quindi, utilizza una funzione di derivazione delle extract-and-expand chiavi basata su HMAC (HKDF) per combinare la chiave beacon con il nome del beacon standard per creare la chiave HMAC per un determinato beacon.
A differenza delle chiavi branch, esiste una sola versione di chiave beacon per ogni chiave. branch-key-id
La chiave beacon non viene mai ruotata.
Definizione della fonte della chiave del beacon
Quando si definisce la versione beacon per i beacon standard e compositi, è necessario identificare la chiave beacon e definire un TTL (cache limit time to live) per i materiali chiave del beacon. I materiali delle chiavi beacon vengono archiviati in una cache locale separata dalle chiavi branch. Il seguente frammento mostra come definire un database single-tenant. keySource
Identifica la tua chiave beacon in base alla quale è associata. branch-key-id
- Definizione della fonte del beacon in un database multitenant
-
Se si dispone di un database multitenant, è necessario specificare i seguenti valori durante la configurazione di.
keySource
-
keyFieldName
Definisce il nome del campo che memorizza la chiave beacon
branch-key-id
associata alla chiave beacon utilizzata per generare i beacon per un determinato tenant.keyFieldName
Può essere una stringa qualsiasi, ma deve essere univoca per tutti gli altri campi del database. Quando si scrivono nuovi record nel database, la chiavebranch-key-id
che identifica la chiave beacon utilizzata per generare i beacon per quel record viene memorizzata in questo campo. È necessario includere questo campo nelle query del beacon e identificare i materiali chiave del beacon appropriati necessari per ricalcolare il beacon. Per ulteriori informazioni, consulta Interrogazione dei beacon in un database multi-tenant. -
CacheTTL
La quantità di tempo, in secondi, necessaria per l'immissione di una chiave beacon nella cache locale del beacon prima della scadenza. Questo valore deve essere maggiore di zero. Quando il limite di cache TTL scade, la voce viene rimossa dalla cache locale.
-
(Facoltativo) Una cache
Se desideri personalizzare il tipo di cache o il numero di voci relative ai materiali chiave della filiale che possono essere archiviate nella cache locale, specifica il tipo di cache e la capacità di accesso quando inizializzi il portachiavi.
Il portachiavi Hierarchical supporta i seguenti tipi di cache: predefinita, MultiThreaded e condivisa. StormTracking Per ulteriori informazioni ed esempi che dimostrano come definire ogni tipo di cache, vedere. Scegli una cache
Se non si specifica una cache, il portachiavi gerarchico utilizza automaticamente il tipo di cache predefinito e imposta la capacità di ingresso su 1000.
L'esempio seguente crea un portachiavi gerarchico con una chiave di filiale (ID provider), un limite di cache (TLL) di 600 secondi e una capacità di immissione di 1000.
-