AWS KMS llaveros - AWS Encryption SDK

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

Un AWS KMS anillo de claves utiliza el cifrado simétrico AWS KMS keyspara generar, cifrar y descifrar las claves de datos. AWS Key Management Service (AWS KMS) protege las claves de 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.

A partir de la versión 2.3, puede utilizar una clave AWS KMS multirregional en un AWS KMS conjunto de claves o en un proveedor de claves maestras. x de la AWS Encryption SDK y la versión 3.0. x de la CLI AWS de cifrado. Para obtener detalles y ejemplos del uso del nuevo símbolo compatible con varias regiones, consulte Uso de AWS KMS keys multirregional. Para obtener más información sobre las claves de varias regiones, consulte Uso de claves de varias regiones en la Guía para desarrolladores de AWS Key Management Service .

nota

Versión 4. x del AWS Encryption SDK para .NET y la versión 3. x de ellas SDK de cifrado de AWS para Java son las únicas implementaciones de lenguajes de programación que admiten conjuntos de AWS KMS claves que utilizan un RSA asimétrico. AWS KMS keys

Si intenta incluir una clave de KMS asimétrica en un conjunto de claves de cifrado en cualquier implementación de otro lenguaje, se produce un error en la llamada de cifrado. Si la incluye en un conjunto de claves de descifrado, se ignora.

Todas las menciones de los llaveros KMS en el se refieren a los llaveros. AWS Encryption SDK AWS KMS

AWS KMS Los llaveros pueden incluir dos tipos de claves 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 sin formato que generó la clave del generador. AWS KMS los llaveros pueden tener cero o más claves adicionales.

Al cifrar, el AWS KMS anillo de claves que utilice debe tener una clave generadora. Al descifrar, la clave generadora omite la distinción entre claves generadoras y claves adicionales.

Cuando un anillo de claves de AWS KMS cifrado solo tiene una AWS KMS clave, esa clave se utiliza 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 conjunto de varios llaveros con otros llaveros del mismo tipo o de un tipo diferente.

Permisos necesarios para los conjuntos de claves de AWS KMS

AWS Encryption SDK No requiere ni depende Cuenta de AWS de ninguno. Servicio de AWS Sin embargo, para usar un AWS KMS llavero, necesitas tener Cuenta de AWS los siguientes permisos mínimos AWS KMS keys en el llavero.

  • 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 en todas las demás claves de los demás conjuntos de claves AWS KMS .

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.

  • En un anillo de claves de cifrado para el SDK de cifrado de AWS para C, puede utilizar un ARN de clave o un alias ARN para identificar las claves de KMS. En todas las implementaciones de otros lenguajes, puede utilizar un identificador de clave, un ARN de clave, un nombre de alias o un ARN de alias para cifrar los datos.

  • En un conjunto de claves de descifrado, debe usar el ARN de una clave para identificar AWS KMS keys. Este requisito se aplica a todas las implementaciones de lenguaje del AWS Encryption SDK. Para obtener más detalles, consulte Seleccionar las claves de empaquetado.

  • En un conjunto de claves usado para cifrar y descifrar, debe usar el ARN de una clave para identificar AWS KMS keys. Este requisito se aplica a todas las implementaciones de lenguaje del AWS Encryption SDK.

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.

Crear un anillo de claves para el cifrado AWS KMS

Puede configurar cada conjunto de AWS KMS claves con uno AWS KMS key o varios AWS KMS keys en la misma dirección o en una diferente Cuentas de AWS . Regiones de AWS Las AWS KMS keys deben ser claves de cifrado simétricas (SYMMETRIC_DEFAULT). También puede utilizar una clave de KMS multirregional de cifrado simétrico. Como ocurre con todos los conjuntos de claves, puede utilizar uno o varios conjuntos de claves de AWS KMS en un conjunto de claves múltiple.

Al crear un conjunto de AWS KMS claves para cifrar datos, debe especificar una clave generadora, que es la que se utiliza para generar una AWS KMS key clave de datos en 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 claves adicionales AWS KMS keys que cifren la misma clave de datos en texto plano.

Para descifrar el mensaje cifrado protegido por este conjunto de claves, el conjunto de claves que utilice debe incluir al menos uno de los elementos AWS KMS keys definidos en el conjunto de claves, o no. AWS KMS keys(Un anillo de AWS KMS claves sin un número AWS KMS keys se conoce como anillo de claves de detección).AWS KMS

