AWS KMS llaveros - AWS SDK de cifrado de bases de datos

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.

AWS KMS llaveros

Se cambió el nombre de nuestra biblioteca de cifrado del lado del cliente por el de SDK de cifrado de AWS bases de datos. En esta guía para desarrolladores, se sigue proporcionando información sobre el cliente de cifrado de DynamoDB.

Un conjunto de AWS KMS claves utiliza el cifrado simétrico o el RSA asimétrico AWS KMS keyspara generar, cifrar y descifrar las claves de datos. AWS Key Management Service (AWS KMS) protege las claves KMS y realiza operaciones criptográficas dentro del límite del FIPS. Siempre que sea posible, le recomendamos que utilice un AWS KMS anillo de claves o un anillo de claves con propiedades de seguridad similares.

También puede usar una clave KMS simétrica multirregional en un anillo de claves. AWS KMS Para obtener más detalles y ejemplos sobre el uso de varias AWS KMS keys regiones, consulte. Uso de varias regiones AWS KMS keys Para obtener más información sobre las claves de regiones múltiples, consulte Uso de claves de multirregiones en la Guía para desarrolladores de AWS Key Management Service .

AWS KMS Los llaveros pueden incluir dos tipos de llaves de embalaje:

  • Clave generadora: genera una clave de datos en texto no cifrado y la cifra. Un conjunto de claves que cifra datos debe tener una clave generadora.

  • Claves adicionales: cifra la clave de datos de texto simple que generó la clave del generador. AWS KMS los llaveros pueden tener cero o más claves adicionales.

Debe tener una clave generadora para cifrar los registros. Cuando un conjunto de AWS KMS claves tiene solo una AWS KMS clave, esa clave se usa para generar y cifrar la clave de datos.

Como todos los llaveros, los AWS KMS llaveros se pueden utilizar de forma independiente o en un llavero múltiple con otros llaveros del mismo tipo o de un tipo diferente.

Permisos necesarios para los conjuntos de claves de AWS KMS

El SDK AWS de cifrado de bases de datos no requiere ni Cuenta de AWS depende de ninguno. Servicio de AWS Sin embargo, para usar un AWS KMS conjunto de claves, necesita tener Cuenta de AWS los siguientes permisos mínimos AWS KMS keys en su conjunto de claves.

  • Para cifrar con un AWS KMS anillo de claves, necesita el GenerateDataKey permiso kms: en la clave del generador. Necesita el permiso KMS:Encrypt para todas las claves adicionales del anillo de claves. AWS KMS

  • Para descifrar con un AWS KMS anillo de claves, necesita el permiso KMS:Decrypt en al menos una clave del anillo de claves. AWS KMS

  • Para cifrar con un conjunto de claves múltiples compuesto por AWS KMS anillos de claves, necesita el permiso kms: en la clave generadora del conjunto de claves del generador. GenerateDataKey Necesita el permiso KMS:Encrypt para el resto de claves de todos los demás conjuntos de claves. AWS KMS

  • Para cifrar con un AWS KMS anillo de claves RSA asimétrico, no necesita kms: GenerateDataKey ni KMS:Encrypt porque debe especificar el material de clave pública que desea utilizar para el cifrado al crear el anillo de claves. No se realizan llamadas AWS KMS al cifrar con este anillo de claves. Para descifrar con un AWS KMS anillo de claves RSA asimétrico, necesita el permiso KMS:Decrypt.

Para obtener información detallada sobre los permisos AWS KMS keys, consulte Autenticación y control de acceso en la Guía para desarrolladores.AWS Key Management Service

Identificarse AWS KMS keys en un AWS KMS llavero

Un AWS KMS llavero puede incluir uno o más. AWS KMS keys Para especificar un elemento AWS KMS key en un conjunto de AWS KMS claves, utilice un identificador de AWS KMS clave compatible. Los identificadores clave que puede utilizar para identificar un elemento de un AWS KMS key conjunto de claves varían según la operación y la implementación del idioma. Para obtener más información sobre los identificadores clave de una AWS KMS key, consulte Identificadores clave en la Guía para desarrolladores de AWS Key Management Service .

