

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.

# Cómo utilizar la CLI AWS de cifrado
<a name="crypto-cli-how-to"></a>

En este tema se explica cómo utilizar los parámetros de la CLI de AWS cifrado. Para ver ejemplos, consulte [Ejemplos de la CLI AWS de cifrado](crypto-cli-examples.md). Para ver la documentación completa, consulte [Leer los documentos](https://aws-encryption-sdk-cli.readthedocs.io/en/latest/). La sintaxis que se muestra en estos ejemplos corresponde a la versión 2.1 de la CLI de AWS cifrado. *x* y versiones posteriores.

**nota**  
Las versiones de la CLI de AWS cifrado anteriores a la 4.0.0 están en [end-of-supportfase](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html#version-life-cycle).  
Puede actualizar de forma segura desde la versión 2.1.*x* y versiones posteriores a la última versión de la CLI de cifrado de AWS sin cambios en el código ni en los datos. Sin embargo, se introdujeron [nuevas características de seguridad](about-versions.md#version-2) en la versión 2.1.*x* que no son compatibles con versiones anteriores. Para actualizar desde la versión 1.7. *x* o anterior, primero debe actualizar a la última versión 1. versión *x* de la CLI AWS de cifrado. Para obtener más información, consulte [Migrando su AWS Encryption SDK](migration.md).  
Las nuevas funciones de seguridad se publicaron originalmente en las versiones 1.7 de AWS Encryption CLI. *x* y 2.0. *x*. Sin embargo, AWS Encryption CLI versión 1.8. *x* reemplaza a la versión 1.7. *x* y CLI de AWS cifrado 2.1. *x* reemplaza a 2.0. *x*. Para obtener más información, consulte el [aviso de seguridad](https://github.com/aws/aws-encryption-sdk-cli/security/advisories/GHSA-2xwp-m7mq-7q3r) correspondiente en el [aws-encryption-sdk-cli](https://github.com/aws/aws-encryption-sdk-cli/)repositorio de GitHub.

Para ver un ejemplo que muestra cómo usar la característica de seguridad que limita las claves de datos cifrados, consulte [Limitar las claves de datos cifrados](configure.md#config-limit-keys).

Para ver un ejemplo que muestra cómo utilizar las claves AWS KMS multirregionales, consulte[Uso de varias regiones AWS KMS keys](configure.md#config-mrks).

**Topics**
+ [Cómo cifrar y descifrar datos](#crypto-cli-e-d-intro)
+ [Cómo especificar las claves de encapsulamiento](#crypto-cli-master-key)
+ [Cómo proporcionar la entrada](#crypto-cli-input)
+ [Cómo especificar la ubicación de salida](#crypto-cli-output)
+ [Cómo utilizar un contexto de cifrado](#crypto-cli-encryption-context)
+ [Cómo especificar una política de compromiso](#crypto-cli-commitment-policy)
+ [Cómo almacenar parámetros en un archivo de configuración](#crypto-cli-config-file)

## Cómo cifrar y descifrar datos
<a name="crypto-cli-e-d-intro"></a>

La CLI de AWS cifrado utiliza las funciones de AWS Encryption SDK para facilitar el cifrado y el descifrado de datos de forma segura.

**nota**  
El parámetro `--master-keys` está obsoleto en la versión 1.8.*x* de la CLI de cifrado de AWS y se eliminó en la versión 2.1.*x*. En su lugar, utilice el parámetro `--wrapping-keys`. A partir de la versión 2.1.*x*, el parámetro `--wrapping-keys` es obligatorio para cifrar y descifrar. Para obtener más información, consulte [AWS Encryption SDK Referencia de parámetros y sintaxis de CLI](crypto-cli-reference.md).
+ Al cifrar datos en la CLI de AWS cifrado, se especifican los datos de texto sin formato y una [clave de empaquetado](concepts.md#master-key) (o *clave maestra*), como una AWS KMS key in AWS Key Management Service (AWS KMS). Si utiliza un proveedor de claves maestras personalizadas, también debe especificarlo. También debe especificar las ubicaciones de salida del [mensaje cifrado](concepts.md#message) y de los metadatos relativos a la operación de cifrado. El [contexto de cifrado](concepts.md#encryption-context) es opcional, pero se recomienda.

  En la versión 1.8.*x*, se requiere el parámetro `--commitment-policy` cuando usa el parámetro `--wrapping-keys`; de lo contrario, no será válido. En la versión 2.1.*x*, el parámetro `--commitment-policy` es opcional, pero se recomienda.

  ```
  aws-encryption-cli --encrypt --input myPlaintextData \
                     --wrapping-keys key=1234abcd-12ab-34cd-56ef-1234567890ab \
                     --output myEncryptedMessage \
                     --metadata-output ~/metadata \
                     --encryption-context purpose=test \
                     --commitment-policy require-encrypt-require-decrypt
  ```

  La CLI de AWS cifrado cifra los datos con una clave de datos única. Luego, cifra la clave de datos con las claves de encapsulamiento que especifique. Devuelve un [mensaje cifrado](concepts.md#message) y los metadatos relativos a la operación. El mensaje cifrado contiene los datos cifrados (*texto cifrado*) y una copia cifrada de la clave de datos. No tiene que preocuparse por almacenar, administrar ni perder la clave de datos.

   
+ Al descifrar datos, en el mensaje cifrado se transmiten el contexto de cifrado opcional y las ubicaciones de salida del texto no cifrado y de los metadatos. También debe especificar las claves de empaquetado que la CLI de AWS cifrado puede usar para descifrar el mensaje o decirle a la CLI de AWS encriptación que puede usar cualquier clave de empaquetado que cifre el mensaje.

  A partir de la versión 1.8.*x*, el parámetro `--wrapping-keys` es opcional al descifrar, pero se recomienda. A partir de la versión 2.1.*x*, el parámetro `--wrapping-keys` es obligatorio para cifrar y descifrar.

  Al descifrar, puede utilizar el atributo **key** del parámetro `--wrapping-keys` para especificar las claves de encapsulamiento que descifran los datos. Especificar una clave de AWS KMS empaquetado al descifrar es opcional, pero es una [práctica recomendada](best-practices.md) ya que evita que utilice una clave que no tenía intención de usar. Si utiliza un proveedor de claves maestras personalizadas, debe especificar el proveedor y la clave de encapsulamiento.

  Si no utiliza el atributo **clave**, debe establecer el atributo de [**detección**](#discovery-cli-attribute) del `--wrapping-keys` parámetro en`true`, lo que permite a la CLI de AWS cifrado descifrar mediante cualquier clave de empaquetado que haya cifrado el mensaje. 

  Como práctica recomendada, utilice el parámetro `--max-encrypted-data-keys` para evitar descifrar un mensaje mal formado con un número excesivo de claves de datos cifradas. Especifique el número esperado de claves de datos cifrados (una por cada clave de encapsulamiento utilizada en el cifrado) o un máximo razonable (por ejemplo, 5). Para obtener más información, consulte [Limitar las claves de datos cifrados](configure.md#config-limit-keys).

  El parámetro `--buffer` devuelve el texto no cifrado solo después de procesar todas las entradas, incluida la verificación de la firma digital, si existe alguna. 

  El parámetro `--decrypt-unsigned` descifra el texto cifrado y garantiza que los mensajes no estén firmados antes del descifrado. Utilice este parámetro si utilizó el parámetro `--algorithm` y seleccionó un conjunto de algoritmos sin firma digital para cifrar los datos. Si el texto cifrado está firmado, se produce un error en el descifrado.

  Puede utilizar `--decrypt` o `--decrypt-unsigned` para el descifrado, pero no ambos.

  ```
  aws-encryption-cli --decrypt --input myEncryptedMessage \
                     --wrapping-keys key=1234abcd-12ab-34cd-56ef-1234567890ab \
                     --output myPlaintextData \
                     --metadata-output ~/metadata \
                     --max-encrypted-data-keys 1 \
                     --buffer \
                     --encryption-context purpose=test \ 
                     --commitment-policy require-encrypt-require-decrypt
  ```

  La CLI de AWS cifrado utiliza la clave de empaquetado para descifrar la clave de datos del mensaje cifrado. A continuación, utiliza la clave de datos para descifrar los datos. Devuelve los datos en texto no cifrado y los metadatos relativos a la operación.

## Cómo especificar las claves de encapsulamiento
<a name="crypto-cli-master-key"></a>

Al cifrar datos en la CLI de AWS cifrado, debe especificar al menos una [clave de empaquetado](concepts.md#master-key) (o *clave maestra*). Puede usar AWS KMS keys in AWS Key Management Service (AWS KMS), empaquetar claves de un [proveedor de claves maestras](concepts.md#master-key-provider) personalizado, o ambas. El proveedor de claves maestras personalizadas puede ser cualquiera que sea compatible con Python.

Para especificar las claves de encapsulamiento en las versiones 1.8.*x* y posteriores, utilice el parámetro `--wrapping-keys` (`-w`). El valor de este parámetro es una colección de [atributos](#cli-master-key-attributes) con el formato `attribute=value`. Los atributos que se utilizan dependen del proveedor de claves maestras y del comando.
+ **AWS KMS**. En los comandos de cifrado, debe especificar un parámetro `--wrapping-keys` con un atributo **key**. A partir de la versión 2.1.*x*, el parámetro `--wrapping-keys` también es obligatorio para descifrar comandos. Al descifrar, el parámetro `--wrapping-keys` requiere un atributo **key** o un atributo **discovery** con un valor de `true` (pero no ambos). Otros atributos son opcionales.
+ **Proveedor de claves maestras personalizadas**. Debe especificar un parámetro `--wrapping-keys` en cada comando. El valor del parámetro debe tener los atributos **key** y **provider**.

Puede incluir [varios parámetros `--wrapping-keys`](#cli-many-cmks) y varios atributos **key** en el mismo comando. 

### Atributos de parámetro de clave de encapsulamiento
<a name="cli-master-key-attributes"></a>

El valor del parámetro `--wrapping-keys` se compone de los siguientes atributos y sus valores. Todos los comandos de cifrado requieren un parámetro `--wrapping-keys` (o parámetro `--master-keys`). A partir de la versión 2.1.*x*, el parámetro `--wrapping-keys` también es obligatorio para descifrar.

Si el nombre o valor de un atributo contiene espacios o caracteres especiales, incluya tanto el nombre como el valor entre comillas. Por ejemplo, `--wrapping-keys key=12345 "provider=my cool provider"`.

**Key: especifique una clave de encapsulamiento**  
Use el atributo **key** para identificar una clave de encapsulamiento. Al cifrar, el valor puede ser cualquier identificador de clave que el proveedor de claves maestras pueda reconocer.   

```
--wrapping-keys key=1234abcd-12ab-34cd-56ef-1234567890ab
```
En un comando de cifrado, debe incluir al menos un atributo **key** y su valor. Para cifrar su clave de datos en varias claves de encapsulamiento, utilice [varios atributos **key**](#cli-many-cmks).  

```
aws-encryption-cli --encrypt --wrapping-keys key=1234abcd-12ab-34cd-56ef-1234567890ab key=1a2b3c4d-5e6f-1a2b-3c4d-5e6f1a2b3c4d
```
En los comandos de cifrado que utilizan AWS KMS keys, el valor de la **clave** puede ser el ID de la clave, el ARN de la clave, un nombre de alias o el ARN del alias. Por ejemplo, este comando de cifrado utiliza el ARN de un alias en el valor del atributo **key**. *Para obtener más información sobre los identificadores clave de un AWS KMS key, consulte los [identificadores clave en la Guía para desarrolladores](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id).AWS Key Management Service *  

```
aws-encryption-cli --encrypt --wrapping-keys key=arn:aws:kms:us-west-2:111122223333:alias/ExampleAlias
```
En los comandos de descifrado que utilizan un proveedor de claves maestras personalizadas, son obligatorios los atributos **key** y **provider**.  

```
\\ Custom master key provider
aws-encryption-cli --decrypt --wrapping-keys provider='myProvider' key='100101'
```
En los comandos de descifrado que se utilizan AWS KMS, puede utilizar el atributo **clave** para especificar el que se va AWS KMS keys a utilizar para el descifrado, o el [atributo de **descubrimiento**](#discovery-cli-attribute) con un valor de`true`, que permite a la AWS CLI de cifrado utilizar cualquiera de los AWS KMS key que se hayan utilizado para cifrar el mensaje. Si especifica una AWS KMS key, debe ser una de las claves de empaquetado utilizadas para cifrar el mensaje.   
Especificar la clave de encapsulamiento es una [práctica recomendada de AWS Encryption SDK](best-practices.md). Garantiza que utilice lo que pretende AWS KMS key utilizar.   
En un comando de descifrado, el valor del atributo **key** debe ser un [ARN de clave](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-ARN).   

```
\\ AWS KMS key
aws-encryption-cli --decrypt --wrapping-keys key=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
```

**Descubrimiento: utilice cualquiera AWS KMS key al descifrar**  <a name="discovery-cli-attribute"></a>
Si no necesita limitar el uso AWS KMS keys al descifrar, puede usar el atributo de **descubrimiento** con un valor de. `true` Un valor de `true` permite que la CLI de AWS cifrado descifre mediante cualquiera AWS KMS key que haya cifrado el mensaje. Si no especifica un atributo **discovery**, discovery será `false` (predeterminado). El atributo de **descubrimiento** solo es válido en los comandos de descifrado y solo cuando el mensaje se cifró con. AWS KMS keys  
El atributo **discovery** con un valor de `true` es una alternativa al uso del atributo **key** para especificar AWS KMS keys. Al descifrar un mensaje cifrado con AWS KMS keys, cada `--wrapping-keys` parámetro debe tener un atributo **clave** o un atributo de **descubrimiento** con un valor de`true`, pero no ambos.  
Cuando el descubrimiento es cierto, se recomienda utilizar los atributos **discovery-partition y **discovery-account**** para limitar el AWS KMS keys uso a los que usted especifique. Cuentas de AWS En el siguiente ejemplo, los atributos de **descubrimiento** permiten que la CLI de AWS cifrado utilice cualquiera AWS KMS key de los especificados Cuentas de AWS.  

```
aws-encryption-cli --decrypt --wrapping-keys \
    discovery=true \
    discovery-partition=aws \
    discovery-account=111122223333 \
    discovery-account=444455556666
```

**Provider: especifique el proveedor de claves maestras**  
El atributo **provider** identifica el [proveedor de claves maestras](concepts.md#master-key-provider). El valor predeterminado es `aws-kms`, que representa a AWS KMS. Si utiliza otro proveedor de claves maestras, el atributo **provider** es obligatorio.  

```
--wrapping-keys key=12345 provider=my_custom_provider
```
Para obtener más información sobre cómo utilizar proveedores de claves maestras personalizadas (distintos de AWS KMS), consulte el tema **Advanced Configuration** del archivo [README](https://github.com/aws/aws-encryption-sdk-cli/blob/master/README.rst) del repositorio de la [CLI de cifrado de AWS](https://github.com/aws/aws-encryption-sdk-cli/).

**Región: especifique una Región de AWS**  
Utilice el atributo de **región** para especificar el Región de AWS de un AWS KMS key. Este atributo es válido solo en los comandos de cifrado y únicamente cuando el proveedor de clave maestra es AWS KMS.   

```
--encrypt --wrapping-keys key=alias/primary-key region=us-east-2
```
AWS Los comandos CLI de cifrado utilizan lo Región de AWS que se especifica en el valor del atributo **clave** si incluye una región, como un ARN. Si el valor **clave** especifica un Región de AWS, se omite el atributo de la **región**.  
El atributo **region** tiene prioridad sobre las demás especificaciones de la región. Si no utiliza un atributo de región, los comandos de CLI de AWS cifrado utilizan el Región de AWS especificado en el [perfil AWS CLI designado](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-using-profiles), si lo hubiera, o en el perfil predeterminado.

**Profile: permite especificar un perfil con nombre**  
Utilice el atributo **profile** para especificar un [perfil con nombre](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-using-profiles) de la AWS CLI . Los perfiles con nombre pueden contener credenciales y una Región de AWS. Este atributo solo es válido cuando el proveedor de claves maestras es AWS KMS.   

```
--wrapping-keys key=alias/primary-key profile=admin-1
```
Puede utilizar el atributo **profile** para especificar unas credenciales alternativas en los comandos de cifrado y descifrado. En un comando de cifrado, la CLI de AWS cifrado utiliza Región de AWS el del perfil nombrado solo cuando el valor de la **clave** no incluye una región y no hay ningún atributo de **región**. En un comando de descifrado, se ignora Región de AWS el perfil del nombre.

### Cómo especificar varias claves de encapsulamiento
<a name="cli-many-cmks"></a>

Puede especificar varias claves de encapsulamiento (o *claves maestras*) en cada comando. 

Si especifica más de una clave de encapsulamiento, la primera de ellas genera y cifra la clave de datos que se utiliza para cifrar sus datos. Las otras claves de encapsulamiento cifran la misma clave de datos. El [mensaje cifrado](concepts.md#message) obtenido contiene los datos cifrados ("texto cifrado") y una colección de claves de datos cifradas, cada una de ellas cifrada mediante cada clave de encapsulamiento. Cualquiera de las claves de encapsulamiento permite descifrar una clave de datos y luego los datos.

Hay dos formas de especificar varias claves de encapsulamiento: 
+ Incluir varios atributos **key** en el valor del parámetro `--wrapping-keys`.

  ```
  $key_oregon=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
  $key_ohio=arn:aws:kms:us-east-2:111122223333:key/0987ab65-43cd-21ef-09ab-87654321cdef
  
  --wrapping-keys key=$key_oregon key=$key_ohio
  ```
+ Incluir varios parámetros `--wrapping-keys` en el mismo comando. Utilice esta sintaxis cuando los valores de los atributos que vaya a especificar no deban aplicarse a todas las claves de encapsulamiento del comando.

  ```
  --wrapping-keys region=us-east-2 key=alias/test_key \
  --wrapping-keys region=us-west-1 key=alias/test_key
  ```

El atributo de **descubrimiento** con un valor de `true` permite a la CLI de AWS cifrado utilizar cualquier elemento AWS KMS key que haya cifrado el mensaje. Si usa varios parámetros `--wrapping-keys` en el mismo comando, el uso de `discovery=true` en cualquier parámetro `--wrapping-keys` anula de manera efectiva los límites del atributo **key** en otros parámetros `--wrapping-keys`. 

Por ejemplo, en el siguiente comando, el atributo **clave** del primer `--wrapping-keys` parámetro limita la CLI de AWS cifrado a lo especificado AWS KMS key. Sin embargo, el atributo de **descubrimiento** del segundo `--wrapping-keys` parámetro permite a la CLI de AWS cifrado utilizar cualquiera AWS KMS key de las cuentas especificadas para descifrar el mensaje.

```
aws-encryption-cli --decrypt \
    --wrapping-keys key=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab \
    --wrapping-keys discovery=true \
                    discovery-partition=aws \
                    discovery-account=111122223333 \
                    discovery-account=444455556666
```

## Cómo proporcionar la entrada
<a name="crypto-cli-input"></a>

La operación de cifrado de la CLI de AWS cifrado toma datos de texto sin formato como entrada y devuelve un mensaje [cifrado](concepts.md#message). La operación de descifrado toma un mensaje cifrado como entrada y devuelve datos en texto no cifrado. 

El `--input` parámetro (`-i`), que indica a la CLI de AWS cifrado dónde encontrar la entrada, es obligatorio en todos los comandos de la CLI de AWS cifrado. 

Puede proporcionar la entrada de cualquiera de las siguientes formas:
+ Utilice un archivo.

  ```
  --input myData.txt
  ```
+ Utilice un patrón de nombre de archivo. 

  ```
  --input testdir/*.xml
  ```
+ Utilice un directorio o patrón de nombre de directorio. Cuando la entrada es un directorio, el parámetro `--recursive` (`-r`, `-R`) es obligatorio.

  ```
  --input testdir --recursive
  ```
+ Canalice la entrada al comando (stdin). Utilice el valor `-` para el parámetro `--input`. El parámetro `--input` siempre es obligatorio.

  ```
  echo 'Hello World' | aws-encryption-cli --encrypt --input -
  ```

## Cómo especificar la ubicación de salida
<a name="crypto-cli-output"></a>

El `--output` parámetro indica a la CLI de AWS cifrado dónde escribir los resultados de la operación de cifrado o descifrado. Se requiere en todos los comandos de CLI de AWS cifrado. La CLI de cifrado de AWS crea un nuevo archivo de salida por cada archivo de entrada de la operación. 

Si ya existe un archivo de salida, de forma predeterminada, la CLI de AWS cifrado imprime una advertencia y, a continuación, sobrescribe el archivo. Para evitar la sobrescritura, utilice el parámetro `--interactive`, que solicita confirmación antes de sobrescribir, o el parámetro `--no-overwrite`, que omite la entrada si el resultado generara una sobrescritura. Para suprimir la advertencia de sobrescritura, utilice `--quiet`. Para capturar los errores y las advertencias de la CLI de AWS cifrado, utilice el operador de `2>&1` redirección para escribirlos en el flujo de salida.

**nota**  
Los comandos que sobrescriben archivos de salida comienzan por eliminar el archivo de salida. Aunque el comando no se ejecute correctamente, el archivo de salida podría sobrescribirse igualmente.

Puede indicar la ubicación de salida de varias maneras.
+ Especifique el nombre de archivo. Si especifica una ruta al archivo, todos los directorios de la ruta deben existir antes de que se ejecute el comando. 

  ```
  --output myEncryptedData.txt
  ```
+ Especifique un directorio. El directorio de salida debe existir antes de que se ejecute el comando. 

  Si la entrada contiene subdirectorios, el comando los reproduce en el directorio especificado.

  ```
  --output Test
  ```

  Cuando la ubicación de salida es un directorio (sin nombres de archivo), la CLI de AWS cifrado crea nombres de archivos de salida en función de los nombres de los archivos de entrada más un sufijo. Las operaciones de cifrado anexan `.encrypted` al nombre del archivo de entrada y las operaciones de descifrado anexan `.decrypted`. Para cambiar el sufijo, utilice el parámetro `--suffix`.

  Por ejemplo, si cifra `file.txt`, el comando de cifrado crea `file.txt.encrypted`. Si descifra `file.txt.encrypted`, el comando de descifrado crea `file.txt.encrypted.decrypted`.

   
+ Escriba en la línea de comandos (stdout). Escriba el valor `-` para el parámetro `--output`. Puede utilizar `--output -` para canalizar el resultado a otro comando o programa.

  ```
  --output -
  ```

## Cómo utilizar un contexto de cifrado
<a name="crypto-cli-encryption-context"></a>

La CLI de AWS cifrado le permite proporcionar un contexto de cifrado en los comandos de cifrado y descifrado. No es obligatorio, pero es una práctica criptográfica recomendada que le aconsejamos.

Un *contexto de cifrado* es un tipo de *información autenticada adicional* que es arbitraria y no es secreta. En la CLI de cifrado de AWS , el contexto de cifrado consta de una colección de pares `name=value`. Puede utilizar cualquier contenido en los pares; esto incluye información sobre los archivos, datos que le ayuden a encontrar la operación de cifrado en los registros o datos que se requieran para sus concesiones o políticas. 

**En un comando de cifrado**

El contexto de cifrado que se especifica en un comando de cifrado, junto con cualquier par adicional que agregue el [CMM](concepts.md#crypt-materials-manager), está vinculado criptográficamente a los datos cifrados. También se incluye (en texto no cifrado) en el [mensaje cifrado](concepts.md#encryption-context) que devuelve el comando. Si utiliza una AWS KMS key, es posible que el contexto de cifrado también aparezca en texto plano en los registros y registros de auditoría, por ejemplo. AWS CloudTrail

En el siguiente ejemplo se muestra un contexto de cifrado con tres pares de `name=value`.

```
--encryption-context purpose=test dept=IT class=confidential 
```

**En un comando de descifrado**

En un comando de descifrado, el contexto de cifrado ayuda a confirmar que se descifre el mensaje cifrado acertado. 

No es preciso proporcionar un contexto de cifrado en un comando de descifrado, aunque sí se haya utilizado al realizar el cifrado. Sin embargo, si lo hace, la CLI de AWS cifrado verifica que todos los elementos del contexto de cifrado del comando decrypt coincidan con un elemento del contexto de cifrado del mensaje cifrado. Si cualquier elemento no coincide, el comando de descifrado genera un error. 

Por ejemplo, el siguiente comando descifra el mensaje cifrado solo si su contexto de cifrado incluye `dept=IT`.

```
aws-encryption-cli --decrypt --encryption-context dept=IT ...
```

Un contexto de cifrado es una parte importante de la estrategia de seguridad. Sin embargo, al elegir un contexto de cifrado, es importante recordar que sus valores no son secretos. No incluya datos confidenciales en el contexto de cifrado.

**Para especificar un contexto de cifrado**
+ En un comando de **cifrado**, utilice el parámetro `--encryption-context` con uno o varios pares `name=value`. Utilice un espacio para separar cada par del siguiente. 

  ```
  --encryption-context name=value [name=value] ...
  ```
+ En un comando de **descifrado**, el valor del parámetro `--encryption-context` puede incluir pares `name=value`, elementos `name` (sin valores) o una combinación de ambos.

  ```
  --encryption-context name[=value] [name] [name=value] ...
  ```

Si `name` o `value` de un par `name=value` incluye espacios o caracteres especiales, incluya el par completo entre comillas.

```
--encryption-context "department=software engineering" "Región de AWS=us-west-2"
```

Por ejemplo, este comando de cifrado incluye un contexto de cifrado con dos pares, `purpose=test` y `dept=23`.

```
aws-encryption-cli --encrypt --encryption-context purpose=test dept=23 ...
```

Estos comandos de descifrado se ejecutarían correctamente. El contexto de cifrado de cada comando es un subconjunto del contexto de cifrado original.

```
\\ Any one or both of the encryption context pairs
aws-encryption-cli --decrypt --encryption-context dept=23 ...

\\ Any one or both of the encryption context names
aws-encryption-cli --decrypt --encryption-context purpose ...

\\ Any combination of names and pairs
aws-encryption-cli --decrypt --encryption-context dept purpose=test ...
```

Sin embargo, estos comandos de descifrado generarían un error. El contexto de cifrado del mensaje cifrado no contiene los elementos especificados.

```
aws-encryption-cli --decrypt --encryption-context dept=Finance ...
aws-encryption-cli --decrypt --encryption-context scope ...
```

## Cómo especificar una política de compromiso
<a name="crypto-cli-commitment-policy"></a>

Para establecer la [política de compromiso](concepts.md#commitment-policy) del comando, utilice el [parámetro `--commitment-policy`](crypto-cli-reference.md#syntax-commitment-policy). Este parámetro se introduce en la versión 1.8.*x*. Es válido en los comandos de cifrado y descifrado. La política de compromiso que establezca solo es válida para el comando en el que aparece. Si no establece una política de compromiso para un comando, la CLI de AWS cifrado utiliza el valor predeterminado.

Por ejemplo, el siguiente valor de parámetro establece la política de compromiso en `require-encrypt-allow-decrypt`, que siempre cifra con un compromiso clave, pero descifra un texto cifrado que se haya cifrado con o sin compromiso clave. 

```
--commitment-policy require-encrypt-allow-decrypt
```

## Cómo almacenar parámetros en un archivo de configuración
<a name="crypto-cli-config-file"></a>

Puede ahorrar tiempo y evitar errores de escritura guardando los parámetros y valores de la CLI de AWS cifrado utilizados con frecuencia en los archivos de configuración. 

Un *archivo de configuración* es un archivo de texto que contiene parámetros y valores para un comando CLI de AWS cifrado. Cuando se hace referencia a un archivo de configuración en un comando de la CLI de cifrado de AWS , la referencia se sustituye por los parámetros y los valores del archivo de configuración. El efecto es el mismo que si se hubiese escrito el contenido del archivo en la línea de comandos. Un archivo de configuración puede tener cualquier nombre y puede estar ubicado en cualquier directorio al que el usuario actual tenga acceso. 

En el siguiente ejemplo de archivo de configuración, `key.conf`, se especifican dos AWS KMS keys en diferentes regiones.

```
--wrapping-keys key=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
--wrapping-keys key=arn:aws:kms:us-east-2:111122223333:key/0987ab65-43cd-21ef-09ab-87654321cdef
```

Para utilizar el archivo de configuración en un comando, el nombre de archivo debe llevar el símbolo de arroba (`@`) como prefijo. En una PowerShell consola, utilice un carácter de comilla invertida para evitar el signo at (``@`).

En el comando de este ejemplo se utiliza el archivo `key.conf` en un comando de cifrado.

------
#### [ Bash ]

```
$ aws-encryption-cli -e @key.conf -i hello.txt -o testdir  
```

------
#### [ PowerShell ]

```
PS C:\> aws-encryption-cli -e `@key.conf -i .\Hello.txt -o .\TestDir
```

------

**Reglas de los archivos de configuración**

A continuación, se enumeran las reglas para utilizar archivos de configuración:
+ Puede incluir varios parámetros en cada archivo de configuración y enumerarlos en cualquier orden. Enumere cada parámetro con sus valores (si procede) en una línea independiente. 
+ Utilice `#` para agregar un comentario a la totalidad o parte de una línea.
+ Puede incluir referencias a otros archivos de configuración. No utilices una tilde para escapar del `@` letrero, ni siquiera para entrar. PowerShell
+ Si utiliza comillas en un archivo de configuración, el texto entrecomillado no puede abarcar varias líneas.

Por ejemplo, este es el contenido de un archivo `encrypt.conf` de muestra.

```
# Archive Files
--encrypt
--output /archive/logs
--recursive
--interactive
--encryption-context class=unclassified dept=IT
--suffix  # No suffix
--metadata-output ~/metadata
@caching.conf  # Use limited caching
```

También puede incluir varios archivos de configuración en un comando. En el comando de este ejemplo se utilizan los archivos de configuración `encrypt.conf` y `master-keys.conf`.

------
#### [ Bash ]

```
$  aws-encryption-cli -i /usr/logs @encrypt.conf @master-keys.conf
```

------
#### [ PowerShell ]

```
PS C:\> aws-encryption-cli -i $home\Test\*.log `@encrypt.conf `@master-keys.conf
```

------

**Siguiente: **[Pruebe los ejemplos de CLI de cifrado de AWS](crypto-cli-examples.md)