En las implementaciones AWS Encryption SDK lingüísticas distintas del SDK de cifrado de AWS para C, todas las claves de empaquetado de un anillo de claves de cifrado o de varios anillos de claves deben poder cifrar la clave de datos. Si alguna de las claves de encapsulamiento 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. La excepción es la siguiente SDK de cifrado de AWS para C, en la que la operación de cifrado ignora un anillo de claves de detección estándar, pero falla si se especifica un anillo de claves de descubrimiento multirregional, solo o en un anillo de claves múltiples.

En los ejemplos siguientes se crea un conjunto de claves con una AWS KMS clave generadora y una clave adicional. En estos ejemplos se utilizan ARN de clave para identificar las claves de KMS. Esta es una práctica recomendada para los AWS KMS anillos de claves utilizados para el cifrado y un requisito para los AWS KMS anillos de claves utilizados para el descifrado. Para obtener más detalles, consulte Identificarse AWS KMS keys en un AWS KMS llavero.

C

Para identificar un AWS KMS key en un anillo de claves de cifrado en SDK de cifrado de AWS para C, especifique un ARN de clave o un ARN de alias. En un conjunto de claves de descifrado, debe usar un ARN de clave. Para obtener más detalles, consulte Identificarse AWS KMS keys en un AWS KMS llavero.

Para obtener un ejemplo completo, consulte string.cpp.

const char * generator_key = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" const char * additional_key = "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321" struct aws_cryptosdk_keyring *kms_encrypt_keyring = Aws::Cryptosdk::KmsKeyring::Builder().Build(generator_key,{additional_key});
C# / .NET

Para crear un conjunto de AWS KMS claves con una o varias AWS KMS claves en el dominio.NET, cree un conjunto AWS Encryption SDK de claves múltiples. El sistema AWS Encryption SDK para .NET incluye un conjunto de claves múltiples solo para las claves. AWS KMS

Al especificar un AWS KMS key para un conjunto de claves de cifrado en para.NET, puede utilizar cualquier identificador de clave válido: un identificador de clave, un ARN de clave, un nombre de alias o un ARN de alias. AWS Encryption SDK Si necesita ayuda para identificarlo AWS KMS keys en un conjunto de AWS KMS claves, consulte. Identificarse AWS KMS keys en un AWS KMS llavero

En el siguiente ejemplo se utiliza la versión 4. x de AWS Encryption SDK para que .NET cree un AWS KMS anillo de claves con una clave generadora y claves adicionales. Para ver un ejemplo completo, consulte AwsKmsMultiKeyringExample.cs.

// Instantiate the AWS Encryption SDK and material provider var mpl = new MaterialProviders(new MaterialProvidersConfig()); var esdk = new ESDK(new AwsEncryptionSdkConfig()); string generatorKey = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; List<string> additionalKey = new List<string> { "alias/exampleAlias" }; // Instantiate the keyring input object var kmsEncryptKeyringInput = new CreateAwsKmsMultiKeyringInput { Generator = generatorKey, KmsKeyIds = additionalKey }; var kmsEncryptKeyring = materialProviders.CreateAwsKmsMultiKeyring(kmsEncryptKeyringInput);
JavaScript Browser

Al especificar un AWS KMS key para un conjunto de claves de cifrado en SDK de cifrado de AWS para JavaScript, puede utilizar cualquier identificador de clave válido: un ID de clave, un ARN de clave, un nombre de alias o un ARN de alias. Si necesita ayuda para identificarlo AWS KMS keys en un conjunto de AWS KMS claves, consulte. Identificarse AWS KMS keys en un AWS KMS llavero

Para ver un ejemplo completo, consulte kms_simple.ts en el repositorio de. SDK de cifrado de AWS para JavaScript GitHub

const clientProvider = getClient(KMS, { credentials }) const generatorKeyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' const additionalKey = 'alias/exampleAlias' const keyring = new KmsKeyringBrowser({ clientProvider, generatorKeyId, keyIds: [additionalKey] })
JavaScript Node.js

Al especificar un AWS KMS key para un conjunto de claves de cifrado en SDK de cifrado de AWS para JavaScript, puede utilizar cualquier identificador de clave válido: un ID de clave, un ARN de clave, un nombre de alias o un ARN de alias. Si necesita ayuda para identificarlo AWS KMS keys en un conjunto de AWS KMS claves, consulte. Identificarse AWS KMS keys en un AWS KMS llavero