Como práctica recomendada, utilice el identificador de clave más práctico que sea práctico para su tarea.

  • Para cifrar con un AWS KMS anillo de claves, puede utilizar un ID de clave, un ARN de clave, un nombre de alias o un ARN de alias para cifrar los datos.

    nota

    Si especifica un nombre de alias o un ARN de alias para una clave de KMS en un conjunto de claves de cifrado, la operación de cifrado guarda el ARN de clave actualmente asociado al alias en los metadatos de la clave de datos cifrada. No guarda el alias. Los cambios en el alias no afectan a la clave de KMS utilizada para descifrar las claves de datos cifrados.

  • Para descifrar con un AWS KMS anillo de claves, debe usar un ARN de clave para identificarlo. AWS KMS keys Para obtener más detalles, consulte Seleccionar las claves de encapsulamiento.

  • En un conjunto de claves usado para cifrar y descifrar, debe usar el ARN de una clave para identificar AWS KMS keys.

Al descifrar, el SDK de cifrado de AWS bases de datos busca en el conjunto de AWS KMS claves una AWS KMS key que pueda descifrar una de las claves de datos cifrados. En concreto, el SDK AWS de cifrado de bases de datos utiliza el siguiente patrón para cada clave de datos cifrada de la descripción del material.

  • El SDK AWS de cifrado de bases de datos obtiene la clave ARN de la clave AWS KMS key que cifró la clave de datos de los metadatos de la descripción del material.

  • El SDK AWS de cifrado de bases de datos busca en el conjunto de claves de descifrado un ARN AWS KMS key con una clave coincidente.

  • Si encuentra un ARN AWS KMS key con una clave coincidente en el anillo de claves, el SDK de cifrado de AWS bases de datos solicita usar la clave KMS AWS KMS para descifrar la clave de datos cifrados.

  • De lo contrario, pasa a la siguiente clave de datos cifrada, si la hay.

Crear un anillo de claves AWS KMS

Puede configurar cada AWS KMS llavero con uno AWS KMS key o varios AWS KMS keys en la misma o en una diferente Cuentas de AWS . Regiones de AWS La AWS KMS key debe ser una clave de cifrado simétrico (SYMMETRIC_DEFAULT) o una clave asimétrica RSA KMS. También puede utilizar una clave KMS de múltiples regiones de cifrado simétrico. Puedes usar uno o más AWS KMS llaveros en un llavero múltiple.

Puede crear un conjunto de AWS KMS claves que cifre y descifre los datos, o puede crear anillos de AWS KMS claves específicos para cifrar o descifrar. Al crear un conjunto de AWS KMS claves para cifrar datos, debe especificar una clave generadora, que es aquella que se utiliza para generar una clave de datos en AWS KMS key texto plano y cifrarla. La clave de datos no está relacionada matemáticamente con la clave de KMS. A continuación, si lo desea, puede especificar otras AWS KMS keys que cifren la misma clave de datos en texto plano. Para descifrar un campo cifrado protegido por este anillo de claves, el anillo de claves de descifrado que utilice debe incluir al menos una de las AWS KMS keys definidas en el anillo de claves, o no. AWS KMS keys(Un anillo de AWS KMS claves sin un número se conoce como anillo de claves de AWS KMS keys detección).AWS KMS

Todas las claves de encapsulación de un conjunto de claves de cifrado o de varios conjunto de claves deben poder cifrar la clave de datos. Si alguna clave de encapsulación no se cifra, el método de cifrado falla. Como resultado, la persona que llama debe tener los permisos necesarios para todas las claves del conjunto de claves. Si utiliza un conjunto de claves de detección para cifrar los datos, solo o en un conjunto de claves múltiple, la operación de cifrado no se realizará correctamente.

Los ejemplos siguientes utilizan el CreateAwsKmsMrkMultiKeyring método para crear un AWS KMS anillo de claves con una clave KMS de cifrado simétrico. El CreateAwsKmsMrkMultiKeyring método crea automáticamente el AWS KMS cliente y garantiza que el conjunto de claves gestione correctamente tanto las claves de una sola región como las de varias regiones. En estos ejemplos, se utiliza un ARN clave para identificar las claves del KMS. Para obtener más información, consulte Identificarse AWS KMS keys en un AWS KMS llavero

