

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.

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**  
L'operazione seguente 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
	 });
```

------
#### [ Python ]

```
additional_encryption_context = {"Additional Encryption Context for": "custom branch key id"}

branch_key_id: str = keystore.create_key(
    CreateKeyInput(
        branch_key_identifier = "custom-branch-key-id", # OPTIONAL
        encryption_context = additional_encryption_context, # 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();
```

------
#### [ Go ]

```
encryptionContext := map[string]string{
    "Additional Encryption Context for": "custom branch key id",
}

branchKey, err := keyStore.CreateKey(context.Background(), keystoretypes.CreateKeyInput{
    BranchKeyIdentifier: &customBranchKeyId,
    EncryptionContext:   additional_encryption_context,
})
if err != nil {
    return "", err
}
```

------

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",
	       "logical-key-store-name" : "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"
	 }
```

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"
 }
```