Para ver un ejemplo completo, consulte kms_simple.ts en el repositorio de. SDK de cifrado de AWS para JavaScript GitHub

const generatorKeyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' const additionalKey = 'alias/exampleAlias' const keyring = new KmsKeyringNode({ generatorKeyId, keyIds: [additionalKey] })
Java

Para crear un conjunto de AWS KMS claves con una o varias AWS KMS claves, cree un conjunto de claves múltiples. SDK de cifrado de AWS para Java SDK de cifrado de AWS para Java Incluye un llavero múltiple solo para llaves. AWS KMS

Al especificar un AWS KMS key para un conjunto de claves de cifrado en SDK de cifrado de AWS para Java, puede utilizar cualquier identificador de clave válido: un ID de clave, un ARN de clave, un nombre de alias o un ARN de alias. Si necesita ayuda para identificarlo AWS KMS keys en un conjunto de AWS KMS claves, consulte. Identificarse AWS KMS keys en un AWS KMS llavero

Para ver un ejemplo completo, consulte BasicEncryptionKeyringExample.java en el SDK de cifrado de AWS para Java repositorio de. GitHub

// Instantiate the AWS Encryption SDK and material providers final AwsCrypto crypto = AwsCrypto.builder().build(); final MaterialProviders materialProviders = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); String generatorKey = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; List<String> additionalKey = Collections.singletonList("alias/exampleAlias"); // Create the AWS KMS keyring final CreateAwsKmsMultiKeyringInput keyringInput = CreateAwsKmsMultiKeyringInput.builder() .generator(generatorKey) .kmsKeyIds(additionalKey) .build(); final IKeyring kmsKeyring = matProv.CreateAwsKmsMultiKeyring(keyringInput);

Crear un conjunto de AWS KMS claves para el descifrado

También se especifica un AWS KMS anillo de claves al descifrar el mensaje cifrado que devuelve. AWS Encryption SDK Si el conjunto de claves de descifrado lo especifica AWS KMS keys, AWS Encryption SDK utilizará únicamente esas claves de empaquetado para descifrar las claves de datos cifradas del mensaje cifrado. (También puede usar un anillo de claves de AWS KMS detección, que no especifica ninguno). AWS KMS keys

Al descifrar, AWS Encryption SDK busca en el conjunto de AWS KMS claves una AWS KMS key que pueda descifrar una de las claves de datos cifradas. En concreto, AWS Encryption SDK utiliza el siguiente patrón para cada clave de datos cifrados de un mensaje cifrado.

  • AWS Encryption SDK Obtiene la clave ARN de la AWS KMS key que cifró la clave de datos de los metadatos del mensaje cifrado.

  • AWS Encryption SDK Busca en el anillo 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, AWS Encryption SDK 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.

AWS Encryption SDK Nunca intenta descifrar una clave de datos cifrada a menos que el ARN de la clave que cifró esos datos esté incluido en AWS KMS key el anillo de claves de descifrado. Si el conjunto de claves de descifrado no incluye los ARN de ninguna de las claves de datos AWS KMS keys que cifró, AWS Encryption SDK no se realizará la llamada de descifrado sin llamar nunca. AWS KMS

A partir de la versión 1.7. x, al descifrar una clave de datos cifrada, AWS Encryption SDK siempre pasa la clave ARN del al parámetro de AWS KMS keyKeyId la operación de AWS KMS descifrado. La AWS KMS mejor práctica es identificar el AWS KMS key momento de descifrar la clave de datos cifrados con la clave de empaquetado que se va a utilizar.

Una llamada de descifrado con un AWS KMS anillo de claves tiene éxito cuando al menos una AWS KMS key de las claves de descifrado puede descifrar una de las claves de datos cifradas del mensaje cifrado. Además, el intermediario debe tener un permiso kms:Decrypt sobre esa AWS KMS key. Este comportamiento le permite cifrar datos AWS KMS keys en varias cuentas AND, pero proporciona un conjunto de claves de descifrado más limitado Regiones de AWS y adaptado a una cuenta, región, usuario, grupo o función determinados.