Java
final MaterialProviders matProv = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); final CreateAwsKmsMrkMultiKeyringInput keyringInput = CreateAwsKmsMrkMultiKeyringInput.builder() .generator(kmsKeyArn) .build(); final IKeyring kmsKeyring = matProv.CreateAwsKmsMrkMultiKeyring(keyringInput);
C# / .NET
var matProv = new MaterialProviders(new MaterialProvidersConfig()); var createAwsKmsMrkMultiKeyringInput = new CreateAwsKmsMrkMultiKeyringInput { Generator = kmsKeyArn }; var awsKmsMrkMultiKeyring = matProv.CreateAwsKmsMrkMultiKeyring(createAwsKmsMrkMultiKeyringInput);

Los ejemplos siguientes utilizan el CreateAwsKmsRsaKeyring método para crear un AWS KMS anillo de claves con una clave RSA KMS asimétrica. Para crear un AWS KMS anillo de claves RSA asimétrico, proporcione los siguientes valores.

  • kmsClient: crea un cliente nuevo AWS KMS

  • kmsKeyID: el ARN clave que identifica su clave RSA KMS asimétrica

  • publicKey: a ByteBuffer de un archivo PEM codificado en UTF-8 que representa la clave pública de la clave a la que se le pasó kmsKeyID

  • encryptionAlgorithm: el algoritmo de cifrado debe ser o RSAES_OAEP_SHA_256 RSAES_OAEP_SHA_1

Java
final MaterialProviders matProv = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); final CreateAwsKmsRsaKeyringInput createAwsKmsRsaKeyringInput = CreateAwsKmsRsaKeyringInput.builder() .kmsClient(KmsClient.create()) .kmsKeyId(rsaKMSKeyArn) .publicKey(publicKey) .encryptionAlgorithm(EncryptionAlgorithmSpec.RSAES_OAEP_SHA_256) .build(); IKeyring awsKmsRsaKeyring = matProv.CreateAwsKmsRsaKeyring(createAwsKmsRsaKeyringInput);
C# / .NET
var matProv = new MaterialProviders(new MaterialProvidersConfig()); var createAwsKmsRsaKeyringInput = new CreateAwsKmsRsaKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(), KmsKeyId = rsaKMSKeyArn, PublicKey = publicKey, EncryptionAlgorithm = EncryptionAlgorithmSpec.RSAES_OAEP_SHA_256 }; IKeyring awsKmsRsaKeyring = matProv.CreateAwsKmsRsaKeyring(createAwsKmsRsaKeyringInput);

Uso de varias regiones AWS KMS keys

Puede utilizar varias regiones AWS KMS keys como claves de empaquetado en el SDK de cifrado de AWS bases de datos. Si cifra con una clave multirregional en una Región de AWS, puede desencriptar utilizando una clave multirregional relacionada en otra diferente. Región de AWS

Las claves KMS multirregionales son un conjunto de AWS KMS keys diferentes claves Regiones de AWS que tienen el mismo material y el mismo identificador de clave. Puede usar estas claves relacionadas como si fueran la misma clave en diferentes regiones. Las claves multirregionales son compatibles con los escenarios habituales de recuperación ante desastres y copias de seguridad, que requieren el cifrado en una región y el descifrado en una región diferente sin necesidad de realizar una llamada entre regiones. AWS KMS Para obtener más información sobre las claves de regiones múltiples, consulte Uso de claves de multirregiones en la Guía para desarrolladores de AWS Key Management Service .

Para admitir claves multirregionales, el SDK de cifrado de AWS bases de datos incluye conjuntos de claves compatibles con múltiples regiones. AWS KMS El método CreateAwsKmsMrkMultiKeyring admite claves de una sola región y de múltiples regiones.

  • En el caso de las claves de una sola región, el símbolo compatible con múltiples regiones se comporta igual que el conjunto de claves de AWS KMS de una sola región. Intenta descifrar el texto cifrado únicamente con la clave de región única que cifró los datos. Para simplificar su experiencia con el conjunto de AWS KMS claves, le recomendamos que utilice CreateAwsKmsMrkMultiKeyring este método siempre que utilice una clave KMS de cifrado simétrico.

  • En el caso de las claves de múltiples regiones, el símbolo de Múltiples regiones intenta descifrar el texto cifrado con la misma clave de múltiples regiones que cifró los datos o con la clave múltiples regiones relacionada en la región que especifique.

