

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Crear una clave de rama activa
<a name="create-branch-keys"></a>

Una *clave de sucursal* es una clave de datos derivada de una AWS KMS key que el conjunto de claves AWS KMS jerárquico utiliza para reducir el número de llamadas realizadas. AWS KMS La clave de rama *activa* es la versión más reciente de la clave de rama. El conjunto de claves jerárquico genera una clave de datos única para cada solicitud de cifrado y cifra cada clave de datos con una clave de empaquetado única derivada de la clave de rama activa.

Para crear una nueva clave de rama activa, debe [configurar de forma estática](keystore-actions.md#static-keystore) las acciones del almacén de claves. `CreateKey`es una operación privilegiada que agrega el ARN de clave KMS especificado en la configuración de acciones del almacén de claves a la lista de permitidos del almacén de claves. A continuación, la clave KMS se utiliza para generar la nueva clave de rama activa. Recomendamos limitar el acceso a esta operación porque, una vez que se agrega una clave KMS al almacén de claves, no se puede eliminar.

Recomendamos utilizar la `CreateKey` operación a través de la interfaz de KeyStore administración del plano de control de la aplicación. Este enfoque se alinea con las mejores prácticas de administración de claves.

No cree claves de bifurcación en el plano de datos. Esta práctica puede resultar en:
+ Llamadas innecesarias a AWS KMS
+ Múltiples llamadas simultáneas AWS KMS en entornos de alta concurrencia
+ Varias TransactWriteItems llamadas a la tabla de DynamoDB de respaldo.

La `CreateKey` operación incluye una comprobación del estado de la `TransactWriteItems` llamada para evitar que se sobrescriban las claves de rama existentes. Sin embargo, la creación de claves en el plano de datos aún puede provocar un uso ineficiente de los recursos y posibles problemas de rendimiento.

Puede permitir incluir una clave de KMS en su almacén de claves o puede incluir varias claves de KMS actualizando el ARN de la clave de KMS que especifique en la configuración de acciones de su almacén de claves y volviendo a llamar. `CreateKey` Si permites incluir en la lista varias claves de KMS, los usuarios de tu almacén de claves deben configurar sus acciones de almacenamiento de claves para su detección, de modo que puedan usar cualquiera de las claves permitidas del almacén de claves al que tienen acceso. Para obtener más información, consulte [Configurar las acciones del almacén de claves](keystore-actions.md).

**Permisos necesarios**  
Para crear claves de rama, necesitas los ReEncrypt permisos [kms: GenerateDataKeyWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html) y [kms:](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html) en la clave KMS especificada en las acciones de tu almacén de claves.

**Crea una clave de rama**  
La siguiente operación crea una nueva clave de rama activa con la clave KMS que [especificó en la configuración de acciones del almacén de claves](keystore-actions.md#static-keystore) y agrega la clave de rama activa a la tabla de DynamoDB que sirve como almacén de claves.

Al llamar a `CreateKey`, puede optar por especificar los siguientes valores opcionales.
+ `branchKeyIdentifier`: define una `branch-key-id` personalizada.

  Para crear una `branch-key-id` personalizada, también debe incluir un contexto de cifrado adicional con el parámetro `encryptionContext`.
+ `encryptionContext`[: define un conjunto opcional de pares clave-valor no secretos que proporciona datos autenticados (AAD) adicionales en el contexto de cifrado incluido en la llamada kms:. GenerateDataKeyWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html)

  Este contexto de cifrado adicional se muestra con el prefijo `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();
```

------

En primer lugar, la operación `CreateKey` genera los siguientes valores.
+ Un [identificador único universal](https://www.ietf.org/rfc/rfc4122.txt) (UUID) de la versión 4 para el `branch-key-id` (a menos que haya especificado una `branch-key-id` personalizada).
+ Un UUID de la versión 4 para la versión de clave de rama
+ Una `timestamp` en el [formato de fecha y hora ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) en hora universal coordinada (UTC).

A continuación, la `CreateKey` operación llama a [kms: GenerateDataKeyWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html) mediante la siguiente solicitud.

```
{
	    "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**  
[La operación `CreateKey` crea una clave de rama activa y una clave de baliza, incluso si no ha configurado la base de datos para el cifrado con capacidad de búsqueda](searchable-encryption.md). Ambas claves se guardan en su almacén de claves. Para obtener más información, consulte [Uso del conjunto de claves jerárquico para el cifrado para búsquedas](use-hierarchical-keyring.md#searchable-encryption-hierarchical-keyrings).

A continuación, la `CreateKey` operación llama a [kms: ReEncrypt](https://docs.aws.amazon.com/kms/latest/APIReference/AAPI_ReEncrypt.html) para crear un registro activo para la clave de sucursal mediante la actualización del contexto de cifrado.

Por último, la `CreateKey` operación llama a [ddb: TransactWriteItems](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_TransactWriteItems.html) para escribir un nuevo elemento que conserve la clave de rama en la tabla que creó en el **paso 2**. El objeto tiene los siguientes atributos:

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