Al especificar una AWS KMS key en un anillo de claves de descifrado, debe utilizar su clave ARN. De lo contrario, no AWS KMS key se reconoce. Para obtener ayuda para encontrar el ID de la clave y el ARN, consulte Búsqueda del ID y el ARN de la clave en la Guía para desarrolladores de AWS Key Management Service .

nota

Si reutiliza un conjunto de claves de cifrado para realizar operaciones de descifrado, asegúrese de que las AWS KMS keys del conjunto de claves se identifiquen mediante sus ARN de clave.

Por ejemplo, el siguiente conjunto de AWS KMS claves incluye solo la clave adicional que se utilizó en el conjunto de claves de cifrado. Sin embargo, en lugar de hacer referencia a la clave adicional por su alias, alias/exampleAlias, el ejemplo utiliza la clave ARN de la clave adicional, tal como requieren las llamadas de descifrado.

Puede utilizar este conjunto de claves para descifrar un mensaje cifrado tanto con la clave generadora como con la clave adicional, siempre y cuando tenga permiso para usar la clave adicional para descifrar datos.

C
const char * additional_key = "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321" struct aws_cryptosdk_keyring *kms_decrypt_keyring = Aws::Cryptosdk::KmsKeyring::Builder().Build(additional_key);
C# / .NET

Como este conjunto de claves de descifrado incluye solo una AWS KMS clave, en el ejemplo se utiliza el CreateAwsKmsKeyring() método con una instancia de su objeto. CreateAwsKmsKeyringInput Para crear un AWS KMS anillo de claves con una sola AWS KMS clave, puede utilizar un anillo de claves de una o varias teclas. Para obtener más detalles, consulte Cifrado de datos en la AWS Encryption SDK para .NET. En el siguiente ejemplo se utiliza la versión 4. x de AWS Encryption SDK para que .NET cree un AWS KMS anillo de claves para el descifrado.

// Instantiate the AWS Encryption SDK and material providers var esdk = new ESDK(new AwsEncryptionSdkConfig()); var mpl = new MaterialProviders(new MaterialProvidersConfig()); string additionalKey = "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321"; // Instantiate a KMS keyring for one AWS KMS key. var kmsDecryptKeyringInput = new CreateAwsKmsKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(), KmsKeyId = additionalKey }; var kmsDecryptKeyring = materialProviders.CreateAwsKmsKeyring(kmsDecryptKeyringInput);
JavaScript Browser
const clientProvider = getClient(KMS, { credentials }) const additionalKey = 'arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321' const keyring = new KmsKeyringBrowser({ clientProvider, keyIds: [additionalKey] })
JavaScript Node.js
const additionalKey = 'arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321' const keyring = new KmsKeyringNode({ keyIds: [additionalKey] })
Java

Como este conjunto de claves de descifrado incluye solo una AWS KMS clave, en el ejemplo se utiliza el CreateAwsKmsKeyring() método con una instancia de su objeto. CreateAwsKmsKeyringInput Para crear un AWS KMS anillo de claves con una sola AWS KMS clave, puede utilizar un anillo de claves de una o varias teclas.

// Instantiate the AWS Encryption SDK and material providers final AwsCrypto crypto = AwsCrypto.builder().build(); final MaterialProviders materialProviders = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); String additionalKey = "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321"; // Create a AwsKmsKeyring CreateAwsKmsKeyringInput kmsDecryptKeyringInput = CreateAwsKmsKeyringInput.builder() .generator(additionalKey) .kmsClient(KmsClient.create()) .build(); IKeyring kmsKeyring = materialProviders.CreateAwsKmsKeyring(kmsDecryptKeyringInput);

También puede utilizar un conjunto de AWS KMS claves que especifique una clave generadora para el descifrado, como la siguiente. Al descifrar, AWS Encryption SDK ignora la distinción entre claves generadoras y claves adicionales. Puede usar cualquiera de las especificadas AWS KMS keys para descifrar una clave de datos cifrada. La llamada a solo se AWS KMS realiza correctamente cuando la persona que llama tiene permiso para usarla para descifrar datos AWS KMS key .

C
struct aws_cryptosdk_keyring *kms_decrypt_keyring = Aws::Cryptosdk::KmsKeyring::Builder().Build(generator_key, {additional_key, other_key});
C# / .NET

En el ejemplo siguiente se utiliza la versión 4.x del AWS Encryption SDK para .NET.