En los conjunto de claves compatibles con múltiples regiones que utilizan más de una clave KMS, puede especificar varias claves de una o múltiples regiones. Sin embargo, solo puede especificar una clave de cada conjunto de claves de múltiples regiones relacionadas. Si especifica más de un identificador de clave con el mismo ID de clave, se produce un error en la llamada al constructor.

En los siguientes ejemplos se crea un AWS KMS anillo de claves con una clave KMS multirregional. Los ejemplos especifican una clave multirregional como clave generadora y una clave de región única como clave secundaria.

Java
final MaterialProviders matProv = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); final CreateAwsKmsMrkMultiKeyringInput createAwsKmsMrkMultiKeyringInput = CreateAwsKmsMrkMultiKeyringInput.builder() .generator(multiRegionKeyArn) .kmsKeyIds(Collections.singletonList(kmsKeyArn)) .build(); IKeyring awsKmsMrkMultiKeyring = matProv.CreateAwsKmsMrkMultiKeyring(createAwsKmsMrkMultiKeyringInput);
C# / .NET
var matProv = new MaterialProviders(new MaterialProvidersConfig()); var createAwsKmsMrkMultiKeyringInput = new CreateAwsKmsMrkMultiKeyringInput { Generator = multiRegionKeyArn, KmsKeyIds = new List<String> { kmsKeyArn } }; var awsKmsMrkMultiKeyring = matProv.CreateAwsKmsMrkMultiKeyring(createAwsKmsMrkMultiKeyringInput);

Si utiliza conjuntos de AWS KMS claves multirregionales, puede descifrar el texto cifrado en modo estricto o en modo de descubrimiento. Para descifrar el texto cifrado en modo estricto, cree una instancia del símbolo de múltiples regiones con la clave ARN de la clave de múltiples regiones relacionada en la región en la que esté descifrando el texto cifrado. Si especifica la clave ARN de una clave de múltiples regiones relacionada en una región diferente (por ejemplo, la región en la que se cifró el registro), el símbolo de múltiples regiones realizará una llamada entre regiones para esa AWS KMS key.

Al descifrar en modo estricto, el símbolo compatible con múltiples regiones requiere un ARN clave. Solo acepta un ARN de clave de cada conjunto de claves de varias regiones relacionadas.

También puede descifrar en modo de detección con claves de múltiples regiones de AWS KMS . Al descifrar en modo de detección, no especifique ningún AWS KMS keys. (Para obtener información sobre los conjuntos de claves de detección de una sola región AWS KMS , consulte.) Uso de un anillo de claves de detección AWS KMS

Si ha cifrado con una clave multirregional, el símbolo multirregional del modo de detección intentará descifrarlo utilizando una clave multirregional relacionada en la región local. Si no existe ninguno, se produce un error en la llamada. En el modo de detección, el SDK AWS de cifrado de bases de datos no intentará realizar una llamada entre regiones para obtener la clave multirregional utilizada para el cifrado.

Uso de un anillo de claves de detección AWS KMS

Al descifrar, se recomienda especificar las claves de empaquetado que puede usar el SDK de cifrado AWS de bases de datos. Para seguir esta práctica recomendada, utilice un conjunto de claves de AWS KMS descifrado que limite las claves de AWS KMS empaquetado a las que especifique. Sin embargo, también puede crear un anillo de claves de AWS KMS detección, es decir, un anillo de AWS KMS claves que no especifique ninguna clave de empaquetado.

El SDK AWS de cifrado de bases de datos proporciona un conjunto de claves de AWS KMS detección estándar y un conjunto de claves de detección para claves de varias regiones. AWS KMS Para obtener información sobre cómo usar claves de varias regiones con el SDK de cifrado de bases de datos de AWS , consulte Uso de varias regiones AWS KMS keys.

