

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

# Creare una chiave di ramo attiva
<a name="create-branch-keys"></a>

Una *chiave branch* è una chiave dati derivata da an AWS KMS key utilizzata dal portachiavi AWS KMS Hierarchical per ridurre il numero di chiamate effettuate. AWS KMS La chiave di filiale *attiva* è la versione più recente della chiave di filiale. Il portachiavi Hierarchical genera una chiave dati unica per ogni richiesta di crittografia e crittografa ogni chiave di dati con una chiave di wrapping unica derivata dalla chiave branch attiva.

Per creare una nuova chiave branch attiva, devi configurare [staticamente](keystore-actions.md#static-keystore) le azioni del tuo key store. `CreateKey`è un'operazione privilegiata che aggiunge l'ARN della chiave KMS specificato nella configurazione delle azioni dell'archivio chiavi all'elenco delle autorizzazioni dell'archivio chiavi. Quindi, la chiave KMS viene utilizzata per generare la nuova chiave di ramo attiva. Consigliamo di limitare l'accesso a questa operazione perché una volta aggiunta una chiave KMS all'archivio chiavi, non può essere eliminata.

Ti consigliamo di utilizzare l'`CreateKey`operazione tramite l'interfaccia di KeyStore amministrazione nel piano di controllo dell'applicazione. Questo approccio è in linea con le migliori pratiche per la gestione delle chiavi.

Non create chiavi di filiale nel piano dati. Questa pratica può portare a:
+ Chiamate non necessarie a AWS KMS
+ Più chiamate simultanee verso ambienti AWS KMS ad alta concorrenza
+  TransactWriteItems Chiamate multiple alla tabella DynamoDB di backup.

L'`CreateKey`operazione include un controllo delle condizioni nella `TransactWriteItems` chiamata per impedire la sovrascrittura delle chiavi di filiale esistenti. Tuttavia, la creazione di chiavi nel piano dati può comunque comportare un utilizzo inefficiente delle risorse e potenziali problemi di prestazioni.

Puoi inserire una chiave KMS nell'archivio delle chiavi oppure puoi inserire più chiavi KMS aggiornando l'ARN della chiave KMS specificato nella configurazione delle azioni dell'archivio chiavi e richiamando nuovamente. `CreateKey` Se consenti l'inserimento di più chiavi KMS, gli utenti del tuo key store devono configurare le azioni di rilevamento delle chiavi in modo che possano utilizzare tutte le chiavi consentite nell'archivio chiavi a cui hanno accesso. Per ulteriori informazioni, consulta [Configurare le azioni del key store](keystore-actions.md).

**Autorizzazioni richieste**  
Per creare chiavi branch, hai bisogno delle ReEncrypt autorizzazioni [kms: GenerateDataKeyWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html) e [kms:](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html) sulla chiave KMS specificata nelle azioni del tuo key store.

**Crea una chiave di filiale**  
La seguente operazione crea una nuova chiave di ramo attiva utilizzando la chiave KMS [specificata nella configurazione delle azioni dell'archivio chiavi e aggiunge la chiave](keystore-actions.md#static-keystore) di ramo attiva alla tabella DynamoDB che funge da archivio chiavi.

Quando si chiama`CreateKey`, è possibile scegliere di specificare i seguenti valori opzionali.
+ `branchKeyIdentifier`: definisce una personalizzazione`branch-key-id`.

  Per creare una personalizzazione`branch-key-id`, è necessario includere anche un contesto di crittografia aggiuntivo con il `encryptionContext` parametro.
+ `encryptionContext`[: definisce un set opzionale di coppie chiave-valore non segrete che fornisce dati autenticati aggiuntivi (AAD) nel contesto di crittografia incluso nella chiamata kms:. GenerateDataKeyWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html)

  Questo contesto di crittografia aggiuntivo viene visualizzato con il prefisso. `aws-crypto-ec:`

------
#### [ Java ]

```
final Map<String, String> additionalEncryptionContext = Collections.singletonMap("Additional Encryption Context for",
	         "custom branch key id");
	             
	 final String BranchKey = keystore.CreateKey(
	         CreateKeyInput.builder()
	                 .branchKeyIdentifier(custom-branch-key-id) //OPTIONAL
	                 .encryptionContext(additionalEncryptionContext) //OPTIONAL              
	                 .build()).branchKeyIdentifier();
```

------
#### [ C\$1 / .NET ]

```
var additionalEncryptionContext = new Dictionary<string, string>();
	 additionalEncryptionContext.Add("Additional Encryption Context for", "custom branch key id");
	         
	 var branchKeyId = keystore.CreateKey(new CreateKeyInput
	 {
	     BranchKeyIdentifier = "custom-branch-key-id", // OPTIONAL
	     EncryptionContext = additionalEncryptionContext // OPTIONAL
	 });
```

------
#### [ Rust ]

```
let additional_encryption_context = HashMap::from([
    ("Additional Encryption Context for".to_string(), "custom branch key id".to_string())
]);

let branch_key_id = keystore.create_key()
    .branch_key_identifier("custom-branch-key-id") // OPTIONAL
    .encryption_context(additional_encryption_context) // OPTIONAL
    .send()
    .await?
    .branch_key_identifier
    .unwrap();
```

------

Innanzitutto, l'`CreateKey`operazione genera i seguenti valori.
+ Un [identificatore univoco universale](https://www.ietf.org/rfc/rfc4122.txt) (UUID) versione 4 per (a meno che non sia stato specificato un identificatore personalizzato). `branch-key-id` `branch-key-id`
+ Un UUID versione 4 per la versione branch key
+ A `timestamp` nel formato di [data e ora ISO 8601 in formato](https://www.iso.org/iso-8601-date-and-time-format.html) UTC (Coordinated Universal Time).

Quindi, l'`CreateKey`operazione chiama [kms: GenerateDataKeyWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html) utilizzando la seguente richiesta.

```
{
	    "EncryptionContext": { 
	       "branch-key-id" : "branch-key-id",
	       "type" : "type",
	       "create-time" : "timestamp",
	       "tablename" : "the logical table name for your key store",
	       "kms-arn" : the KMS key ARN,
	       "hierarchy-version" : "1",
	       "aws-crypto-ec:contextKey": "contextValue"
	    },
	    "KeyId": "the KMS key ARN you specified in your key store actions",
	    "NumberOfBytes": "32"
	 }
```

**Nota**  
[L'`CreateKey`operazione crea una chiave branch attiva e una chiave beacon, anche se il database non è stato configurato per la crittografia ricercabile.](searchable-encryption.md) Entrambe le chiavi sono memorizzate nell'archivio delle chiavi. Per ulteriori informazioni, vedere [Utilizzo del portachiavi gerarchico per la](use-hierarchical-keyring.md#searchable-encryption-hierarchical-keyrings) crittografia ricercabile.

Successivamente, l'`CreateKey`operazione chiama [kms: ReEncrypt](https://docs.aws.amazon.com/kms/latest/APIReference/AAPI_ReEncrypt.html) per creare un record attivo per la chiave branch aggiornando il contesto di crittografia.

**Infine, l'`CreateKey`operazione chiama [ddb: TransactWriteItems](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_TransactWriteItems.html) per scrivere un nuovo elemento che mantenga la chiave di ramo nella tabella creata nel passaggio 2.** L'elemento ha i seguenti attributi.

```
{
	     "branch-key-id" : branch-key-id,
	     "type" : "branch:ACTIVE",
	     "enc" : the branch key returned by the GenerateDataKeyWithoutPlaintext call,
	     "version": "branch:version:the branch key version UUID",
	     "create-time" : "timestamp",
	     "kms-arn" : "the KMS key ARN you specified in Step 1",
	     "hierarchy-version" : "1",
	     "aws-crypto-ec:contextKey": "contextValue"
 }
```