// Instantiate the AWS Encryption SDK and material providers var esdk = new ESDK(new AwsEncryptionSdkConfig()); var mpl = new MaterialProviders(new MaterialProvidersConfig()); string generatorKey = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; // Instantiate a KMS keyring for one AWS KMS key. var kmsDecryptKeyringInput = new CreateAwsKmsKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(), KmsKeyId = generatorKey }; var kmsDecryptKeyring = materialProviders.CreateAwsKmsKeyring(kmsDecryptKeyringInput);
JavaScript Browser
const clientProvider = getClient(KMS, { credentials }) const keyring = new KmsKeyringBrowser({ clientProvider, generatorKeyId, keyIds: [additionalKey, otherKey] })
JavaScript Node.js
const keyring = new KmsKeyringNode({ generatorKeyId, keyIds: [additionalKey, otherKey] })
Java
// Instantiate the AWS Encryption SDK and material providers final AwsCrypto crypto = AwsCrypto.builder().build(); final MaterialProviders materialProviders = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); String generatorKey = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; // Create a AwsKmsKeyring CreateAwsKmsKeyringInput kmsDecryptKeyringInput = CreateAwsKmsKeyringInput.builder() .generator(generatorKey) .kmsClient(KmsClient.create()) .build(); IKeyring kmsKeyring = materialProviders.CreateAwsKmsKeyring(kmsDecryptKeyringInput);

A diferencia de un conjunto de claves de cifrado que utiliza todo lo especificado AWS KMS keys, puedes descifrar un mensaje cifrado con un conjunto de claves de descifrado que incluya elementos que no estén relacionados con el mensaje cifrado y AWS KMS keys que la persona AWS KMS keys que llama no tenga permiso para utilizarlos. Si una llamada de descifrado a AWS KMS devuelve un error, por ejemplo cuando el intermediario no dispone del permiso necesario, el AWS Encryption SDK pasa a la siguiente clave de datos cifrada.

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

Al descifrar, se recomienda especificar las claves de empaquetado que AWS Encryption SDK pueden utilizar. 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.

AWS Encryption SDK Incluye un conjunto de claves de AWS KMS detección estándar y un anillo de claves de detección para claves de varias regiones. AWS KMS Para obtener información sobre el uso de claves multirregionales con el, consulte. AWS Encryption SDKUso de AWS KMS keys multirregional

Como no especifica ninguna clave de encapsulamiento, 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. La excepción es la SDK de cifrado de AWS para C, en la que la operación de cifrado ignora un conjunto de claves de detección estándar, pero no se produce si se especifica un conjunto de claves de detección multirregional, solo o en un anillo de claves múltiples.

Al descifrar, un anillo de claves de detección permite solicitar AWS KMS el AWS Encryption SDK 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 anillo de claves de AWS KMS descubrimiento en un conjunto de claves de descifrado múltiple, el anillo de claves de descubrimiento anula todas las restricciones de claves de KMS especificadas por otros conjuntos de claves del conjunto de claves múltiples. El conjunto de claves múltiples se comporta como el menos restrictivo. Un conjunto de claves de AWS KMS detección no tiene ningún efecto sobre el cifrado cuando se utiliza solo o en un conjunto de claves múltiples.

AWS Encryption SDK Incluye un llavero de AWS KMS detección para mayor comodidad. No obstante, recomendamos que utilice un conjunto de claves más limitado siempre que sea posible por los siguientes motivos.

  • Autenticidad: un anillo de claves de AWS KMS detección puede utilizar cualquier clave AWS KMS key que se haya utilizado para cifrar una clave de datos en el mensaje cifrado, solo para que la persona que llama tenga permiso para usarla para descifrarla. AWS KMS key Podría no ser la AWS KMS key que el intermediario quiere utilizar. Por ejemplo, es posible que una de las claves de datos cifradas se haya cifrado con una menos segura AWS KMS key que cualquiera pueda utilizar.

  • Latencia y rendimiento: un AWS KMS conjunto de claves de detección puede ser considerablemente más lento que otros, ya que AWS Encryption SDK 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 la persona AWS KMS keys que llama no tiene permiso para utilizarlas para descifrarlas.

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 utilizar a las que se encuentran en particiones Y especificadas. Cuentas de AWS Los filtros de detección son compatibles con las versiones 1.7.x y versiones posteriores del AWS Encryption SDK. Para obtener ayuda para encontrar el ID y la partición de su cuenta, consulte Sus identificadores de Cuenta de AWS y el formato ARN en la Referencia general de AWS.

