

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.

# Protección de datos en Amazon DocumentDB
<a name="security.data-protection"></a>

El [modelo de responsabilidad compartida](https://aws.amazon.com/compliance/shared-responsibility-model/) de AWS se aplica a la protección de los datos en Amazon DocumentDB (compatible con MongoDB). Como se describe en este modelo, AWS es responsable de proteger la infraestructura global que ejecuta toda la Nube de AWS. Eres responsable de mantener el control sobre el contenido alojado en esta infraestructura. También eres responsable de las tareas de administración y configuración de seguridad para los Servicios de AWS que utiliza. Para obtener más información sobre la privacidad de los datos, consulta las [Preguntas frecuentes sobre la privacidad de datos](https://aws.amazon.com/compliance/data-privacy-faq/). Para obtener información sobre la protección de datos en Europa, consulta la publicación de blog sobre el [Modelo de responsabilidad compartida de AWS y GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/) en el * Blog de seguridad de AWS*.

Con fines de protección de datos, recomendamos proteger las credenciales de la Cuenta de AWS y configurar cuentas de usuario individuales con AWS IAM Identity Center o AWS Identity and Access Management (IAM). De esta manera, solo se otorgan a cada usuario los permisos necesarios para cumplir sus obligaciones laborales. También recomendamos proteger sus datos de la siguiente manera:
+ Utiliza la autenticación multifactor (MFA) en cada cuenta.
+ Utiliza SSL/TLS para comunicarse con los recursos de AWS. Se recomienda el uso de TLS 1.2 y recomendamos TLS 1.3.
+ Configure los registros de API y de actividad de los usuarios con AWS CloudTrail. Para obtener información sobre cómo utilizar registros de seguimiento de CloudTrail para capturar actividades de AWS, consulta [Working with CloudTrail trails](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-trails.html) en la *Guía del usuario de AWS CloudTrail*.
+ Utiliza las soluciones de cifrado de AWS, junto con todos los controles de seguridad predeterminados dentro de los servicios de Servicios de AWS.
+ Utiliza servicios de seguridad administrados avanzados, como Amazon Macie, que lo ayuden a detectar y proteger los datos confidenciales almacenados en Amazon S3.
+ Si necesita módulos criptográficos validados FIPS 140-3 al acceder a AWS a través de una interfaz de línea de comandos o una API, utiliza un punto de conexión de FIPS. Para obtener más información sobre los puntos de conexión de FIPS disponibles, consulta [Estándar de procesamiento de la información federal (FIPS) 140-3](https://aws.amazon.com/compliance/fips/).

Se recomienda encarecidamente no introducir nunca información confidencial o sensible, como por ejemplo, direcciones de correo electrónico de clientes, en etiquetas o campos de formato libre, tales como el campo **Nombre**. Esto incluye cuando trabaja con Amazon DocumentDB u otros Servicios de AWS mediante la consola, la API, la AWS CLI o los SDK de AWS. Cualquier dato que ingrese en etiquetas o campos de texto de formato libre utilizados para nombres se puede emplear para los registros de facturación o diagnóstico. Si proporciona una URL a un servidor externo, recomendamos encarecidamente que no incluya información de credenciales en la URL a fin de validar la solicitud para ese servidor.

**Topics**
+ [Cifrado a nivel de campo del lado del cliente](field-level-encryption.md)
+ [Cifrado de datos en reposo](encryption-at-rest.md)
+ [Cifrado de datos en tránsito](security.encryption.ssl.md)
+ [Administración de claves](security.encryption.ssl.public-key.md)

# Cifrado a nivel de campo del lado del cliente
<a name="field-level-encryption"></a>

El cifrado a nivel de campo (FLE) del lado del cliente de Amazon DocumentDB le permite cifrar los datos confidenciales de las aplicaciones cliente antes de transferirlos a un clúster de Amazon DocumentDB. Los datos confidenciales permanecen cifrados cuando se almacenan y procesan en un clúster y se descifran en la aplicación cliente cuando se recuperan.

**Topics**
+ [Introducción](#fle-getting-started)
+ [Consultas en el FLE del lado del cliente](#fle-querying)
+ [Limitaciones](#fle-limitationa)

## Introducción
<a name="fle-getting-started"></a>

La configuración inicial del FLE del lado del cliente en Amazon DocumentDB es un proceso de cuatro pasos que incluye la creación de una clave de cifrado, la asociación de un rol a la aplicación, la configuración de la aplicación y la definición de la operación CRUD con las opciones de cifrado.

**Topics**
+ [Paso 1: crear las claves de cifrado](#fle-step-create-key)
+ [Paso 2: asociar un rol a la aplicación](#fle-step-associate-role)
+ [Paso 3: configurar la aplicación](#fle-step-config-app)
+ [Paso 4: definir una operación CRUD](#fle-step-crud-ops)
+ [Ejemplo: archivo de configuración de cifrado a nivel de campo del lado del cliente](#fle-config-example)

### Paso 1: crear las claves de cifrado
<a name="fle-step-create-key"></a>

Con AWS Key Management Service, cree una clave simétrica que se utilice para cifrar y descifrar el campo de datos confidenciales y asígnele los permisos de uso de IAM necesarios. AWS KMS almacena la clave de cliente (CK) que se utiliza para cifrar las claves de datos (DK). Recomendamos almacenar la clave de cliente en KMS para reforzar su postura de seguridad. La clave de datos es la clave secundaria que se almacena en una colección de Amazon DocumentDB y se requiere para cifrar los campos confidenciales antes de almacenar el documento en Amazon DocumentDB. La clave de cliente cifra la clave de datos, que a su vez cifra y descifra sus datos. Si utiliza un clúster global, puede crear una clave multirregional que puedan utilizar distintos roles de servicio en distintas regiones.

Para obtener más información sobre la AWS Key Management Service, incluida la forma de crearla, consulte la [Guía para desarrolladores del Servicio de administración de claves de AWS](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html).

### Paso 2: asociar un rol a la aplicación
<a name="fle-step-associate-role"></a>

Crear una política de IAM con permisos de AWS KMS apropiados. Esta política permite a las identidades de IAM a las que está asociada obtener y descifrar la clave KMS especificada en el campo de recursos. La aplicación asume este rol de IAM para autenticarse con AWS KMS.

El aspecto de la respuesta debe ser parecido al siguiente:

```
{ "Effect": "Allow",
"Action": ["kms:Decrypt", "kms:Encrypt"],
"Resource": "Customer Key ARN"
}
```

### Paso 3: configurar la aplicación
<a name="fle-step-config-app"></a>

A estas alturas, ya ha definido una clave de cliente en AWS KMS, ha creado una función de rol de IAM y le ha otorgado los permisos de IAM correctos para acceder a la clave de cliente. Importe estos paquetes necesarios.

```
import boto3
import json
import base64
from pymongo import MongoClient
from pymongo.encryption import (Algorithm,
                                ClientEncryption)
```

```
# create a session object: 
my_session = boto3.session.Session()

# get access_key and secret_key programmatically using get_frozen_credentials() method:
 current_credentials = my_session.get_credentials().get_frozen_credentials()
```

1. Especifique “aws” como tipo de proveedor de KMS e introduzca las credenciales de su cuenta, que se recuperaron en el paso anterior.

   ```
   provider = "aws"
   kms_providers = {
       provider: {
           "accessKeyId": current_credentials.access_key,
           "secretAccessKey": current_credentials.secret_key
       }
   }
   ```

1. Especifique la clave del cliente que se utiliza para cifrar la clave de datos:

   ```
   customer_key = {
   “region”: “AWS region of the customer_key”,
       “key”: “customer_key ARN”
   }
   
   key_vault_namespace = "encryption.dataKeys"
   
   key_alt_name = 'TEST_DATA_KEY'
   ```

1. Configure el objeto MongoClient:

   ```
   client = MongoClient(connection_string)
   
   coll = client.test.coll
   coll.drop()
   
   client_encryption = ClientEncryption(
       kms_providers, # pass in the kms_providers variable from the previous step
       key_vault_namespace = key_vault_namespace,
       client,
       coll.codec_options
   )
   ```

1. Genere su clave de datos:

   ```
   data_key_id = client_encryption.create_data_key(provider,
       customer_key,
       key_alt_name = [key_alt_name])
   ```

1. Recupera tu clave de datos existente:

   ```
   data_key = DataKey("aws",
       master_key = customer_key)
   key_id = data_key["_id"]
   data_key_id = client[key_vault_namespace].find_one({"_id": key_id})
   ```

### Paso 4: definir una operación CRUD
<a name="fle-step-crud-ops"></a>

Defina la operación CRUD con opciones de cifrado.

1. Defina la colección para escribir/leer/eliminar un solo documento:

   ```
   coll = client.gameinfo.users
   ```

1. Cifrado explícito: cifra los campos e inserta:
**nota**  
Debe proporcionarse exactamente uno de los siguientes valores: “key\$1id” o “key\$1alt\$1name”.

   ```
   encrypted_first_name = client_encryption.encrypt(
       "Jane",
       Algorithm.AEAD_AES_256_CBC_HMAC_SHA_512_Deterministic,
       key_alt_name=data_key_id
   )
   encrypted_last_name = client_encryption.encrypt(
       "Doe",
       Algorithm.AEAD_AES_256_CBC_HMAC_SHA_512_Deterministic,
       key_alt_name=data_key_id
   )
   encrypted_dob = client_encryption.encrypt(
       "1990-01-01",
       Algorithm.AEAD_AES_256_CBC_HMAC_SHA_512_Random,
       key_alt_name=data_key_id
   )
   
   coll.insert_one(
       {"gamerTag": "jane_doe90",
       "firstName": encrypted_first_name,
       "lastName": encrypted_last_name,
       "dateOfBirth":encrypted_dob,
       "Favorite_games":["Halo","Age of Empires 2","Medal of Honor"]
   })
   ```

### Ejemplo: archivo de configuración de cifrado a nivel de campo del lado del cliente
<a name="fle-config-example"></a>

En el siguiente ejemplo, reemplace cada *marcador de posición del usuario* con su propia información.

```
# import python packages:
import boto3
import json
import base64
from pymongo import MongoClient
from pymongo.encryption import (Algorithm,
                                ClientEncryption)

def main():
    
    # create a session object:
    my_session = boto3.session.Session()
    
    # get aws_region from session object:
    aws_region = my_session.region_name
    
    # get access_key and secret_key programmatically using get_frozen_credentials() method:
    current_credentials = my_session.get_credentials().get_frozen_credentials()
    provider = "aws"
    
    # define the kms_providers which is later used to create the Data Key:
    kms_providers = {
        provider: {
            "accessKeyId": current_credentials.access_key,
            "secretAccessKey": current_credentials.secret_key
        }
    }
    
    # enter the kms key ARN. Replace the example ARN value.
    kms_arn = "arn:aws:kms:us-east-1:123456789:key/abcd-efgh-ijkl-mnop"
    customer_key = {
        "region": aws_region,
        "key":kms_arn
    }

    # secrets manager is used to strore and retrieve user credentials for connecting to an Amazon DocumentDB cluster. 
    # retrieve the secret using the secret name. Replace the example secret key.
    secret_name = "/dev/secretKey"
    docdb_credentials = json.loads(my_session.client(service_name = 'secretsmanager', region_name = "us-east-1").get_secret_value(SecretId = secret_name)['SecretString'])

    connection_params = '/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false'
    conn_str = 'mongodb://' + docdb_credentials["username"] + ':' + docdb_credentials["password"] + '@' + docdb_credentials["host"] + ':' + str(docdb_credentials["port"]) + connection_params
    client = MongoClient(conn_str) 

    coll = client.test.coll
    coll.drop()
    
    # store the encryption data keys in a key vault collection (having naming convention as db.collection):
    key_vault_namespace = "encryption.dataKeys"
    key_vault_db_name, key_vault_coll_name = key_vault_namespace.split(".", 1)

    # set up the key vault (key_vault_namespace) for this example:
    key_vault = client[key_vault_db_name][key_vault_coll_name]
    key_vault.drop()
    key_vault.create_index("keyAltNames", unique=True)

    client_encryption = ClientEncryption(
        kms_providers,
        key_vault_namespace,
        client,
        coll.codec_options)
    
    # create a new data key for the encrypted field:
    data_key_id = client_encryption.create_data_key(provider, master_key=customer_key, key_alt_names=["some_key_alt_name"], key_material = None)
    
    # explicitly encrypt a field:
    encrypted_first_name = client_encryption.encrypt(
    "Jane",
    Algorithm.AEAD_AES_256_CBC_HMAC_SHA_512_Deterministic,
    key_id=data_key_id
    )
    coll.insert_one(
    {"gamerTag": "jane_doe90",
    "firstName": encrypted_first_name
    })
    doc = coll.find_one()
    print('Encrypted document: %s' % (doc,))
    
    # explicitly decrypt the field:
    doc["encryptedField"] = client_encryption.decrypt(doc["encryptedField"])
    print('Decrypted document: %s' % (doc,))
    
    # cleanup resources:
    client_encryption.close()
    client.close()
    
    if __name__ == "__main__":
        main()
```

## Consultas en el FLE del lado del cliente
<a name="fle-querying"></a>

Amazon DocumentDB admite consultas de igualdad de puntos con FLE del lado del cliente. Las consultas de desigualdad y comparación pueden arrojar resultados imprecisos. Las operaciones de lectura y escritura pueden tener un comportamiento inesperado o incorrecto en comparación con ejecutar la misma operación con el valor descifrado.

Por ejemplo, para consultar los filtros de documentos con una puntuación de jugador superior a 500:

```
db.users.find( {
    "gamerscore" : { $gt : 500 }
})
```

El cliente utiliza un método de cifrado explícito para cifrar el valor de la consulta:

```
encrypted_gamerscore_filter = client_encryption.encrypt(
    500,
        Algorithm.AEAD_AES_256_CBC_HMAC_SHA_512_Deterministic,
        key_alt_name=data_key_id
        )

db.users.find( {
    "gamerscore" : { $gt : encrypted_gamerscore_filter }
} )
```

En la operación de búsqueda, Amazon DocumentDB compara el valor cifrado de 500 con los valores de campo cifrados almacenados en cada documento mediante la comprobación superior a la desigualdad. La comprobación de desigualdad de la operación de búsqueda puede arrojar un resultado diferente si se realiza con datos y valores descifrados, aunque la operación genere resultados satisfactoriamente.

## Limitaciones
<a name="fle-limitationa"></a>

Las siguientes limitaciones se aplican al cifrado a nivel de campo del lado del cliente de Amazon DocumentDB:
+ Amazon DocumentDB solo admite consultas de igualdad de puntos. Las consultas de desigualdad y comparación pueden arrojar resultados imprecisos. Las operaciones de lectura y escritura pueden tener un comportamiento inesperado o incorrecto en comparación con ejecutar la misma operación con el valor descifrado. Para consultar los filtros de documentos con una puntuación de jugador superior a 500.

  ```
  db.users.find( {
      "gamerscore" : { $gt : 500 }
      })
  ```

  El cliente utiliza un método de cifrado explícito para cifrar el valor de la consulta.

  ```
  encrypted_gamerscore_filter = client_encryption.encrypt(
      500,
      Algorithm.AEAD_AES_256_CBC_HMAC_SHA_512_Deterministic,
      key_alt_name=data_key_id
  )
  
  db.users.find({
      "gamerscore" : { $gt : encrypted_gamerscore_filter }
  })
  ```

  En la operación de búsqueda, Amazon DocumentDB compara el valor cifrado de 500 con los valores de campo cifrados almacenados en cada documento mediante la comprobación superior a la desigualdad. La comprobación de desigualdad de la operación de búsqueda puede arrojar un resultado diferente si se realiza con datos y valores descifrados, aunque la operación genere resultados satisfactoriamente.
+ Amazon DocumentDB no admite el FLE explícito del lado del cliente desde el intérprete de comandos Mongo. Sin embargo, la característica funciona con cualquiera de nuestros controladores compatibles.

# Cifrado de datos en reposo de Amazon DocumentDB
<a name="encryption-at-rest"></a>

**nota**  
AWS KMS está reemplazando el término *clave maestra del cliente (CMK)* por *AWS KMS key* y *Clave KMS*. El concepto no ha cambiado. Para evitar que se produzcan cambios bruscos, AWS KMS está manteniendo algunas variaciones de este término.

Puede cifrar los datos en reposo del clúster de Amazon DocumentDB especificando la opción de cifrado de almacenamiento al crear el clúster. El cifrado de almacenamiento está habilitado para todo el clúster y se aplica a todas las instancias, incluida la instancia principal y las réplicas. También se aplica al volumen de almacenamiento, los datos, los índices, los registros, las copias de seguridad automatizadas y las instantáneas del clúster. 

Amazon DocumentDB utiliza el estándar de cifrado avanzado de 256 bits (AES-256) para cifrar sus datos mediante claves de cifrado almacenadas en AWS Key Management Service (AWS KMS). Si utiliza un clúster de Amazon DocumentDB con el cifrado en reposo activado, no necesita modificar la lógica de la aplicación ni la conexión del cliente. Amazon DocumentDB se encarga del cifrado y descifrado de sus datos de forma transparente con un impacto mínimo en el desempeño.

Amazon DocumentDB se integra con AWS KMS y utiliza un método conocido como cifrado de sobre para proteger sus datos. Cuando un clúster de Amazon DocumentDB se cifra con unAWS KMS, Amazon DocumentDB le pide AWS KMS que utilice su clave de KMS para [generar una clave de datos de texto cifrado para cifrar](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html) el volumen de almacenamiento. La clave de datos de texto cifrado se cifra mediante la clave KMS que ha definido y se almacena junto con los datos cifrados y los metadatos de almacenamiento. Cuando Amazon DocumentDB necesita acceder a los datos cifrados, solicita a AWS KMS que descifre la clave de datos de texto cifrado utilizando su clave KMS y almacena en la memoria caché la clave de datos de texto sin formato con el fin de cifrar y descifrar de manera eficiente los datos en el volumen de almacenamiento.

La función de cifrado de almacenamiento de Amazon DocumentDB está disponible para todos los tamaños de instancias y en todas las Regiones de AWS en las que Amazon DocumentDB está disponible.

## Habilitación del cifrado en reposo de un clúster de Amazon DocumentDB
<a name="encryption-at-rest-enabling"></a>

Puede habilitar o deshabilitar el cifrado en reposo en un clúster de Amazon DocumentDB cuando el clúster se aprovisiona mediante la Consola de administración de AWS o la AWS Command Line Interface (AWS CLI). Los clústeres creados con la consola tienen el cifrado en reposo habilitado de forma predeterminada. Los clústeres creados con la AWS CLI tienen el cifrado en reposo deshabilitado de forma predeterminada. Por lo tanto, debe habilitar explícitamente el cifrado en reposo mediante el `--storage-encrypted` parámetro. En cualquier caso, una vez creado el clúster, no puede cambiar la opción de cifrado en reposo.

Amazon DocumentDB utiliza AWS KMS para recuperar y administrar claves de cifrado y para definir las políticas que controlan cómo se pueden utilizar estas claves. Si no especifica un identificador de clave AWS KMS, Amazon DocumentDB utiliza la clave KMS de AWS de servicio administrado predeterminado. Amazon DocumentDB crea una clave KMS independiente para cada Región de AWS de su Cuenta de AWS. Para obtener más información, consulte [Conceptos de AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html). 

Para comenzar a crear su propia KMS, consulte [Introducción](https://docs.aws.amazon.com/kms/latest/developerguide/getting-started.html) en la *AWS Key Management ServiceGuía del desarrollador*. 

**importante**  
Debe utilizar una clave de cifrado de KMS simétrica para cifrar el clúster, ya que Amazon DocumentDB solo admite claves de cifrado de KMS de cifrado simétricas. No utilice una KMS asimétrica para intentar cifrar los datos de los clústeres de Amazon DocumentDB. Para obtener más información, consulte [claves asimétricas de AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html) en la *Guía para desarrolladores de AWS Key Management Service*. 

Si Amazon DocumentDB ya no puede obtener acceso a la clave de cifrado de un clúster, por ejemplo, cuando se revoca el acceso a una clave, el clúster cifrado entra en un estado terminal. En este caso, solo puede restaurar el clúster desde una copia de seguridad. Para Amazon DocumentDB, las copias de seguridad siempre están habilitadas durante 1 día.

Además, si deshabilita la clave de un clúster cifrado de Amazon DocumentDB, eventualmente perderá el acceso de lectura y escritura a ese clúster. Cuando Amazon DocumentDB encuentra una instancia que está cifrada con una clave a la que no tiene acceso, pone el clúster en un estado terminal. En dicho estado, el clúster ya no está disponible y no es posible recuperar su estado actual. Para restaurar el clúster, debe volver a activar el acceso a la clave de cifrado para Amazon DocumentDB y después restaurar el clúster a partir de una copia de seguridad.

**importante**  
No puede cambiar la clave KMS de un clúster cifrado después de haberlo creado. Asegúrese de determinar los requisitos de clave de cifrado antes de crear el clúster cifrado.

------
#### [ Using the Consola de administración de AWS ]

Debe especificar la opción de cifrado en reposo al crear un clúster. El cifrado en reposo se habilita de forma predeterminada cuando se crea un clúster mediante la Consola de administración de AWS. No se puede cambiar una vez creado el clúster. 

**Para especificar la opción de cifrado en reposo, al crear el clúster**

1. Cree un clúster de Amazon DocumentDB como se describe en la sección [Introducción](https://docs.aws.amazon.com/documentdb/latest/developerguide/connect-ec2.launch-cluster.html). Sin embargo, en el paso 6, no elija **Create cluster (Crear clúster)**. 

1. Debajo de la sección **Authentication (Autenticación)**, elija **Show advanced settings (Mostrar configuración avanzada)**.

1. Desplácese hacia abajo hasta la sección **Encryption-at-rest (Cifrado en reposo)**.

1. Elija la opción que desee para el cifrado en reposo. Cualquiera que sea la opción que elija, no podrá cambiarla después de crear el clúster.
   + Para cifrar datos en reposo en este clúster, elija **Enable encryption (Habilitar cifrado)**.
   + Si no desea cifrar datos en reposo en este clúster, elija **Disable encryption (Deshabilitar cifrado)**. 

1. Elija la clave principal que desee. Amazon DocumentDB utiliza AWS Key Management Service (AWS KMS) para recuperar y administrar claves de cifrado y para definir las políticas que controlan cómo se pueden utilizar estas claves. Si no especifica un identificador de clave AWS KMS, Amazon DocumentDB utiliza la clave KMS de AWS de servicio administrado predeterminado. Para obtener más información, consulte [Conceptos de AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html). 
**nota**  
Después de crear un clúster cifrado, no puede cambiar la clave KMS de dicho clúster. Asegúrese de determinar los requisitos de clave de cifrado antes de crear el clúster cifrado.

1. Rellene las demás secciones según sea necesario y cree el clúster.

------
#### [ Using the AWS CLI ]

Para cifrar un clúster de Amazon DocumentDB mediante la AWS CLI, ejecute el comando [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/docdb/describe-db-clusters.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/docdb/describe-db-clusters.html) y especifique la opción `--storage-encrypted`. Los clústeres de Amazon DocumentDB creados con la AWS CLI no habilitan el cifrado de almacenamiento de forma predeterminada.

En el siguiente ejemplo se crea un clúster de Amazon DocumentDB con el cifrado de almacenamiento habilitado.

En los siguientes ejemplos, reemplace cada *marcador de posición del usuario* con la información de su clúster.

**Example**  
Para Linux, macOS o Unix:  

```
aws docdb create-db-cluster \
  --db-cluster-identifier mydocdbcluster \
  --port 27017 \
  --engine docdb \
  --master-username SampleUser1 \
  --master-user-password primaryPassword \
  --storage-encrypted
```
Para Windows:  

```
aws docdb create-db-cluster ^
  --db-cluster-identifier SampleUser1 ^
  --port 27017 ^
  --engine docdb ^
  --master-username SampleUser1 ^
  --master-user-password primaryPassword ^
  --storage-encrypted
```

Cuando crea un clúster de Amazon DocumentDB cifrado, puede especificar un identificador de clave de AWS KMS, tal y como se muestra en el siguiente ejemplo.

**Example**  
Para Linux, macOS o Unix:  

```
aws docdb create-db-cluster \
  --db-cluster-identifier SampleUser1 \
  --port 27017 \
  --engine docdb \
  --master-username primaryUsername \
  --master-user-password yourPrimaryPassword \
  --storage-encrypted \
  --kms-key-id key-arn-or-alias
```
Para Windows:  

```
aws docdb create-db-cluster ^
  --db-cluster-identifier SampleUser1 ^
  --port 27017 ^
  --engine docdb ^
  --master-username SampleUser1 ^
  --master-user-password primaryPassword ^
  --storage-encrypted ^
  --kms-key-id key-arn-or-alias
```

**nota**  
Después de crear un clúster cifrado, no puede cambiar la clave KMS de dicho clúster. Asegúrese de determinar los requisitos de clave de cifrado antes de crear el clúster cifrado.

------

## Limitaciones para clústeres cifrados de Amazon DocumentDB
<a name="encryption-at-rest-limits"></a>

Los clústeres cifrados de Amazon DocumentDB tienen las siguientes limitaciones:
+ Solo puede habilitar o deshabilitar el cifrado en reposo para un clúster de Amazon DocumentDB en el momento en que se crea, no después de que el clúster se haya creado. Sin embargo, puede crear una copia cifrada de un clúster sin cifrar creando una instantánea del clúster sin cifrar y, a continuación, restaurando la instantánea sin cifrar como nuevo clúster mientras especifica la opción de cifrado en reposo.

  Para obtener más información, consulte los temas siguientes:
  + [Creación de una instantánea manual del clúster](backup_restore-create_manual_cluster_snapshot.md)
  + [Restauración de una instantánea del clúster](backup_restore-restore_from_snapshot.md)
  + [Copia de instantáneas de clústeres de Amazon DocumentDB](backup_restore-copy_cluster_snapshot.md)
+ Los clústeres de Amazon DocumentDB con el cifrado de almacenamiento habilitado no se pueden modificar para deshabilitar el cifrado.
+ Todas las instancias, copias de seguridad automatizadas, instantáneas e índices de un clúster de Amazon DocumentDB se cifran con la misma clave KMS.

# Cifrado de datos en tránsito
<a name="security.encryption.ssl"></a>

Puede utilizar seguridad de la capa de transporte (TLS) para cifrar la conexión entre su aplicación y un clúster de Amazon DocumentDB. De forma predeterminada, el cifrado en tránsito está habilitado para los clústeres de Amazon DocumentDB recién creados. Opcionalmente se puede deshabilitar cuando se crea el clúster o en un momento posterior. Cuando se habilita el cifrado en tránsito, se requieren conexiones seguras con TLS para conectarse al clúster. Para obtener más información sobre cómo conectarse a Amazon DocumentDB mediante TLS, consulte [Conexión mediante programación a Amazon DocumentDB](connect_programmatically.md).

## Administración de la configuración de TLS del clúster de Amazon DocumentDB
<a name="security.encryption.ssl.managing"></a>

El cifrado en tránsito para un clúster de Amazon DocumentDB se administra mediante el parámetro TLS en un [grupo de parámetros de clúster](https://docs.aws.amazon.com/documentdb/latest/developerguide/cluster_parameter_groups.html). Puede administrar la configuración de TLS del clúster de Amazon DocumentDB mediante la Consola de administración de AWS o la AWS Command Line Interface (AWS CLI). Consulte las secciones siguientes para obtener información sobre cómo verificar y modificar la configuración actual de TLS.

------
#### [ Using the Consola de administración de AWS ]

Siga estos pasos para realizar tareas de administración para el cifrado TLS mediante la consola, como identificar grupos de parámetros, verificar el valor de TLS y realizar las modificaciones necesarias.

**nota**  
A menos que lo especifique de manera diferente al crear un clúster, el clúster se crea con el grupo de parámetros de clúster predeterminado. Los parámetros del `default` grupo de parámetros de clúster no se pueden modificar (por ejemplo, `tls` habilitado/deshabilitado). Por lo tanto, si su clúster está utilizando un `default` grupo de parámetros de clúster, debe modificar el clúster para utilizar un grupo de parámetros de clúster no predeterminado. En primer lugar, es posible que tenga que crear un grupo de parámetros de clúster personalizado. Para obtener más información, consulte [Creación de grupos de parámetros de clúster de Amazon DocumentDB](cluster_parameter_groups-create.md).

1. **Determine el grupo de parámetros de clúster que utiliza el clúster.**

   1. Abra la consola de Amazon DocumentDB en [https://console.aws.amazon.com/docdb](https://console.aws.amazon.com/docdb).

   1. En el panel de navegación, seleccione **Clusters (Clústeres)**.
**sugerencia**  
Si no ve el panel de navegación del lado izquierdo de la pantalla, seleccione el icono de menú (![\[Hamburger menu icon with three horizontal lines.\]](http://docs.aws.amazon.com/es_es/documentdb/latest/developerguide/images/docdb-menu-icon.png)) en la esquina superior izquierda de la página.

   1. Tenga en cuenta que en el cuadro de navegación **Clústeres**, la columna **Identificador del clústeres** muestra tanto los clústeres como las instancias. Las instancias se muestran debajo de los clústeres. Consulte la siguiente captura de pantalla como referencia.  
![\[Imagen del cuadro de navegación de clústeres que muestra una lista de los enlaces de clústeres existentes y sus correspondientes enlaces de instancia.\]](http://docs.aws.amazon.com/es_es/documentdb/latest/developerguide/images/clusters.png)

   1. Elija el clúster que le interese.

   1. Elija la pestaña de **Configuración**, desplácese hacia abajo hasta la parte inferior de **Detalles del clúster)** y localice el **Grupo de parámetros de clúster**. Anote el nombre del grupo de parámetros de clúster.

      Si el nombre del grupo de parámetros de clúster es `default` (por ejemplo, `default.docdb3.6`), debe crear un grupo de parámetros de clúster personalizado y convertirlo en el grupo de parámetros del clúster antes de continuar. Para obtener más información, consulte los siguientes temas:

      1. [Creación de grupos de parámetros de clúster de Amazon DocumentDB](cluster_parameter_groups-create.md): si no dispone de un grupo de parámetros de clúster personalizado que pueda utilizar, créelo.

      1. [Modificación de un clúster de Amazon DocumentDB](db-cluster-modify.md): modifique el clúster de forma que use el grupo de parámetros de clúster personalizado.

1. **Determinar el valor actual del`tls` parámetro de clúster.**

   1. Abra la consola de Amazon DocumentDB en [https://console.aws.amazon.com/docdb](https://console.aws.amazon.com/docdb).

   1. En el panel de navegación, seleccione **Grupos de parámetros**.

   1. En la lista de grupos de parámetros de clúster, elija el nombre del grupo de parámetros de clúster que desee.

   1. Localice la sección **Cluster parameters (Parámetros de clúster)**. En la lista de parámetros de clúster, localice la `tls` fila del parámetro del clúster. En este punto, las cuatro columnas siguientes son importantes:
      + **Nombre del parámetro de clúster**: el nombre de los parámetros de clúster. Para la administración de TLS, le interesa el `tls` parámetro de clúster.
      + **Valores**: el valor actual de cada parámetro del clúster.
      + **Valores permitidos**: lista de valores que se pueden aplicar a un parámetro de clúster.
      + **Tipo de aplicación**: **estática** o **dinámica**. Los cambios en los parámetros de clúster estáticos solo se pueden aplicar al reiniciar las instancias. Los cambios en los parámetros de clúster dinámicos se pueden aplicar inmediatamente o al reiniciar las instancias.

1. **Modificar el valor del `tls` parámetro de clúster.**

   Si el valor de `tls` no es el que necesita, modifíquelo para este grupo de parámetros de clúster. Para cambiar el valor del `tls` parámetro de clúster, continúe desde la sección anterior siguiendo los pasos que se indican a continuación.

   1. Elija el botón situado a la izquierda del nombre del parámetro de clúster (`tls`).

   1. Seleccione **Editar**.

   1. Para cambiar el valor de `tls`, en el cuadro de diálogo **Modificar`tls`**, elija el valor que desee para el parámetro de clúster en el menú desplegable.

      Los valores válidos son:
      + **deshabilitado**: deshabilita el TLS
      + **activado**: habilita las versiones 1.0 a 1.3 de TLS.
      + **fips-140-3**: habilita TLS con FIPS. El clúster solo acepta conexiones seguras según los requisitos de la publicación 140-3 de las Normas Federales de Proceso de la Información (FIPS). Esto solo se admite a partir de los clústeres de Amazon DocumentDB 5.0 (versión del motor 3.0.3727) en las siguientes regiones: ca-central-1, us-west-2, us-east-1, us-east-2, us-gov-east-1, us-gov-west-1.
      + **tls1.2\$1**: habilita las versiones 1.2 y superiores de TLS. Esto solo se admite a partir de Amazon DocumentDB 4.0 (versión de motor 2.0.10980) y Amazon DocumentDB (versión de motor 3.0.11051).
      + **tls1.3\$1**: habilita las versiones 1.3 y superiores de TLS. Esto solo se admite a partir de Amazon DocumentDB 4.0 (versión de motor 2.0.10980) y Amazon DocumentDB (versión de motor 3.0.11051).  
![\[Imagen de un cuadro de diálogo de modificación de TLS específico de un clúster.\]](http://docs.aws.amazon.com/es_es/documentdb/latest/developerguide/images/modify-tls.png)

   1. Elija **Modify cluster parameter (Modificar el parámetro de clúster)**. El cambio se aplicará a cada instancia del clúster cuando se reinicie.

1. **Reinicie la instancia de Amazon DocumentDB.**

   Reinicie todas las instancias del clúster para que el cambio se aplique a todas ellas.

   1. Abra la consola de Amazon DocumentDB en [https://console.aws.amazon.com/docdb](https://console.aws.amazon.com/docdb).

   1. En el panel de navegación, seleccione **Instances (Instancias)**.

   1. Para especificar la instancia que se va a reiniciar, búsquela en la lista de instancias y elija el botón situado a la izquierda de su nombre.

   1. Elija **Actions (Acciones)** y, a continuación, **Reboot (Reiniciar)**. Confirme que desea reiniciar eligiendo **Reboot (Reiniciar)**.

------
#### [ Using the AWS CLI ]

Siga estos pasos para realizar tareas de administración para el cifrado TLS mediante la AWS CLI, como identificar grupos de parámetros, verificar el valor de TLS y realizar las modificaciones necesarias.

**nota**  
A menos que especifique de manera diferente al crear un clúster, el clúster se crea con el grupo de parámetros de clúster predeterminado. Los parámetros del grupo de parámetros de clúster `default` no se pueden modificar (por ejemplo, `tls` habilitado/deshabilitado). Por lo tanto, si su clúster está utilizando un `default` grupo de parámetros de clúster, debe modificar el clúster para utilizar un grupo de parámetros de clúster no predeterminado. Es posible que primero tenga que crear un grupo de parámetros de clúster personalizado. Para obtener más información, consulte [Creación de grupos de parámetros de clúster de Amazon DocumentDB](cluster_parameter_groups-create.md).

1. **Determine el grupo de parámetros de clúster que utiliza el clúster.**

   Ejecute el comando [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/docdb/describe-db-clusters.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/docdb/describe-db-clusters.html) con las siguientes opciones:
   + `--db-cluster-identifier`
   + `--query`

   En el siguiente ejemplo, reemplace cada *marcador de posición del usuario* con la información de su clúster.

   ```
   aws docdb describe-db-clusters \
     --db-cluster-identifier mydocdbcluster \
     --query 'DBClusters[*].[DBClusterIdentifier,DBClusterParameterGroup]'
   ```

   La salida de esta operación será similar a lo que se indica a continuación (formato JSON):

   ```
   [
       [
           "mydocdbcluster",
           "myparametergroup"
       ]
   ]
   ```

   Si el nombre del grupo de parámetros de clúster es `default` (es decir, `default.docdb3.6`) debe tener un grupo de parámetros de clúster personalizado y convertirlo en el grupo de parámetros de este clúster antes de continuar. Para obtener más información, consulte los temas siguientes:

   1. [Creación de grupos de parámetros de clúster de Amazon DocumentDB](cluster_parameter_groups-create.md): si no dispone de un grupo de parámetros de clúster personalizado que pueda utilizar, créelo.

   1. [Modificación de un clúster de Amazon DocumentDB](db-cluster-modify.md): modifique el clúster de forma que use el grupo de parámetros de clúster personalizado.

1. **Determinar el valor actual del`tls` parámetro de clúster.**

   Para obtener más información sobre este grupo de parámetros del clúster, ejecute el comando [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/docdb/describe-db-cluster-parameters.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/docdb/describe-db-cluster-parameters.html) con las siguientes opciones:
   + `--db-cluster-parameter-group-name`
   + `--query`

     Limita la salida solo a los campos de interés: `ParameterName`, `ParameterValue`,`AllowedValues` y `ApplyType`.

   En el siguiente ejemplo, reemplace cada *marcador de posición del usuario* con la información de su clúster.

   ```
   aws docdb describe-db-cluster-parameters \
     --db-cluster-parameter-group-name myparametergroup \
     --query 'Parameters[*].[ParameterName,ParameterValue,AllowedValues,ApplyType]'
   ```

   La salida de esta operación será similar a lo que se indica a continuación (formato JSON):

   ```
   [
       [
           "audit_logs",
           "disabled",
           "enabled,disabled",
           "dynamic"
       ],
       [
           "tls",
           "disabled",
           "disabled,enabled,fips-140-3,tls1.2+,tls1.3+",
           "static"
       ],
       [
           "ttl_monitor",
           "enabled",
           "disabled,enabled",
           "dynamic"
       ]
   ]
   ```

1. **Modificar el valor del parámetro de clúster`tls`.**

   Si el valor de `tls` no es el que necesita, modifíquelo para este grupo de parámetros de clúster. Para cambiar el valor del parámetro del clúster `tls`, utilice el comando [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/docdb/modify-db-cluster-parameter-group.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/docdb/modify-db-cluster-parameter-group.html) con las siguientes opciones:
   + `--db-cluster-parameter-group-name`: obligatorio. El nombre del grupo de parámetros de clúster que se va a modificar. No puede ser el grupo de parámetros de clúster`default.*`.
   + `--parameters`: obligatorio. Lista de los parámetros del grupo de parámetros de clúster que se van a modificar.
     + `ParameterName`: obligatorio. El nombre del parámetro de clúster que se va a modificar.
     + `ParameterValue`: obligatorio. El valor nuevo de este parámetro de clúster. Debe ser uno de los del parámetro de clúster `AllowedValues`.
       + `enabled`: el clúster acepta conexiones seguras mediante TLS, versión 1.0 a 1.3.
       + `disabled`: el clúster no acepta conexiones seguras mediante TLS.
       + `fips-140-3`: el clúster solo acepta conexiones seguras según los requisitos de la publicación 140-3 de las Normas Federales de Proceso de la Información (FIPS). Esto solo se admite a partir de los clústeres de Amazon DocumentDB 5.0 (versión del motor 3.0.3727) en las siguientes regiones: ca-central-1, us-west-2, us-east-1, us-east-2, us-gov-east-1, us-gov-west-1.
       + `tls1.2+`: el clúster acepta conexiones seguras mediante TLS, versión 1.2 y superiores. Esto solo se admite a partir de Amazon DocumentDB 4.0 (versión de motor 2.0.10980) y Amazon DocumentDB 5.0 (versión de motor 3.0.11051).
       + `tls1.3+`: el clúster acepta conexiones seguras mediante TLS, versión 1.3 y superiores. Esto solo se admite a partir de Amazon DocumentDB 4.0 (versión de motor 2.0.10980) y Amazon DocumentDB 5.0 (versión de motor 3.0.11051).
     + `ApplyMethod`: cuándo se va a aplicar esta modificación. Para los parámetros de clúster estáticos, como `tle`, este valor debe ser `pending-reboot`.
       + `pending-reboot`: el cambio se aplica a una instancia solo después de reiniciarla. Debe reiniciar cada instancia de clúster por separado para que este cambio entre en vigor en todas las instancias del clúster.

   En los siguientes ejemplos, reemplace cada *marcador de posición del usuario* con la información de su clúster.

   El siguiente código *deshabilita* `tls`, y el cambio se aplica a cada instancia cuando se reinicia.

   ```
   aws docdb modify-db-cluster-parameter-group \
     --db-cluster-parameter-group-name myparametergroup \
     --parameters "ParameterName=tls,ParameterValue=disabled,ApplyMethod=pending-reboot"
   ```

   El siguiente código *habilita* `tls` (versión 1.0 a 1.3), y el cambio se aplica a cada instancia cuando se reinicia.

   ```
   aws docdb modify-db-cluster-parameter-group \
     --db-cluster-parameter-group-name myparametergroup \
     --parameters "ParameterName=tls,ParameterValue=enabled,ApplyMethod=pending-reboot"
   ```

   El siguiente código *habilita* TLS con `fips-140-3`, y el cambio se aplica a cada instancia cuando se reinicia.

   ```
   aws docdb modify-db-cluster-parameter-group \
     ‐‐db-cluster-parameter-group-name myparametergroup2 \
     ‐‐parameters "ParameterName=tls,ParameterValue=fips-140-3,ApplyMethod=pending-reboot"
   ```

   La salida de esta operación será similar a lo que se indica a continuación (formato JSON):

   ```
   {
       "DBClusterParameterGroupName": "myparametergroup"
   }
   ```

1. **Reinicie la instancia de Amazon DocumentDB.**

   Reinicie todas las instancias del clúster para que el cambio se aplique a todas ellas. Para reiniciar una instancia de Amazon DocumentDB, utilice el comando [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/docdb/reboot-db-instance.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/docdb/reboot-db-instance.html) con la siguiente opción:
   + `--db-instance-identifier`

   El siguiente código reinicia la instancia `mydocdbinstance`.

   En los siguientes ejemplos, reemplace cada *marcador de posición del usuario* con la información de su clúster.  
**Example**  

   Para Linux, macOS o Unix:

   ```
   aws docdb reboot-db-instance \
     --db-instance-identifier mydocdbinstance
   ```

   Para Windows:

   ```
   aws docdb reboot-db-instance ^
     --db-instance-identifier mydocdbinstance
   ```

   La salida de esta operación será similar a lo que se indica a continuación (formato JSON):

   ```
   {
       "DBInstance": {
           "AutoMinorVersionUpgrade": true,
           "PubliclyAccessible": false,
           "PreferredMaintenanceWindow": "fri:09:32-fri:10:02",
           "PendingModifiedValues": {},
           "DBInstanceStatus": "rebooting",
           "DBSubnetGroup": {
               "Subnets": [
                   {
                       "SubnetStatus": "Active",
                       "SubnetAvailabilityZone": {
                           "Name": "us-east-1a"
                       },
                       "SubnetIdentifier": "subnet-4e26d263"
                   },
                   {
                       "SubnetStatus": "Active",
                       "SubnetAvailabilityZone": {
                           "Name": "us-east-1c"
                       },
                       "SubnetIdentifier": "subnet-afc329f4"
                   },
                   {
                       "SubnetStatus": "Active",
                       "SubnetAvailabilityZone": {
                           "Name": "us-east-1e"
                       },
                       "SubnetIdentifier": "subnet-b3806e8f"
                   },
                   {
                       "SubnetStatus": "Active",
                       "SubnetAvailabilityZone": {
                           "Name": "us-east-1d"
                       },
                       "SubnetIdentifier": "subnet-53ab3636"
                   },
                   {
                       "SubnetStatus": "Active",
                       "SubnetAvailabilityZone": {
                           "Name": "us-east-1b"
                       },
                       "SubnetIdentifier": "subnet-991cb8d0"
                   },
                   {
                       "SubnetStatus": "Active",
                       "SubnetAvailabilityZone": {
                           "Name": "us-east-1f"
                       },
                       "SubnetIdentifier": "subnet-29ab1025"
                   }
               ],
               "SubnetGroupStatus": "Complete",
               "DBSubnetGroupDescription": "default",
               "VpcId": "vpc-91280df6",
               "DBSubnetGroupName": "default"
           },
           "PromotionTier": 2,
           "DBInstanceClass": "db.r5.4xlarge",
           "InstanceCreateTime": "2018-11-05T23:10:49.905Z",
           "PreferredBackupWindow": "00:00-00:30",
           "KmsKeyId": "arn:aws:kms:us-east-1:012345678901:key/0961325d-a50b-44d4-b6a0-a177d5ff730b",
           "StorageEncrypted": true,
           "VpcSecurityGroups": [
               {
                   "Status": "active",
                   "VpcSecurityGroupId": "sg-77186e0d"
               }
           ],
           "EngineVersion": "3.6.0",
           "DbiResourceId": "db-SAMPLERESOURCEID",
           "DBInstanceIdentifier": "mydocdbinstance",
           "Engine": "docdb",
           "AvailabilityZone": "us-east-1a",
           "DBInstanceArn": "arn:aws:rds:us-east-1:012345678901:db:sample-cluster-instance-00",
           "BackupRetentionPeriod": 1,
           "Endpoint": {
               "Address": "mydocdbinstance.corcjozrlsfc.us-east-1.docdb.amazonaws.com",
               "Port": 27017,
               "HostedZoneId": "Z2R2ITUGPM61AM"
           },
           "DBClusterIdentifier": "mydocdbcluster"
       }
   }
   ```

   El reinicio de la instancia puede tardar unos minutos. Solo puede usar la instancia cuando su estado sea *available (disponible)*. Puede monitorizar el estado de la instancia mediante la consola o la AWS CLI. Para obtener más información, consulte [Supervisión del estado de un clúster de Amazon DocumentDB](monitoring_docdb-instance_status.md). 

------

# Administración de claves
<a name="security.encryption.ssl.public-key"></a>

Amazon DocumentDB usa AWS Key Management Service (AWS KMS) para recuperar y administrar las claves de cifrado. AWS KMS combina hardware y software seguros y altamente disponibles para ofrecer un sistema de administración de claves escalado para la nube. Si utiliza AWS KMS, puede crear claves de cifrado y definir las políticas que controlan cómo se pueden utilizar dichas claves. AWS KMS es compatible con AWS CloudTrail, lo que permite auditar el uso de claves para comprobar que las claves se utilizan de forma adecuada. 

Puede usar sus claves AWS KMS junto con Amazon DocumentDB y servicios de AWS compatibles como Amazon Simple Storage Service (Amazon S3), Amazon Relational Database Service (Amazon RDS), Amazon Elastic Block Store (Amazon EBS) y Amazon Redshift. Para obtener una lista de los servicios que admiten AWS KMS, consulte [Cómo los servicios de AWS usan AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/service-integration.html) en la *Guía para desarrolladores de AWS Key Management Service*. Para obtener más información sobre AWS KMS, consulte [¿Qué es AWS Key Management Service?](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)