Como no especifica ninguna clave de encapsulación, un conjunto de claves de detección no puede cifrar los datos. Si utiliza un conjunto de claves de detección para cifrar los datos, solo o en un conjunto de claves múltiple, la operación de cifrado no se realizará correctamente.

Al descifrar, un conjunto de claves de detección permite al SDK de cifrado de AWS bases de datos solicitar AWS KMS el descifrado de cualquier clave de datos cifrada utilizando la clave AWS KMS key que la cifró, independientemente de quién sea su propietario o tenga acceso a ella. AWS KMS key La llamada se realiza correctamente solo si el intermediario tiene permiso de kms:Decrypt sobre la AWS KMS key.

importante

Si incluye un conjunto de claves de AWS KMS detección en un conjunto de claves de descifrado múltiple, el conjunto de claves de descubrimiento anula todas las restricciones de claves de KMS especificadas en otros conjuntos de claves del conjunto de claves múltiples. El conjunto de claves múltiples se comporta como el menos restrictivo. Si utiliza un conjunto de claves de detección para cifrar datos, solo o en un conjunto de claves múltiple, la operación de cifrado no se realizará correctamente

El SDK de cifrado de AWS bases de datos incluye un conjunto de claves de detección para mayor comodidad. AWS KMS No obstante, recomendamos que utilice un conjunto de claves más limitado siempre que sea posible por los siguientes motivos.

  • Autenticidad: un AWS KMS conjunto de claves de detección puede utilizar cualquier clave AWS KMS key que se haya utilizado para cifrar una clave de datos en la descripción del material, siempre que la persona que llama tenga permiso para usarla para descifrarla. AWS KMS key Es posible que esta no sea la AWS KMS key que pretende usar la persona que llama. Por ejemplo, es posible que una de las claves de datos cifradas se haya cifrado con un sistema menos seguro AWS KMS key que cualquiera pueda utilizar.

  • Latencia y rendimiento: un conjunto de claves de AWS KMS detección puede ser considerablemente más lento que otros, ya que el SDK de cifrado de AWS bases de datos intenta descifrar todas las claves de datos cifradas, incluidas las cifradas en otras regiones y AWS KMS keys en otras regiones, Cuentas de AWS y AWS KMS keys que la persona que llama no tiene permiso para utilizarlas para el descifrado.

Si utiliza un conjunto de claves de detección, le recomendamos que utilice un filtro de detección para limitar las claves de KMS que se pueden usar a las de las particiones Y especificadas. Cuentas de AWS Para obtener ayuda para encontrar el ID y la partición de su cuenta, consulte Sus Cuenta de AWS identificadores y el formato ARN en. Referencia general de AWS

Los siguientes ejemplos de código crean una instancia de un conjunto de claves de AWS KMS detección con un filtro de detección que limita las claves de KMS que el SDK de cifrado de AWS bases de datos puede utilizar a las de la partición y la aws cuenta de ejemplo. 111122223333

Antes de usar este código, sustituya los valores del ejemplo Cuenta de AWS y de la partición por valores válidos para la partición y. Cuenta de AWS Si sus claves de KMS se encuentran en regiones de China, use el valor de la partición de aws-cn. Si las claves KMS están en AWS GovCloud (US) Regions, use el valor de la partición de aws-us-gov. Para todas las demás Regiones de AWS, utilice el valor de la partición de aws.

Java
// Create discovery filter DiscoveryFilter discoveryFilter = DiscoveryFilter.builder() .partition("aws") .accountIds(111122223333) .build(); // Create the discovery keyring CreateAwsKmsMrkDiscoveryMultiKeyringInput createAwsKmsMrkDiscoveryMultiKeyringInput = CreateAwsKmsMrkDiscoveryMultiKeyringInput.builder() .discoveryFilter(discoveryFilter) .build(); IKeyring decryptKeyring = matProv.CreateAwsKmsMrkDiscoveryMultiKeyring(createAwsKmsMrkDiscoveryMultiKeyringInput);
C# / .NET
// Create discovery filter var discoveryFilter = new DiscoveryFilter { Partition = "aws", AccountIds = 111122223333 }; // Create the discovery keyring var createAwsKmsMrkDiscoveryMultiKeyringInput = new CreateAwsKmsMrkDiscoveryMultiKeyringInput { DiscoveryFilter = discoveryFilter }; var decryptKeyring = matProv.CreateAwsKmsMrkDiscoveryMultiKeyring(createAwsKmsMrkDiscoveryMultiKeyringInput);