El siguiente código crea 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 se AWS Encryption SDK pueden utilizar a las de la aws partición y de la 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 sus claves de KMS están incluidas AWS GovCloud (US) Regions, utilice el valor de la aws-us-gov partición. Para todos los demás Regiones de AWS, utilice el valor de la aws partición.

C

Para ver un ejemplo completo, consulte: kms_discovery.cpp.

std::shared_ptr<KmsKeyring::> discovery_filter( KmsKeyring::DiscoveryFilter::Builder("aws") .AddAccount("111122223333") .Build()); struct aws_cryptosdk_keyring *kms_discovery_keyring = Aws::Cryptosdk::KmsKeyring::Builder() .BuildDiscovery(discovery_filter));
C# / .NET

En el ejemplo siguiente se utiliza la versión 4.x del AWS Encryption SDK para .NET.

// Instantiate the AWS Encryption SDK and material providers var esdk = new ESDK(new AwsEncryptionSdkConfig()); var mpl = new MaterialProviders(new MaterialProvidersConfig()); List<string> account = new List<string> { "111122223333" }; // In a discovery keyring, you specify an AWS KMS client and a discovery filter, // but not a AWS KMS key var kmsDiscoveryKeyringInput = new CreateAwsKmsDiscoveryKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(), DiscoveryFilter = new DiscoveryFilter() { AccountIds = account, Partition = "aws" } }; var kmsDiscoveryKeyring = materialProviders.CreateAwsKmsDiscoveryKeyring(kmsDiscoveryKeyringInput);
JavaScript Browser

En JavaScript, debe especificar explícitamente la propiedad de descubrimiento.

const clientProvider = getClient(KMS, { credentials }) const discovery = true const keyring = new KmsKeyringBrowser(clientProvider, { discovery, discoveryFilter: { accountIDs: [111122223333], partition: 'aws' } })
JavaScript Node.js

En JavaScript, debe especificar de forma explícita la propiedad de descubrimiento.

const discovery = true const keyring = new KmsKeyringNode({ discovery, discoveryFilter: { accountIDs: ['111122223333'], partition: '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);

Uso de un conjunto de claves de descubrimiento 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, AWS Encryption SDK permite descifrar utilizando únicamente las claves KMS en particular. Regiones de AWS

Al descifrar con un conjunto de claves de detección AWS KMS regional, AWS Encryption SDK 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 especificadas Región de AWS que AWS KMS keys cifraron una clave de datos.

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 mensajes 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. Un conjunto de claves de AWS KMS detección no tiene ningún efecto sobre el cifrado cuando se utiliza solo o en un conjunto de claves múltiples.

El conjunto de claves de detección regional SDK de cifrado de AWS para C intenta descifrar únicamente con claves de KMS de la región especificada. Cuando se utiliza un conjunto de claves de detección en SDK de cifrado de AWS para JavaScript y AWS Encryption SDK para .NET, se configura la región en el cliente. AWS KMS Estas AWS Encryption SDK implementaciones no filtran las claves de KMS por región, pero no AWS KMS 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 Los filtros de detección son compatibles con las versiones 1.7.x y versiones posteriores del AWS Encryption SDK.

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 las AWS Encryption SDK claves KMS de la cuenta 111122223333 en la región EE.UU. Oeste (Oregón) (us-west-2).

C

Para ver este conjunto de claves y el método create_kms_client, en un ejemplo práctico, consulte kms_discovery.cpp.

std::shared_ptr<KmsKeyring::DiscoveryFilter> discovery_filter( KmsKeyring::DiscoveryFilter::Builder("aws") .AddAccount("111122223333") .Build()); struct aws_cryptosdk_keyring *kms_regional_keyring = Aws::Cryptosdk::KmsKeyring::Builder() .WithKmsClient(create_kms_client(Aws::Region::US_WEST_2)).BuildDiscovery(discovery_filter));
C# / .NET

La versión AWS Encryption SDK para .NET no tiene un conjunto de claves de descubrimiento regional específico. Sin embargo, puede utilizar varias técnicas para limitar las claves de KMS que se utilizan al descifrar a una región determinada.

La forma más eficaz de limitar las regiones de un conjunto de claves de detección es utilizar un conjunto de claves de detección que reconozca múltiples regiones, incluso si se cifran los datos con claves de una sola región. Cuando encuentra claves de una sola región, el conjunto de claves compatible con varias regiones no utiliza ninguna característica multirregional.

El conjunto de claves devuelto por el CreateAwsKmsMrkDiscoveryKeyring() método filtra las claves de KMS por región antes de llamar a AWS KMS. Envía una solicitud de descifrado AWS KMS solo cuando la clave de datos cifrada se cifró con una clave KMS de la región especificada por el Region parámetro del objeto. CreateAwsKmsMrkDiscoveryKeyringInput

En los ejemplos siguientes se utiliza la versión 4. x de AWS Encryption SDK para .NET.

// Instantiate the AWS Encryption SDK and material providers var esdk = new ESDK(new AwsEncryptionSdkConfig()); var mpl = new MaterialProviders(new MaterialProvidersConfig()); List<string> account = new List<string> { "111122223333" }; // Create the discovery filter var filter = DiscoveryFilter = new DiscoveryFilter { AccountIds = account, Partition = "aws" }; var regionalDiscoveryKeyringInput = new CreateAwsKmsMrkDiscoveryKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(RegionEndpoint.USWest2), Region = RegionEndpoint.USWest2, DiscoveryFilter = filter }; var kmsRegionalDiscoveryKeyring = materialProviders.CreateAwsKmsMrkDiscoveryKeyring(regionalDiscoveryKeyringInput);

También puede limitar las claves de KMS a una determinada región Región de AWS especificando una región en la instancia del AWS KMS cliente (AmazonKeyManagementServiceClient). Sin embargo, esta configuración es menos eficiente y potencialmente más costosa que el uso de un conjunto de claves de detección compatible con varias regiones. En lugar de filtrar las claves de KMS por región antes de realizar la llamada AWS KMS, el AWS Encryption SDK dominio.NET AWS KMS solicita cada clave de datos cifrada (hasta que descifra una) y se basa en ella AWS KMS para limitar las claves de KMS que utiliza a la región especificada.

En el ejemplo siguiente se utiliza la versión 4.x del AWS Encryption SDK para .NET.

// Instantiate the AWS Encryption SDK and material providers var esdk = new ESDK(new AwsEncryptionSdkConfig()); var mpl = new MaterialProviders(new MaterialProvidersConfig()); List<string> account = new List<string> { "111122223333" }; // Create the discovery filter, // but not a AWS KMS key var createRegionalDiscoveryKeyringInput = new CreateAwsKmsDiscoveryKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(RegionEndpoint.USWest2), DiscoveryFilter = new DiscoveryFilter() { AccountIds = account, Partition = "aws" } }; var kmsRegionalDiscoveryKeyring = materialProviders.CreateAwsKmsDiscoveryKeyring(createRegionalDiscoveryKeyringInput);
JavaScript Browser
const clientProvider = getClient(KMS, { credentials }) const discovery = true const clientProvider = limitRegions(['us-west-2'], getKmsClient) const keyring = new KmsKeyringBrowser(clientProvider, { discovery, discoveryFilter: { accountIDs: ['111122223333'], partition: 'aws' } })
JavaScript Node.js

Para ver este conjunto de claves y la función limitRegions en un ejemplo práctico, consulte kms_regional_discovery.ts.

const discovery = true const clientProvider = limitRegions(['us-west-2'], getKmsClient) const keyring = new KmsKeyringNode({ clientProvider, discovery, discoveryFilter: { accountIDs: ['111122223333'], partition: 'aws' } })
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);

SDK de cifrado de AWS para JavaScript También exporta una excludeRegions función para Node.js y el navegador. Esta función crea un conjunto de claves de detección AWS KMS regional que omite determinadas AWS KMS keys regiones. En el siguiente ejemplo, se crea un conjunto de claves de detección AWS KMS regional que se puede usar AWS KMS keys en la cuenta 111122223333 en todos los países Región de AWS excepto en EE. UU. Este (Virginia del Norte) (us-east-1).

No SDK de cifrado de AWS para C tiene un método análogo, pero puede implementarlo creando uno personalizado. ClientSupplier

Este ejemplo muestra el código de Node.js.

const discovery = true const clientProvider = excludeRegions(['us-east-1'], getKmsClient) const keyring = new KmsKeyringNode({ clientProvider, discovery, discoveryFilter: { accountIDs: [111122223333], partition: 'aws' } })