Uso de un anillo de claves de detección AWS KMS regional

Un conjunto de claves de detección regional de AWS KMS es un conjunto de claves que no especifica los ARN de las claves de KMS. En su lugar, permite que el SDK AWS de cifrado de bases de datos descifre utilizando únicamente las claves de KMS en particular. Regiones de AWS

Al descifrar con un conjunto de claves de detección AWS KMS regional, el SDK de cifrado de AWS bases de datos descifra cualquier clave de datos cifrada que se haya cifrado con una AWS KMS key de las especificadas. Región de AWS Para tener éxito, la persona que llama debe tener kms:Decrypt permiso en al menos una de las claves de datos especificadas Región de AWS que cifraron una clave de datos. AWS KMS keys

Al igual que otros conjuntos de claves de detección, el conjunto de claves de detección regional no tiene ningún efecto sobre el cifrado. Solo funciona cuando se descifran campos cifrados. Si utiliza un conjunto de claves de detección regional en un conjunto de claves múltiples que se utiliza para cifrar y descifrar, solo es efectivo al descifrar. Si utiliza un conjunto de claves de detección multirregional para cifrar los datos, solo o en un conjunto de claves múltiples, la operación de cifrado no se realizará correctamente.

importante

Si incluye un conjunto de claves de detección AWS KMS regional en un conjunto de claves de descifrado múltiple, el conjunto de claves de detección regional anula todas las restricciones de claves de KMS especificadas en otros anillos de claves del conjunto de claves múltiples. El conjunto de claves múltiples se comporta como el menos restrictivo. Cuando se utiliza un conjunto de claves de detección de AWS KMS en un conjunto de claves múltiple, no tiene ningún efecto sobre el cifrado.

El conjunto de claves de detección regional del SDK de cifrado de AWS bases de datos solo intenta descifrar las claves de KMS de la región especificada. Cuando se utiliza un conjunto de claves de detección, se configura la región en el cliente. AWS KMS Estas implementaciones del SDK de cifrado de AWS bases de datos no filtran las claves de KMS por región, pero AWS KMS no permiten descifrar las claves de KMS de fuera de la región especificada.

Si utiliza un conjunto de claves de detección, le recomendamos que utilice un filtro de detección para limitar las claves de KMS utilizadas en el descifrado a las de las particiones Y especificadas. Cuentas de AWS

Por ejemplo, el código siguiente crea un conjunto de claves de detección AWS KMS regional con un filtro de detección. Este conjunto de claves limita el SDK de cifrado de AWS bases de datos a las claves KMS de la cuenta 111122223333 de la región EE.UU. Oeste (Oregón) (us-west-2).

Java
// Create the discovery filter DiscoveryFilter discoveryFilter = DiscoveryFilter.builder() .partition("aws") .accountIds(111122223333) .build(); // Create the discovery keyring CreateAwsKmsMrkDiscoveryMultiKeyringInput createAwsKmsMrkDiscoveryMultiKeyringInput = CreateAwsKmsMrkDiscoveryMultiKeyringInput.builder() .discoveryFilter(discoveryFilter) .regions("us-west-2") .build(); IKeyring decryptKeyring = matProv.CreateAwsKmsMrkDiscoveryMultiKeyring(createAwsKmsMrkDiscoveryMultiKeyringInput);
C# / .NET
// Create discovery filter var discoveryFilter = new DiscoveryFilter { Partition = "aws", AccountIds = 111122223333 }; // Create the discovery keyring var createAwsKmsMrkDiscoveryMultiKeyringInput = new CreateAwsKmsMrkDiscoveryMultiKeyringInput { DiscoveryFilter = discoveryFilter, Regions = us-west-2 }; var decryptKeyring = matProv.CreateAwsKmsMrkDiscoveryMultiKeyring(createAwsKmsMrkDiscoveryMultiKeyringInput);